Forráskód Böngészése

LibWeb: Make EventListener::function() return a reference

Andreas Kling 5 éve
szülő
commit
97382677bd

+ 3 - 2
Libraries/LibWeb/DOM/EventListener.cpp

@@ -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();
 }
 
 }

+ 1 - 1
Libraries/LibWeb/DOM/EventListener.h

@@ -43,7 +43,7 @@ public:
     {
     }
 
-    JS::Function* function();
+    JS::Function& function();
 
 private:
     JS::Handle<JS::Function> m_function;

+ 6 - 5
Libraries/LibWeb/DOM/Node.cpp

@@ -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));
         }
     }
 

+ 6 - 5
Libraries/LibWeb/DOM/XMLHttpRequest.cpp

@@ -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));
         }
     }
 }