Changeset 197391 in webkit for trunk/Source/JavaScriptCore/runtime
- Timestamp:
- Mar 1, 2016, 12:11:20 AM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore/runtime
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/ClassInfo.h
r197379 r197391 103 103 typedef PassRefPtr<ArrayBufferView> (*GetTypedArrayImpl)(JSArrayBufferView*); 104 104 GetTypedArrayImpl getTypedArrayImpl; 105 106 typedef bool (*PreventExtensionsFunctionPtr)(JSObject*, ExecState*); 107 PreventExtensionsFunctionPtr preventExtensions; 105 108 106 109 typedef void (*DumpToStreamFunctionPtr)(const JSCell*, PrintStream&); … … 155 158 &ClassName::slowDownAndWasteMemory, \ 156 159 &ClassName::getTypedArrayImpl, \ 160 &ClassName::preventExtensions, \ 157 161 &ClassName::dumpToStream, \ 158 162 &ClassName::estimatedSize \ -
trunk/Source/JavaScriptCore/runtime/JSCell.cpp
r197379 r197391 271 271 } 272 272 273 bool JSCell::preventExtensions(JSObject*, ExecState*) 274 { 275 RELEASE_ASSERT_NOT_REACHED(); 276 } 277 273 278 } // namespace JSC -
trunk/Source/JavaScriptCore/runtime/JSCell.h
r197379 r197391 207 207 static NO_RETURN_DUE_TO_CRASH void getStructurePropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode); 208 208 static NO_RETURN_DUE_TO_CRASH void getGenericPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode); 209 static NO_RETURN_DUE_TO_CRASH bool preventExtensions(JSObject*, ExecState*); 209 210 210 211 static String className(const JSObject*); -
trunk/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.cpp
r196722 r197391 50 50 } 51 51 52 void JSModuleNamespaceObject::finishCreation( VM& vm, JSGlobalObject* globalObject, JSModuleRecord* moduleRecord, const IdentifierSet& exports)52 void JSModuleNamespaceObject::finishCreation(ExecState* exec, JSGlobalObject* globalObject, JSModuleRecord* moduleRecord, const IdentifierSet& exports) 53 53 { 54 VM& vm = exec->vm(); 54 55 Base::finishCreation(vm); 55 56 ASSERT(inherits(info())); … … 79 80 // http://www.ecma-international.org/ecma-262/6.0/#sec-module-namespace-exotic-objects-isextensible 80 81 // http://www.ecma-international.org/ecma-262/6.0/#sec-module-namespace-exotic-objects-preventextensions 81 preventExtensions(vm); 82 methodTable(vm)->preventExtensions(this, exec); 83 ASSERT(!exec->hadException()); 82 84 } 83 85 -
trunk/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.h
r189429 r197391 42 42 { 43 43 JSModuleNamespaceObject* object = new (NotNull, allocateCell<JSModuleNamespaceObject>(exec->vm().heap)) JSModuleNamespaceObject(exec->vm(), structure); 44 object->finishCreation(exec ->vm(), globalObject, moduleRecord, exports);44 object->finishCreation(exec, globalObject, moduleRecord, exports); 45 45 return object; 46 46 } … … 63 63 64 64 protected: 65 JS_EXPORT_PRIVATE void finishCreation( VM&, JSGlobalObject*, JSModuleRecord*, const IdentifierSet& exports);65 JS_EXPORT_PRIVATE void finishCreation(ExecState*, JSGlobalObject*, JSModuleRecord*, const IdentifierSet& exports); 66 66 JS_EXPORT_PRIVATE JSModuleNamespaceObject(VM&, Structure*); 67 67 -
trunk/Source/JavaScriptCore/runtime/JSObject.cpp
r197379 r197391 1676 1676 } 1677 1677 1678 void JSObject::preventExtensions(VM& vm) 1679 { 1680 if (!isExtensible()) 1681 return; 1682 enterDictionaryIndexingMode(vm); 1683 setStructure(vm, Structure::preventExtensionsTransition(vm, structure(vm))); 1678 bool JSObject::preventExtensions(JSObject* object, ExecState* exec) 1679 { 1680 if (!object->isExtensible()) 1681 return true; 1682 1683 VM& vm = exec->vm(); 1684 object->enterDictionaryIndexingMode(vm); 1685 object->setStructure(vm, Structure::preventExtensionsTransition(vm, object->structure(vm))); 1686 return true; 1684 1687 } 1685 1688 -
trunk/Source/JavaScriptCore/runtime/JSObject.h
r197379 r197391 615 615 JS_EXPORT_PRIVATE void seal(VM&); 616 616 JS_EXPORT_PRIVATE void freeze(VM&); 617 JS_EXPORT_PRIVATE void preventExtensions(VM&);617 JS_EXPORT_PRIVATE static bool preventExtensions(JSObject*, ExecState*); 618 618 bool isSealed(VM& vm) { return structure(vm)->isSealed(vm); } 619 619 bool isFrozen(VM& vm) { return structure(vm)->isFrozen(vm); } -
trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp
r197295 r197391 517 517 518 518 // 3. Set the [[Extensible]] internal property of O to false. 519 object->preventExtensions(exec->vm()); 519 object->methodTable(exec->vm())->preventExtensions(object, exec); 520 if (exec->hadException()) 521 return JSValue::encode(JSValue()); 520 522 521 523 // 4. Return O. … … 555 557 556 558 // 3. Set the [[Extensible]] internal property of O to false. 557 object->preventExtensions(exec->vm()); 559 object->methodTable(exec->vm())->preventExtensions(object, exec); 560 if (exec->hadException()) 561 return nullptr; 558 562 559 563 // 4. Return O. … … 567 571 if (!obj.isObject()) 568 572 return JSValue::encode(obj); 569 return JSValue::encode(objectConstructorFreeze(exec, asObject(obj))); 573 JSObject* result = objectConstructorFreeze(exec, asObject(obj)); 574 if (exec->hadException()) 575 return JSValue::encode(JSValue()); 576 return JSValue::encode(result); 570 577 } 571 578 572 579 EncodedJSValue JSC_HOST_CALL objectConstructorPreventExtensions(ExecState* exec) 573 580 { 574 JSValue obj = exec->argument(0); 575 if (!obj.isObject()) 576 return JSValue::encode(obj); 577 asObject(obj)->preventExtensions(exec->vm()); 578 return JSValue::encode(obj); 581 JSValue argument = exec->argument(0); 582 if (!argument.isObject()) 583 return JSValue::encode(argument); 584 JSObject* object = asObject(argument); 585 object->methodTable(exec->vm())->preventExtensions(object, exec); 586 return JSValue::encode(object); 579 587 } 580 588 -
trunk/Source/JavaScriptCore/runtime/ReflectObject.cpp
r196722 r197391 187 187 if (!target.isObject()) 188 188 return JSValue::encode(throwTypeError(exec, ASCIILiteral("Reflect.preventExtensions requires the first argument be an object"))); 189 asObject(target)->preventExtensions(exec->vm()); 190 return JSValue::encode(jsBoolean(true)); 189 JSObject* object = asObject(target); 190 bool result = object->methodTable(exec->vm())->preventExtensions(object, exec); 191 if (exec->hadException()) 192 return JSValue::encode(JSValue()); 193 return JSValue::encode(jsBoolean(result)); 191 194 } 192 195 -
trunk/Source/JavaScriptCore/runtime/Structure.cpp
r197210 r197391 204 204 setHasNonEnumerableProperties(false); 205 205 setAttributesInPrevious(0); 206 set PreventExtensions(false);206 setDidPreventExtensions(false); 207 207 setDidTransition(false); 208 208 setStaticFunctionsReified(false); … … 236 236 setHasNonEnumerableProperties(false); 237 237 setAttributesInPrevious(0); 238 set PreventExtensions(false);238 setDidPreventExtensions(false); 239 239 setDidTransition(false); 240 240 setStaticFunctionsReified(false); … … 267 267 setHasNonEnumerableProperties(previous->hasNonEnumerableProperties()); 268 268 setAttributesInPrevious(0); 269 set PreventExtensions(previous->preventExtensions());269 setDidPreventExtensions(previous->didPreventExtensions()); 270 270 setDidTransition(true); 271 271 setStaticFunctionsReified(previous->staticFunctionsReified()); … … 626 626 transition->propertyTable().set(vm, transition, structure->copyPropertyTableForPinning(vm)); 627 627 transition->m_offset = structure->m_offset; 628 transition->set PreventExtensions(true);628 transition->setDidPreventExtensions(true); 629 629 transition->pin(); 630 630 -
trunk/Source/JavaScriptCore/runtime/Structure.h
r196179 r197391 184 184 JS_EXPORT_PRIVATE bool isSealed(VM&); 185 185 JS_EXPORT_PRIVATE bool isFrozen(VM&); 186 bool isExtensible() const { return ! preventExtensions(); }186 bool isExtensible() const { return !didPreventExtensions(); } 187 187 bool putWillGrowOutOfLineStorage(); 188 188 size_t suggestedNewOutOfLineStorageCapacity(); … … 580 580 DEFINE_BITFIELD(bool, hasNonEnumerableProperties, HasNonEnumerableProperties, 1, 5); 581 581 DEFINE_BITFIELD(unsigned, attributesInPrevious, AttributesInPrevious, 14, 6); 582 DEFINE_BITFIELD(bool, preventExtensions,PreventExtensions, 1, 20);582 DEFINE_BITFIELD(bool, didPreventExtensions, DidPreventExtensions, 1, 20); 583 583 DEFINE_BITFIELD(bool, didTransition, DidTransition, 1, 21); 584 584 DEFINE_BITFIELD(bool, staticFunctionsReified, StaticFunctionsReified, 1, 22);
Note:
See TracChangeset
for help on using the changeset viewer.