mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:38:12 +00:00
LibJS: Add Object::put_native_function() for convenience
This makes it a little bit nicer to add native function properties to JavaScript objects. Thanks to Sergey for suggesting it! :^)
This commit is contained in:
parent
6089d6566b
commit
9f38f4dbfb
5 changed files with 16 additions and 7 deletions
|
@ -9,18 +9,18 @@
|
|||
|
||||
namespace JS {
|
||||
|
||||
GlobalObject::GlobalObject(Heap& heap)
|
||||
GlobalObject::GlobalObject()
|
||||
{
|
||||
put("print", heap.allocate<NativeFunction>([](Interpreter&, Vector<Value> arguments) -> Value {
|
||||
put_native_function("print", [](Interpreter&, Vector<Value> arguments) -> Value {
|
||||
for (auto& argument : arguments)
|
||||
printf("%s ", argument.to_string().characters());
|
||||
return js_undefined();
|
||||
}));
|
||||
put("gc", heap.allocate<NativeFunction>([](Interpreter& interpreter, Vector<Value>) -> Value {
|
||||
});
|
||||
put_native_function("gc", [](Interpreter& interpreter, Vector<Value>) -> Value {
|
||||
dbg() << "Forced garbage collection requested!";
|
||||
interpreter.heap().collect_garbage();
|
||||
return js_undefined();
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
GlobalObject::~GlobalObject()
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace JS {
|
|||
|
||||
class GlobalObject final : public Object {
|
||||
public:
|
||||
explicit GlobalObject(Heap&);
|
||||
explicit GlobalObject();
|
||||
virtual ~GlobalObject() override;
|
||||
|
||||
private:
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace JS {
|
|||
Interpreter::Interpreter()
|
||||
: m_heap(*this)
|
||||
{
|
||||
m_global_object = heap().allocate<GlobalObject>(heap());
|
||||
m_global_object = heap().allocate<GlobalObject>();
|
||||
}
|
||||
|
||||
Interpreter::~Interpreter()
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
*/
|
||||
|
||||
#include <AK/String.h>
|
||||
#include <LibJS/Heap.h>
|
||||
#include <LibJS/NativeFunction.h>
|
||||
#include <LibJS/Object.h>
|
||||
#include <LibJS/Value.h>
|
||||
|
||||
|
@ -48,6 +50,11 @@ void Object::put(String property_name, Value value)
|
|||
m_properties.set(property_name, move(value));
|
||||
}
|
||||
|
||||
void Object::put_native_function(String property_name, AK::Function<Value(Interpreter&, Vector<Value>)> native_function)
|
||||
{
|
||||
put(property_name, heap().allocate<NativeFunction>(move(native_function)));
|
||||
}
|
||||
|
||||
void Object::visit_children(Cell::Visitor& visitor)
|
||||
{
|
||||
Cell::visit_children(visitor);
|
||||
|
|
|
@ -41,6 +41,8 @@ public:
|
|||
Value get(String property_name) const;
|
||||
void put(String property_name, Value);
|
||||
|
||||
void put_native_function(String property_name, AK::Function<Value(Interpreter&, Vector<Value>)>);
|
||||
|
||||
virtual bool is_function() const { return false; }
|
||||
virtual bool is_native_function() const { return false; }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue