[ES6] Implement Reflect.preventExtensions
[WebKit-https.git] / Source / JavaScriptCore / runtime / ReflectObject.cpp
index 0e30d9fdcf2a0b3bc3e124693248b04571d612d0..19c31ab863d013a91ae3b526ff73106532b8c022 100644 (file)
 
 namespace JSC {
 
-static EncodedJSValue JSC_HOST_CALL reflectObjectOwnKeys(ExecState*);
-
-}
-
-namespace JSC {
-
 static EncodedJSValue JSC_HOST_CALL reflectObjectIsExtensible(ExecState*);
+static EncodedJSValue JSC_HOST_CALL reflectObjectOwnKeys(ExecState*);
+static EncodedJSValue JSC_HOST_CALL reflectObjectPreventExtensions(ExecState*);
 
 }
 
@@ -52,10 +48,11 @@ const ClassInfo ReflectObject::s_info = { "Reflect", &Base::s_info, &reflectObje
 
 /* Source for ReflectObject.lut.h
 @begin reflectObjectTable
-    apply           reflectObjectApply          DontEnum|Function 3
-    deleteProperty  reflectObjectDeleteProperty DontEnum|Function 2
-    isExtensible    reflectObjectIsExtensible   DontEnum|Function 1
-    ownKeys         reflectObjectOwnKeys        DontEnum|Function 1
+    apply             reflectObjectApply             DontEnum|Function 3
+    deleteProperty    reflectObjectDeleteProperty    DontEnum|Function 2
+    isExtensible      reflectObjectIsExtensible      DontEnum|Function 1
+    ownKeys           reflectObjectOwnKeys           DontEnum|Function 1
+    preventExtensions reflectObjectPreventExtensions DontEnum|Function 1
 @end
 */
 
@@ -90,7 +87,16 @@ EncodedJSValue JSC_HOST_CALL reflectObjectOwnKeys(ExecState* exec)
     JSValue target = exec->argument(0);
     if (!target.isObject())
         return JSValue::encode(throwTypeError(exec, ASCIILiteral("Reflect.ownKeys requires the first argument be an object")));
-    return JSValue::encode(ownPropertyKeys(exec, jsCast<JSObject*>(target), PropertyNameMode::Both, DontEnumPropertiesMode::Include));
+    return JSValue::encode(ownPropertyKeys(exec, jsCast<JSObject*>(target), PropertyNameMode::StringsAndSymbols, DontEnumPropertiesMode::Include));
+}
+
+EncodedJSValue JSC_HOST_CALL reflectObjectPreventExtensions(ExecState* exec)
+{
+    JSValue target = exec->argument(0);
+    if (!target.isObject())
+        return JSValue::encode(throwTypeError(exec, ASCIILiteral("Reflect.preventExtensions requires the first argument be an object")));
+    asObject(target)->preventExtensions(exec->vm());
+    return JSValue::encode(jsBoolean(true));
 }
 
 } // namespace JSC