+EncodedJSValue JSC_HOST_CALL objectConstructorSetPrototypeOf(ExecState* exec)
+{
+ JSValue objectValue = exec->argument(0);
+ if (objectValue.isUndefinedOrNull())
+ return throwVMTypeError(exec);
+
+ JSValue protoValue = exec->argument(1);
+ if (!protoValue.isObject() && !protoValue.isNull())
+ return throwVMTypeError(exec);
+
+ JSObject* object = objectValue.toObject(exec);
+ if (exec->hadException())
+ return JSValue::encode(objectValue);
+
+ if (!checkProtoSetterAccessAllowed(exec, object))
+ return JSValue::encode(objectValue);
+
+ if (!object->isExtensible())
+ return throwVMError(exec, createTypeError(exec, StrictModeReadonlyPropertyWriteError));
+
+ if (!object->setPrototypeWithCycleCheck(exec, protoValue)) {
+ exec->vm().throwException(exec, createError(exec, ASCIILiteral("cyclic __proto__ value")));
+ return JSValue::encode(jsUndefined());
+ }
+
+ return JSValue::encode(objectValue);
+}
+