X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/81345200c95645a1b0d2635520f96ad55dfde63f..refs/heads/master:/runtime/ObjectConstructor.h diff --git a/runtime/ObjectConstructor.h b/runtime/ObjectConstructor.h index 4a6b471..8fc5c73 100644 --- a/runtime/ObjectConstructor.h +++ b/runtime/ObjectConstructor.h @@ -27,62 +27,70 @@ namespace JSC { - class ObjectPrototype; +EncodedJSValue JSC_HOST_CALL objectConstructorGetOwnPropertyDescriptor(ExecState*); +EncodedJSValue JSC_HOST_CALL objectConstructorGetOwnPropertySymbols(ExecState*); +EncodedJSValue JSC_HOST_CALL objectConstructorKeys(ExecState*); - class ObjectConstructor : public InternalFunction { - public: - typedef InternalFunction Base; +class ObjectPrototype; - static ObjectConstructor* create(VM& vm, Structure* structure, ObjectPrototype* objectPrototype) - { - ObjectConstructor* constructor = new (NotNull, allocateCell(vm.heap)) ObjectConstructor(vm, structure); - constructor->finishCreation(vm, objectPrototype); - return constructor; - } +class ObjectConstructor : public InternalFunction { +public: + typedef InternalFunction Base; + static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot; - static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&); - - DECLARE_INFO; - - static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) - { - return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info()); - } - - protected: - void finishCreation(VM& vm, ObjectPrototype*); - static const unsigned StructureFlags = OverridesGetOwnPropertySlot | InternalFunction::StructureFlags; - - private: - ObjectConstructor(VM&, Structure*); - static ConstructType getConstructData(JSCell*, ConstructData&); - static CallType getCallData(JSCell*, CallData&); - }; - - inline JSObject* constructEmptyObject(ExecState* exec, Structure* structure) + static ObjectConstructor* create(VM& vm, JSGlobalObject* globalObject, Structure* structure, ObjectPrototype* objectPrototype) { - return JSFinalObject::create(exec, structure); + ObjectConstructor* constructor = new (NotNull, allocateCell(vm.heap)) ObjectConstructor(vm, structure); + constructor->finishCreation(vm, globalObject, objectPrototype); + return constructor; } - inline JSObject* constructEmptyObject(ExecState* exec, JSObject* prototype, unsigned inlineCapacity) - { - JSGlobalObject* globalObject = exec->lexicalGlobalObject(); - PrototypeMap& prototypeMap = globalObject->vm().prototypeMap; - Structure* structure = prototypeMap.emptyObjectStructureForPrototype( - prototype, inlineCapacity); - return constructEmptyObject(exec, structure); - } + static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&); - inline JSObject* constructEmptyObject(ExecState* exec, JSObject* prototype) - { - return constructEmptyObject(exec, prototype, JSFinalObject::defaultInlineCapacity()); - } + DECLARE_INFO; - inline JSObject* constructEmptyObject(ExecState* exec) + static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) { - return constructEmptyObject(exec, exec->lexicalGlobalObject()->objectPrototype()); + return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info()); } + JSFunction* addDefineProperty(ExecState*, JSGlobalObject*); + +protected: + void finishCreation(VM&, JSGlobalObject*, ObjectPrototype*); + +private: + ObjectConstructor(VM&, Structure*); + static ConstructType getConstructData(JSCell*, ConstructData&); + static CallType getCallData(JSCell*, CallData&); +}; + +inline JSObject* constructEmptyObject(ExecState* exec, Structure* structure) +{ + return JSFinalObject::create(exec, structure); +} + +inline JSObject* constructEmptyObject(ExecState* exec, JSObject* prototype, unsigned inlineCapacity) +{ + JSGlobalObject* globalObject = exec->lexicalGlobalObject(); + PrototypeMap& prototypeMap = globalObject->vm().prototypeMap; + Structure* structure = prototypeMap.emptyObjectStructureForPrototype( + prototype, inlineCapacity); + return constructEmptyObject(exec, structure); +} + +inline JSObject* constructEmptyObject(ExecState* exec, JSObject* prototype) +{ + return constructEmptyObject(exec, prototype, JSFinalObject::defaultInlineCapacity()); +} + +inline JSObject* constructEmptyObject(ExecState* exec) +{ + return constructEmptyObject(exec, exec->lexicalGlobalObject()->objectPrototype()); +} + +JSObject* objectConstructorFreeze(ExecState*, JSObject*); + } // namespace JSC #endif // ObjectConstructor_h