mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 14:02:46 +00:00 
			
		
		
		
	LibJS: Rework how native functions are called to improve |this| value
Native functions now only get the Interpreter& as an argument. They can then extract |this| along with any indexed arguments it wants from it. This forces functions that want |this| to actually deal with calling interpreter.this_value().to_object(), and dealing with the possibility of a non-object |this|. This is still not great but let's keep massaging it forward.
This commit is contained in:
		
							parent
							
								
									c209ea1985
								
							
						
					
					
						commit
						7c4e53f31e
					
				
					 25 changed files with 145 additions and 102 deletions
				
			
		|  | @ -24,8 +24,9 @@ | |||
|  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| #include <AK/Function.h> | ||||
| #include <AK/FlyString.h> | ||||
| #include <AK/Function.h> | ||||
| #include <LibJS/Interpreter.h> | ||||
| #include <LibJS/Runtime/Function.h> | ||||
| #include <LibWeb/Bindings/EventListenerWrapper.h> | ||||
| #include <LibWeb/Bindings/EventTargetWrapper.h> | ||||
|  | @ -38,7 +39,12 @@ namespace Bindings { | |||
| EventTargetWrapper::EventTargetWrapper(EventTarget& impl) | ||||
|     : m_impl(impl) | ||||
| { | ||||
|     put_native_function("addEventListener", [](Object* this_object, const Vector<JS::Value>& arguments) { | ||||
|     put_native_function("addEventListener", [](JS::Interpreter& interpreter) -> JS::Value { | ||||
|         auto* this_object = interpreter.this_value().to_object(interpreter.heap()); | ||||
|         if (!this_object) | ||||
|             return {}; | ||||
| 
 | ||||
|         auto& arguments = interpreter.call_frame().arguments; | ||||
|         if (arguments.size() < 2) | ||||
|             return JS::js_undefined(); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling