LibWeb: Make EventListener::function() return a reference
This commit is contained in:
parent
a38658dc88
commit
97382677bd
Notes:
sideshowbarker
2024-07-19 07:11:41 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/97382677bd2
4 changed files with 16 additions and 13 deletions
|
@ -29,9 +29,10 @@
|
|||
|
||||
namespace Web {
|
||||
|
||||
JS::Function* EventListener::function()
|
||||
JS::Function& EventListener::function()
|
||||
{
|
||||
return m_function.cell();
|
||||
ASSERT(m_function.cell());
|
||||
return *m_function.cell();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
JS::Function* function();
|
||||
JS::Function& function();
|
||||
|
||||
private:
|
||||
JS::Handle<JS::Function> m_function;
|
||||
|
|
|
@ -134,18 +134,19 @@ void Node::dispatch_event(NonnullRefPtr<Event> event)
|
|||
{
|
||||
for (auto& listener : listeners()) {
|
||||
if (listener.event_name == event->name()) {
|
||||
auto* function = const_cast<EventListener&>(*listener.listener).function();
|
||||
auto& function = const_cast<EventListener&>(*listener.listener).function();
|
||||
#ifdef EVENT_DEBUG
|
||||
static_cast<const JS::ScriptFunction*>(function)->body().dump(0);
|
||||
#endif
|
||||
auto* this_value = wrap(function->heap(), *this);
|
||||
auto& heap = function.heap();
|
||||
auto* this_value = wrap(heap, *this);
|
||||
#ifdef EVENT_DEBUG
|
||||
dbg() << "calling event listener with this=" << this_value;
|
||||
#endif
|
||||
auto* event_wrapper = wrap(function->heap(), *event);
|
||||
JS::MarkedValueList arguments(function->heap());
|
||||
auto* event_wrapper = wrap(heap, *event);
|
||||
JS::MarkedValueList arguments(heap);
|
||||
arguments.append(event_wrapper);
|
||||
document().interpreter().call(function, this_value, move(arguments));
|
||||
document().interpreter().call(&function, this_value, move(arguments));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -92,11 +92,12 @@ void XMLHttpRequest::dispatch_event(NonnullRefPtr<Event> event)
|
|||
{
|
||||
for (auto& listener : listeners()) {
|
||||
if (listener.event_name == event->name()) {
|
||||
auto* function = const_cast<EventListener&>(*listener.listener).function();
|
||||
auto* this_value = wrap(function->heap(), *this);
|
||||
JS::MarkedValueList arguments(function->heap());
|
||||
arguments.append(wrap(function->heap(), *event));
|
||||
function->interpreter().call(function, this_value, move(arguments));
|
||||
auto& function = const_cast<EventListener&>(*listener.listener).function();
|
||||
auto& heap = function.heap();
|
||||
auto* this_value = wrap(heap, *this);
|
||||
JS::MarkedValueList arguments(heap);
|
||||
arguments.append(wrap(heap, *event));
|
||||
function.interpreter().call(&function, this_value, move(arguments));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue