Bläddra i källkod

LibJS: Add define_direct_{property,accessor}_without_transition()

Linus Groh 3 år sedan
förälder
incheckning
47ab84ffd9

+ 13 - 0
Userland/Libraries/LibJS/Runtime/Object.cpp

@@ -6,6 +6,7 @@
  */
  */
 
 
 #include <AK/String.h>
 #include <AK/String.h>
+#include <AK/TemporaryChange.h>
 #include <LibJS/Interpreter.h>
 #include <LibJS/Interpreter.h>
 #include <LibJS/Runtime/AbstractOperations.h>
 #include <LibJS/Runtime/AbstractOperations.h>
 #include <LibJS/Runtime/Accessor.h>
 #include <LibJS/Runtime/Accessor.h>
@@ -1052,6 +1053,18 @@ void Object::define_direct_accessor(PropertyName const& property_name, FunctionO
     }
     }
 }
 }
 
 
+void Object::define_direct_property_without_transition(PropertyName const& property_name, Value value, PropertyAttributes attributes)
+{
+    TemporaryChange disable_transitions(m_transitions_enabled, false);
+    define_direct_property(property_name, value, attributes);
+}
+
+void Object::define_direct_accessor_without_transition(PropertyName const& property_name, FunctionObject* getter, FunctionObject* setter, PropertyAttributes attributes)
+{
+    TemporaryChange disable_transitions(m_transitions_enabled, false);
+    define_direct_accessor(property_name, getter, setter, attributes);
+}
+
 void Object::ensure_shape_is_unique()
 void Object::ensure_shape_is_unique()
 {
 {
     if (shape().is_unique())
     if (shape().is_unique())

+ 3 - 0
Userland/Libraries/LibJS/Runtime/Object.h

@@ -124,6 +124,9 @@ public:
     void define_direct_property(PropertyName const& property_name, Value value, PropertyAttributes attributes) { storage_set(property_name, { value, attributes }); };
     void define_direct_property(PropertyName const& property_name, Value value, PropertyAttributes attributes) { storage_set(property_name, { value, attributes }); };
     void define_direct_accessor(PropertyName const&, FunctionObject* getter, FunctionObject* setter, PropertyAttributes attributes);
     void define_direct_accessor(PropertyName const&, FunctionObject* getter, FunctionObject* setter, PropertyAttributes attributes);
 
 
+    void define_direct_property_without_transition(PropertyName const&, Value, PropertyAttributes);
+    void define_direct_accessor_without_transition(PropertyName const&, FunctionObject* getter, FunctionObject* setter, PropertyAttributes);
+
     void define_native_function(PropertyName const&, Function<Value(VM&, GlobalObject&)>, i32 length, PropertyAttributes attributes);
     void define_native_function(PropertyName const&, Function<Value(VM&, GlobalObject&)>, i32 length, PropertyAttributes attributes);
     void define_native_accessor(PropertyName const&, Function<Value(VM&, GlobalObject&)> getter, Function<Value(VM&, GlobalObject&)> setter, PropertyAttributes attributes);
     void define_native_accessor(PropertyName const&, Function<Value(VM&, GlobalObject&)> getter, Function<Value(VM&, GlobalObject&)> setter, PropertyAttributes attributes);