mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:02:45 +00:00 
			
		
		
		
	LibJS: Convert resolve_this_binding() to ThrowCompletionOr
Also add spec comments.
This commit is contained in:
		
							parent
							
								
									dc03529ffd
								
							
						
					
					
						commit
						a24df37713
					
				
					 4 changed files with 13 additions and 5 deletions
				
			
		|  | @ -2252,7 +2252,7 @@ Value SpreadExpression::execute(Interpreter& interpreter, GlobalObject& global_o | ||||||
| Value ThisExpression::execute(Interpreter& interpreter, GlobalObject& global_object) const | Value ThisExpression::execute(Interpreter& interpreter, GlobalObject& global_object) const | ||||||
| { | { | ||||||
|     InterpreterNodeScope node_scope { interpreter, *this }; |     InterpreterNodeScope node_scope { interpreter, *this }; | ||||||
|     return interpreter.vm().resolve_this_binding(global_object); |     return TRY_OR_DISCARD(interpreter.vm().resolve_this_binding(global_object)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ThisExpression::dump(int indent) const | void ThisExpression::dump(int indent) const | ||||||
|  |  | ||||||
|  | @ -315,7 +315,13 @@ void Jump::execute_impl(Bytecode::Interpreter& interpreter) const | ||||||
| 
 | 
 | ||||||
| void ResolveThisBinding::execute_impl(Bytecode::Interpreter& interpreter) const | void ResolveThisBinding::execute_impl(Bytecode::Interpreter& interpreter) const | ||||||
| { | { | ||||||
|     interpreter.accumulator() = interpreter.vm().resolve_this_binding(interpreter.global_object()); |     auto this_binding_or_error = interpreter.vm().resolve_this_binding(interpreter.global_object()); | ||||||
|  |     if (this_binding_or_error.is_throw_completion()) { | ||||||
|  |         interpreter.vm().throw_exception(interpreter.global_object(), this_binding_or_error.release_error().value()); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     interpreter.accumulator() = this_binding_or_error.release_value(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Jump::replace_references_impl(BasicBlock const& from, BasicBlock const& to) | void Jump::replace_references_impl(BasicBlock const& from, BasicBlock const& to) | ||||||
|  |  | ||||||
|  | @ -503,10 +503,12 @@ void VM::throw_exception(Exception& exception) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // 9.4.4 ResolveThisBinding ( ), https://tc39.es/ecma262/#sec-resolvethisbinding
 | // 9.4.4 ResolveThisBinding ( ), https://tc39.es/ecma262/#sec-resolvethisbinding
 | ||||||
| Value VM::resolve_this_binding(GlobalObject& global_object) | ThrowCompletionOr<Value> VM::resolve_this_binding(GlobalObject& global_object) | ||||||
| { | { | ||||||
|  |     // 1. Let envRec be GetThisEnvironment().
 | ||||||
|     auto& environment = get_this_environment(*this); |     auto& environment = get_this_environment(*this); | ||||||
|     return TRY_OR_DISCARD(environment.get_this_binding(global_object)); |     // 2. Return ? envRec.GetThisBinding().
 | ||||||
|  |     return TRY(environment.get_this_binding(global_object)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| String VM::join_arguments(size_t start_index) const | String VM::join_arguments(size_t start_index) const | ||||||
|  |  | ||||||
|  | @ -155,7 +155,7 @@ public: | ||||||
|         return running_execution_context().this_value; |         return running_execution_context().this_value; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     Value resolve_this_binding(GlobalObject&); |     ThrowCompletionOr<Value> resolve_this_binding(GlobalObject&); | ||||||
| 
 | 
 | ||||||
|     Value last_value() const { return m_last_value; } |     Value last_value() const { return m_last_value; } | ||||||
|     void set_last_value(Badge<Bytecode::Interpreter>, Value value) { m_last_value = value; } |     void set_last_value(Badge<Bytecode::Interpreter>, Value value) { m_last_value = value; } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 davidot
						davidot