瀏覽代碼

LibJS: Expose JSON.parse as an intrinsic value of the global object

This will allow us to safely call it if we need to parse JSON within
LibJS.
davidot 3 年之前
父節點
當前提交
202de6ed25
共有 2 個文件被更改,包括 4 次插入0 次删除
  1. 2 0
      Userland/Libraries/LibJS/Runtime/GlobalObject.cpp
  2. 2 0
      Userland/Libraries/LibJS/Runtime/GlobalObject.h

+ 2 - 0
Userland/Libraries/LibJS/Runtime/GlobalObject.cpp

@@ -304,6 +304,7 @@ void GlobalObject::initialize_global_object()
     m_array_prototype_values_function = &m_array_prototype->get_without_side_effects(vm.names.values).as_function();
     m_array_prototype_values_function = &m_array_prototype->get_without_side_effects(vm.names.values).as_function();
     m_date_constructor_now_function = &m_date_constructor->get_without_side_effects(vm.names.now).as_function();
     m_date_constructor_now_function = &m_date_constructor->get_without_side_effects(vm.names.now).as_function();
     m_eval_function = &get_without_side_effects(vm.names.eval).as_function();
     m_eval_function = &get_without_side_effects(vm.names.eval).as_function();
+    m_json_parse_function = &get_without_side_effects(vm.names.JSON).as_object().get_without_side_effects(vm.names.parse).as_function();
 }
 }
 
 
 GlobalObject::~GlobalObject()
 GlobalObject::~GlobalObject()
@@ -324,6 +325,7 @@ void GlobalObject::visit_edges(Visitor& visitor)
     visitor.visit(m_date_constructor_now_function);
     visitor.visit(m_date_constructor_now_function);
     visitor.visit(m_eval_function);
     visitor.visit(m_eval_function);
     visitor.visit(m_throw_type_error_function);
     visitor.visit(m_throw_type_error_function);
+    visitor.visit(m_json_parse_function);
 
 
 #define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
 #define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
     visitor.visit(m_##snake_name##_constructor);                                         \
     visitor.visit(m_##snake_name##_constructor);                                         \

+ 2 - 0
Userland/Libraries/LibJS/Runtime/GlobalObject.h

@@ -42,6 +42,7 @@ public:
     FunctionObject* date_constructor_now_function() const { return m_date_constructor_now_function; }
     FunctionObject* date_constructor_now_function() const { return m_date_constructor_now_function; }
     FunctionObject* eval_function() const { return m_eval_function; }
     FunctionObject* eval_function() const { return m_eval_function; }
     FunctionObject* throw_type_error_function() const { return m_throw_type_error_function; }
     FunctionObject* throw_type_error_function() const { return m_throw_type_error_function; }
+    FunctionObject* json_parse_function() const { return m_json_parse_function; }
 
 
 #define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
 #define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
     ConstructorName* snake_name##_constructor() { return m_##snake_name##_constructor; } \
     ConstructorName* snake_name##_constructor() { return m_##snake_name##_constructor; } \
@@ -109,6 +110,7 @@ private:
     FunctionObject* m_date_constructor_now_function { nullptr };
     FunctionObject* m_date_constructor_now_function { nullptr };
     FunctionObject* m_eval_function { nullptr };
     FunctionObject* m_eval_function { nullptr };
     FunctionObject* m_throw_type_error_function { nullptr };
     FunctionObject* m_throw_type_error_function { nullptr };
+    FunctionObject* m_json_parse_function { nullptr };
 
 
 #define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
 #define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
     ConstructorName* m_##snake_name##_constructor { nullptr };                           \
     ConstructorName* m_##snake_name##_constructor { nullptr };                           \