Просмотр исходного кода

LibJS: Add Interpreter::call(Function*, this_value, arguments)

This helper function takes care of pushing/popping a call frame so you
don't need to worry about it.
Andreas Kling 5 лет назад
Родитель
Сommit
e96ef450f6
2 измененных файлов с 12 добавлено и 0 удалено
  1. 10 0
      Libraries/LibJS/Interpreter.cpp
  2. 2 0
      Libraries/LibJS/Interpreter.h

+ 10 - 0
Libraries/LibJS/Interpreter.cpp

@@ -161,4 +161,14 @@ void Interpreter::gather_roots(Badge<Heap>, HashTable<Cell*>& roots)
     }
 }
 
+Value Interpreter::call(Function* function, Value this_value, const Vector<Value>& arguments)
+{
+    auto& call_frame = push_call_frame();
+    call_frame.this_value = this_value;
+    call_frame.arguments = arguments;
+    auto result = function->call(*this, call_frame.arguments);
+    pop_call_frame();
+    return result;
+}
+
 }

+ 2 - 0
Libraries/LibJS/Interpreter.h

@@ -84,6 +84,8 @@ public:
     void enter_scope(const ScopeNode&, Vector<Argument>, ScopeType);
     void exit_scope(const ScopeNode&);
 
+    Value call(Function*, Value this_value, const Vector<Value>& arguments);
+
     CallFrame& push_call_frame() { m_call_stack.append({ js_undefined(), {} }); return m_call_stack.last(); }
     void pop_call_frame() { m_call_stack.take_last(); }
     Value this_value() const