Changeset 273661 in webkit
- Timestamp:
- Mar 1, 2021 11:21:41 AM (17 months ago)
- Location:
- trunk
- Files:
-
- 49 edited
-
JSTests/ChangeLog (modified) (1 diff)
-
JSTests/test262/expectations.yaml (modified) (1 diff)
-
Source/JavaScriptCore/ChangeLog (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGOperations.cpp (modified) (3 diffs)
-
Source/JavaScriptCore/runtime/AggregateErrorConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/BooleanConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/CommonSlowPaths.cpp (modified) (2 diffs)
-
Source/JavaScriptCore/runtime/DateConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/ErrorConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/FinalizationRegistryConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/FunctionConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/InternalFunction.cpp (modified) (2 diffs)
-
Source/JavaScriptCore/runtime/InternalFunction.h (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlCollatorConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlDateTimeFormatConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlDisplayNamesConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlListFormatConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlLocaleConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlNumberFormatConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlPluralRulesConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlRelativeTimeFormatConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/IntlSegmenterConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp (modified) (2 diffs)
-
Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h (modified) (2 diffs)
-
Source/JavaScriptCore/runtime/JSGlobalObject.h (modified) (3 diffs)
-
Source/JavaScriptCore/runtime/JSGlobalObjectInlines.h (modified) (1 diff)
-
Source/JavaScriptCore/runtime/MapConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/NumberConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/ObjectConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/ProxyConstructor.cpp (modified) (2 diffs)
-
Source/JavaScriptCore/runtime/ProxyConstructor.h (modified) (1 diff)
-
Source/JavaScriptCore/runtime/RegExpConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/SetConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/StringConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/WeakMapConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/WeakObjectRefConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/runtime/WeakSetConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/wasm/js/WebAssemblyCompileErrorConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/wasm/js/WebAssemblyGlobalConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/wasm/js/WebAssemblyLinkErrorConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/wasm/js/WebAssemblyRuntimeErrorConstructor.cpp (modified) (1 diff)
-
Source/JavaScriptCore/wasm/js/WebAssemblyTableConstructor.cpp (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/bindings/js/JSDOMWrapperCache.h (modified) (1 diff)
-
Source/WebCore/bindings/js/JSHTMLElementCustom.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r273641 r273661 1 2021-03-01 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Throw TypeError when getFunctionRealm hits revoked Proxy 4 https://bugs.webkit.org/show_bug.cgi?id=222523 5 6 Reviewed by Alexey Shvayka. 7 8 * test262/expectations.yaml: 9 1 10 2021-02-28 Yusuke Suzuki <ysuzuki@apple.com> 2 11 -
trunk/JSTests/test262/expectations.yaml
r273634 r273661 610 610 default: 'Test262Error: Expected a TypeError but got a TypeError' 611 611 strict mode: 'Test262Error: Expected a TypeError but got a TypeError' 612 test/built-ins/Function/internals/Construct/base-ctor-revoked-proxy-realm.js:613 default: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'614 strict mode: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'615 test/built-ins/Function/internals/Construct/base-ctor-revoked-proxy.js:616 default: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'617 strict mode: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'618 612 test/built-ins/Function/internals/Construct/derived-return-val-realm.js: 619 613 default: 'Test262Error: Expected a TypeError but got a TypeError' -
trunk/Source/JavaScriptCore/ChangeLog
r273649 r273661 1 2021-03-01 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Throw TypeError when getFunctionRealm hits revoked Proxy 4 https://bugs.webkit.org/show_bug.cgi?id=222523 5 6 Reviewed by Alexey Shvayka. 7 8 This patch throws TypeError when getFunctionRealm encounters revoked Proxy. However, 9 this makes derived structure creation code difficult to be written inlinely. 10 The fast path of derived structure creation must be inlined since this is critical 11 path of every builtin constructors. 12 13 So, this patch introduces JSC_GET_DERIVED_STRUCTURE macro which streamlines the derived 14 structure creation code while keeping the fast path inlined. And it inserts appropriate 15 error checks after this new getFunctionRealm call. 16 17 Then, we appropriately use getFunctionRealm in op_create_this implementation. 18 19 * dfg/DFGOperations.cpp: 20 (JSC::DFG::JSC_DEFINE_JIT_OPERATION): 21 * runtime/AggregateErrorConstructor.cpp: 22 (JSC::JSC_DEFINE_HOST_FUNCTION): 23 * runtime/BooleanConstructor.cpp: 24 (JSC::JSC_DEFINE_HOST_FUNCTION): 25 * runtime/CommonSlowPaths.cpp: 26 (JSC::JSC_DEFINE_COMMON_SLOW_PATH): 27 * runtime/DateConstructor.cpp: 28 (JSC::constructDate): 29 * runtime/ErrorConstructor.cpp: 30 (JSC::JSC_DEFINE_HOST_FUNCTION): 31 * runtime/FinalizationRegistryConstructor.cpp: 32 (JSC::JSC_DEFINE_HOST_FUNCTION): 33 * runtime/FunctionConstructor.cpp: 34 (JSC::constructFunctionSkippingEvalEnabledCheck): 35 * runtime/InternalFunction.cpp: 36 (JSC::getFunctionRealm): 37 * runtime/InternalFunction.h: 38 * runtime/IntlCollatorConstructor.cpp: 39 (JSC::JSC_DEFINE_HOST_FUNCTION): 40 * runtime/IntlDateTimeFormatConstructor.cpp: 41 (JSC::JSC_DEFINE_HOST_FUNCTION): 42 * runtime/IntlDisplayNamesConstructor.cpp: 43 (JSC::JSC_DEFINE_HOST_FUNCTION): 44 * runtime/IntlListFormatConstructor.cpp: 45 (JSC::JSC_DEFINE_HOST_FUNCTION): 46 * runtime/IntlLocaleConstructor.cpp: 47 (JSC::JSC_DEFINE_HOST_FUNCTION): 48 * runtime/IntlNumberFormatConstructor.cpp: 49 (JSC::JSC_DEFINE_HOST_FUNCTION): 50 * runtime/IntlPluralRulesConstructor.cpp: 51 (JSC::JSC_DEFINE_HOST_FUNCTION): 52 * runtime/IntlRelativeTimeFormatConstructor.cpp: 53 (JSC::JSC_DEFINE_HOST_FUNCTION): 54 * runtime/IntlSegmenterConstructor.cpp: 55 (JSC::JSC_DEFINE_HOST_FUNCTION): 56 * runtime/JSArrayBufferConstructor.cpp: 57 (JSC::JSGenericArrayBufferConstructor<sharingMode>::constructImpl): 58 * runtime/JSGenericTypedArrayViewConstructorInlines.h: 59 (JSC::constructCustomArrayBufferIfNeeded): 60 (JSC::constructGenericTypedArrayViewImpl): 61 * runtime/JSGlobalObject.h: 62 (JSC::JSGlobalObject::errorStructureWithErrorType const): 63 (JSC::JSGlobalObject::arrayBufferStructureWithSharingMode const): 64 (JSC::JSGlobalObject::typedArrayStructureWithTypedArrayType const): 65 * runtime/JSGlobalObjectInlines.h: 66 (JSC::JSGlobalObject::arrayStructureForIndexingTypeDuringAllocation const): 67 * runtime/MapConstructor.cpp: 68 (JSC::JSC_DEFINE_HOST_FUNCTION): 69 * runtime/NativeErrorConstructor.cpp: 70 (JSC::NativeErrorConstructor<errorType>::constructImpl): 71 * runtime/NumberConstructor.cpp: 72 (JSC::JSC_DEFINE_HOST_FUNCTION): 73 * runtime/ObjectConstructor.cpp: 74 (JSC::constructObjectWithNewTarget): 75 * runtime/ProxyConstructor.cpp: 76 (JSC::ProxyConstructor::create): 77 (JSC::ProxyConstructor::finishCreation): 78 * runtime/ProxyConstructor.h: 79 * runtime/RegExpConstructor.cpp: 80 (JSC::getRegExpStructure): 81 * runtime/SetConstructor.cpp: 82 (JSC::JSC_DEFINE_HOST_FUNCTION): 83 * runtime/StringConstructor.cpp: 84 (JSC::JSC_DEFINE_HOST_FUNCTION): 85 * runtime/WeakMapConstructor.cpp: 86 (JSC::JSC_DEFINE_HOST_FUNCTION): 87 * runtime/WeakObjectRefConstructor.cpp: 88 (JSC::JSC_DEFINE_HOST_FUNCTION): 89 * runtime/WeakSetConstructor.cpp: 90 (JSC::JSC_DEFINE_HOST_FUNCTION): 91 * wasm/js/WebAssemblyCompileErrorConstructor.cpp: 92 (JSC::JSC_DEFINE_HOST_FUNCTION): 93 * wasm/js/WebAssemblyGlobalConstructor.cpp: 94 (JSC::JSC_DEFINE_HOST_FUNCTION): 95 * wasm/js/WebAssemblyInstanceConstructor.cpp: 96 (JSC::JSC_DEFINE_HOST_FUNCTION): 97 * wasm/js/WebAssemblyLinkErrorConstructor.cpp: 98 (JSC::JSC_DEFINE_HOST_FUNCTION): 99 * wasm/js/WebAssemblyMemoryConstructor.cpp: 100 (JSC::JSC_DEFINE_HOST_FUNCTION): 101 * wasm/js/WebAssemblyModuleConstructor.cpp: 102 (JSC::WebAssemblyModuleConstructor::createModule): 103 * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp: 104 (JSC::JSC_DEFINE_HOST_FUNCTION): 105 * wasm/js/WebAssemblyTableConstructor.cpp: 106 (JSC::JSC_DEFINE_HOST_FUNCTION): 107 1 108 2021-03-01 Alexey Shvayka <shvaikalesh@gmail.com> 2 109 -
trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp
r272938 r273661 331 331 if (proto.isObject()) 332 332 return constructEmptyObject(globalObject, asObject(proto)); 333 return constructEmptyObject(globalObject); 333 JSGlobalObject* functionGlobalObject = getFunctionRealm(globalObject, constructor); 334 RETURN_IF_EXCEPTION(scope, nullptr); 335 return constructEmptyObject(functionGlobalObject); 334 336 } 335 337 … … 340 342 JITOperationPrologueCallFrameTracer tracer(vm, callFrame); 341 343 auto scope = DECLARE_THROW_SCOPE(vm); 342 Structure* structure = constructor == globalObject->promiseConstructor() 343 ? globalObject->promiseStructure() 344 : InternalFunction::createSubclassStructure(globalObject, constructor, getFunctionRealm(vm, constructor)->promiseStructure()); 344 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, promiseStructure, constructor, globalObject->promiseConstructor()); 345 345 RETURN_IF_EXCEPTION(scope, nullptr); 346 346 RELEASE_AND_RETURN(scope, JSPromise::create(vm, structure)); … … 353 353 JITOperationPrologueCallFrameTracer tracer(vm, callFrame); 354 354 auto scope = DECLARE_THROW_SCOPE(vm); 355 Structure* structure = constructor == globalObject->internalPromiseConstructor() 356 ? globalObject->internalPromiseStructure() 357 : InternalFunction::createSubclassStructure(globalObject, constructor, getFunctionRealm(vm, constructor)->internalPromiseStructure()); 355 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, internalPromiseStructure, constructor, globalObject->internalPromiseConstructor()); 358 356 RETURN_IF_EXCEPTION(scope, nullptr); 359 357 RELEASE_AND_RETURN(scope, JSInternalPromise::create(vm, structure)); -
trunk/Source/JavaScriptCore/runtime/AggregateErrorConstructor.cpp
r267594 r273661 73 73 74 74 JSObject* newTarget = asObject(callFrame->newTarget()); 75 Structure* errorStructure = newTarget == callFrame->jsCallee() 76 ? globalObject->errorStructure(ErrorType::AggregateError) 77 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->errorStructure(ErrorType::AggregateError)); 75 Structure* errorStructure = JSC_GET_DERIVED_STRUCTURE(vm, errorStructureWithErrorType<ErrorType::AggregateError>, newTarget, callFrame->jsCallee()); 78 76 RETURN_IF_EXCEPTION(scope, { }); 79 77 ASSERT(errorStructure); -
trunk/Source/JavaScriptCore/runtime/BooleanConstructor.cpp
r267594 r273661 48 48 49 49 JSObject* newTarget = asObject(callFrame->newTarget()); 50 Structure* booleanStructure = newTarget == callFrame->jsCallee() 51 ? globalObject->booleanObjectStructure() 52 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->booleanObjectStructure()); 50 Structure* booleanStructure = JSC_GET_DERIVED_STRUCTURE(vm, booleanObjectStructure, newTarget, callFrame->jsCallee()); 53 51 RETURN_IF_EXCEPTION(scope, { }); 54 52 -
trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp
r273217 r273661 247 247 } 248 248 } else { 249 // http ://ecma-international.org/ecma-262/6.0/#sec-ordinarycreatefromconstructor249 // https://tc39.es/ecma262/#sec-getprototypefromconstructor 250 250 JSValue proto = constructorAsObject->get(globalObject, vm.propertyNames->prototype); 251 251 CHECK_EXCEPTION(); 252 252 if (proto.isObject()) 253 253 result = constructEmptyObject(globalObject, asObject(proto)); 254 else 255 result = constructEmptyObject(globalObject); 254 else { 255 JSGlobalObject* functionGlobalObject = getFunctionRealm(globalObject, constructorAsObject); 256 CHECK_EXCEPTION(); 257 result = constructEmptyObject(functionGlobalObject); 258 } 256 259 } 257 260 RETURN(result); … … 266 269 JSPromise* result = nullptr; 267 270 if (bytecode.m_isInternalPromise) { 268 Structure* structure = constructorAsObject == globalObject->internalPromiseConstructor() 269 ? globalObject->internalPromiseStructure() 270 : InternalFunction::createSubclassStructure(globalObject, constructorAsObject, getFunctionRealm(vm, constructorAsObject)->internalPromiseStructure()); 271 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, internalPromiseStructure, constructorAsObject, globalObject->internalPromiseConstructor()); 271 272 CHECK_EXCEPTION(); 272 273 result = JSInternalPromise::create(vm, structure); 273 274 } else { 274 Structure* structure = constructorAsObject == globalObject->promiseConstructor() 275 ? globalObject->promiseStructure() 276 : InternalFunction::createSubclassStructure(globalObject, constructorAsObject, getFunctionRealm(vm, constructorAsObject)->promiseStructure()); 275 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, promiseStructure, constructorAsObject, globalObject->promiseConstructor()); 277 276 CHECK_EXCEPTION(); 278 277 result = JSPromise::create(vm, structure); -
trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp
r270861 r273661 128 128 RETURN_IF_EXCEPTION(scope, nullptr); 129 129 130 Structure* dateStructure = !newTarget || newTarget == globalObject->dateConstructor() 131 ? globalObject->dateStructure() 132 : InternalFunction::createSubclassStructure(globalObject, asObject(newTarget), getFunctionRealm(vm, asObject(newTarget))->dateStructure()); 133 RETURN_IF_EXCEPTION(scope, nullptr); 130 Structure* dateStructure = nullptr; 131 if (!newTarget) 132 dateStructure = globalObject->dateStructure(); 133 else { 134 dateStructure = JSC_GET_DERIVED_STRUCTURE(vm, dateStructure, asObject(newTarget), globalObject->dateConstructor()); 135 RETURN_IF_EXCEPTION(scope, nullptr); 136 } 134 137 135 138 return DateInstance::create(vm, dateStructure, value); -
trunk/Source/JavaScriptCore/runtime/ErrorConstructor.cpp
r273203 r273661 56 56 57 57 JSObject* newTarget = asObject(callFrame->newTarget()); 58 Structure* errorStructure = newTarget == callFrame->jsCallee() 59 ? globalObject->errorStructure() 60 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->errorStructure()); 58 Structure* errorStructure = JSC_GET_DERIVED_STRUCTURE(vm, errorStructure, newTarget, callFrame->jsCallee()); 61 59 RETURN_IF_EXCEPTION(scope, { }); 62 60 -
trunk/Source/JavaScriptCore/runtime/FinalizationRegistryConstructor.cpp
r267594 r273661 70 70 71 71 JSObject* newTarget = asObject(callFrame->newTarget()); 72 Structure* finalizationRegistryStructure = callFrame->jsCallee() == newTarget 73 ? globalObject->finalizationRegistryStructure() 74 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->finalizationRegistryStructure()); 72 Structure* finalizationRegistryStructure = JSC_GET_DERIVED_STRUCTURE(vm, finalizationRegistryStructure, newTarget, callFrame->jsCallee()); 75 73 RETURN_IF_EXCEPTION(scope, encodedJSValue()); 76 74 RELEASE_AND_RETURN(scope, JSValue::encode(JSFinalizationRegistry::create(vm, finalizationRegistryStructure, callFrame->uncheckedArgument(0).getObject()))); -
trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp
r267594 r273661 160 160 } 161 161 162 JSGlobalObject* structureGlobalObject = globalObject; 162 163 bool needsSubclassStructure = newTarget && newTarget != globalObject->functionConstructor(); 163 JSGlobalObject* structureGlobalObject = needsSubclassStructure ? getFunctionRealm(vm, asObject(newTarget)) : globalObject; 164 if (needsSubclassStructure) { 165 structureGlobalObject = getFunctionRealm(globalObject, asObject(newTarget)); 166 RETURN_IF_EXCEPTION(scope, nullptr); 167 } 164 168 Structure* structure = nullptr; 165 169 switch (functionConstructionMode) { -
trunk/Source/JavaScriptCore/runtime/InternalFunction.cpp
r273138 r273661 173 173 174 174 // https://tc39.es/ecma262/#sec-getfunctionrealm 175 JSGlobalObject* getFunctionRealm(VM& vm, JSObject* object) 176 { 175 JSGlobalObject* getFunctionRealm(JSGlobalObject* globalObject, JSObject* object) 176 { 177 VM& vm = globalObject->vm(); 178 auto scope = DECLARE_THROW_SCOPE(vm); 179 177 180 ASSERT(object->isCallable(vm)); 178 181 … … 185 188 if (object->type() == ProxyObjectType) { 186 189 auto* proxy = jsCast<ProxyObject*>(object); 187 // Per step 4.a, a TypeError should be thrown for revoked Proxy, yet we skip it since: 188 // a) It is barely observable anyway: "prototype" lookup in createSubclassStructure() will throw for revoked Proxy. 189 // b) Throwing getFunctionRealm() will restrict calling it inline as an argument of createSubclassStructure(). 190 // c) There is ongoing discussion on removing it: https://github.com/tc39/ecma262/issues/1798. 191 if (!proxy->isRevoked()) { 192 object = proxy->target(); 193 continue; 190 if (proxy->isRevoked()) { 191 throwTypeError(globalObject, scope, "Cannot get function realm from revoked Proxy"_s); 192 return nullptr; 194 193 } 194 object = proxy->target(); 195 continue; 195 196 } 196 197 -
trunk/Source/JavaScriptCore/runtime/InternalFunction.h
r273138 r273661 99 99 }; 100 100 101 JS_EXPORT_PRIVATE JSGlobalObject* getFunctionRealm(VM&, JSObject*); 101 JS_EXPORT_PRIVATE JSGlobalObject* getFunctionRealm(JSGlobalObject*, JSObject*); 102 103 #define JSC_GET_DERIVED_STRUCTURE(vm, structureMemberFunctionName, newTarget, constructor) \ 104 ((newTarget) == (constructor) \ 105 ? globalObject->structureMemberFunctionName() \ 106 : ([&]() -> Structure* { \ 107 auto scope = DECLARE_THROW_SCOPE((vm)); \ 108 auto* functionGlobalObject = getFunctionRealm(globalObject, (newTarget)); \ 109 RETURN_IF_EXCEPTION(scope, nullptr); \ 110 RELEASE_AND_RETURN(scope, InternalFunction::createSubclassStructure(globalObject, (newTarget), functionGlobalObject->structureMemberFunctionName())); \ 111 }())) 102 112 103 113 } // namespace JSC -
trunk/Source/JavaScriptCore/runtime/IntlCollatorConstructor.cpp
r267594 r273661 90 90 // 3. ReturnIfAbrupt(collator). 91 91 JSObject* newTarget = asObject(callFrame->newTarget()); 92 Structure* structure = newTarget == callFrame->jsCallee() 93 ? globalObject->collatorStructure() 94 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->collatorStructure()); 92 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, collatorStructure, newTarget, callFrame->jsCallee()); 95 93 RETURN_IF_EXCEPTION(scope, { }); 96 94 -
trunk/Source/JavaScriptCore/runtime/IntlDateTimeFormatConstructor.cpp
r267594 r273661 88 88 // 3. ReturnIfAbrupt(dateTimeFormat). 89 89 JSObject* newTarget = asObject(callFrame->newTarget()); 90 Structure* structure = newTarget == callFrame->jsCallee() 91 ? globalObject->dateTimeFormatStructure() 92 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->dateTimeFormatStructure()); 90 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, dateTimeFormatStructure, newTarget, callFrame->jsCallee()); 93 91 RETURN_IF_EXCEPTION(scope, { }); 94 92 -
trunk/Source/JavaScriptCore/runtime/IntlDisplayNamesConstructor.cpp
r267594 r273661 85 85 86 86 JSObject* newTarget = asObject(callFrame->newTarget()); 87 Structure* structure = newTarget == callFrame->jsCallee() 88 ? globalObject->displayNamesStructure() 89 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->displayNamesStructure()); 87 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, displayNamesStructure, newTarget, callFrame->jsCallee()); 90 88 RETURN_IF_EXCEPTION(scope, { }); 91 89 -
trunk/Source/JavaScriptCore/runtime/IntlListFormatConstructor.cpp
r268956 r273661 85 85 86 86 JSObject* newTarget = asObject(callFrame->newTarget()); 87 Structure* structure = newTarget == callFrame->jsCallee() 88 ? globalObject->listFormatStructure() 89 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->listFormatStructure()); 87 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, listFormatStructure, newTarget, callFrame->jsCallee()); 90 88 RETURN_IF_EXCEPTION(scope, { }); 91 89 -
trunk/Source/JavaScriptCore/runtime/IntlLocaleConstructor.cpp
r267594 r273661 71 71 72 72 JSObject* newTarget = asObject(callFrame->newTarget()); 73 Structure* structure = newTarget == callFrame->jsCallee() 74 ? globalObject->localeStructure() 75 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->localeStructure()); 73 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, localeStructure, newTarget, callFrame->jsCallee()); 76 74 RETURN_IF_EXCEPTION(scope, { }); 77 75 -
trunk/Source/JavaScriptCore/runtime/IntlNumberFormatConstructor.cpp
r267594 r273661 88 88 // 3. ReturnIfAbrupt(numberFormat). 89 89 JSObject* newTarget = asObject(callFrame->newTarget()); 90 Structure* structure = newTarget == callFrame->jsCallee() 91 ? globalObject->numberFormatStructure() 92 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->numberFormatStructure()); 90 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, numberFormatStructure, newTarget, callFrame->jsCallee()); 93 91 RETURN_IF_EXCEPTION(scope, { }); 94 92 -
trunk/Source/JavaScriptCore/runtime/IntlPluralRulesConstructor.cpp
r267594 r273661 88 88 // https://tc39.github.io/ecma402/#sec-intl.pluralrules 89 89 JSObject* newTarget = asObject(callFrame->newTarget()); 90 Structure* structure = newTarget == callFrame->jsCallee() 91 ? globalObject->pluralRulesStructure() 92 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->pluralRulesStructure()); 90 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, pluralRulesStructure, newTarget, callFrame->jsCallee()); 93 91 RETURN_IF_EXCEPTION(scope, { }); 94 92 -
trunk/Source/JavaScriptCore/runtime/IntlRelativeTimeFormatConstructor.cpp
r267594 r273661 86 86 87 87 JSObject* newTarget = asObject(callFrame->newTarget()); 88 Structure* structure = newTarget == callFrame->jsCallee() 89 ? globalObject->relativeTimeFormatStructure() 90 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->relativeTimeFormatStructure()); 88 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, relativeTimeFormatStructure, newTarget, callFrame->jsCallee()); 91 89 RETURN_IF_EXCEPTION(scope, { }); 92 90 -
trunk/Source/JavaScriptCore/runtime/IntlSegmenterConstructor.cpp
r267594 r273661 85 85 86 86 JSObject* newTarget = asObject(callFrame->newTarget()); 87 Structure* structure = newTarget == callFrame->jsCallee() 88 ? globalObject->segmenterStructure() 89 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->segmenterStructure()); 87 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, segmenterStructure, newTarget, callFrame->jsCallee()); 90 88 RETURN_IF_EXCEPTION(scope, { }); 91 89 -
trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp
r270552 r273661 79 79 80 80 JSObject* newTarget = asObject(callFrame->newTarget()); 81 Structure* arrayBufferStructure = newTarget == callFrame->jsCallee() 82 ? globalObject->arrayBufferStructure(sharingMode) 83 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->arrayBufferStructure(sharingMode)); 81 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, arrayBufferStructureWithSharingMode<sharingMode>, newTarget, callFrame->jsCallee()); 84 82 RETURN_IF_EXCEPTION(scope, { }); 85 83 … … 103 101 ASSERT(sharingMode == buffer->sharingMode()); 104 102 105 JSArrayBuffer* result = JSArrayBuffer::create(vm, arrayBufferStructure, WTFMove(buffer));103 JSArrayBuffer* result = JSArrayBuffer::create(vm, structure, WTFMove(buffer)); 106 104 return JSValue::encode(result); 107 105 } -
trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h
r272170 r273661 135 135 } 136 136 137 auto result = JSArrayBuffer::create(vm, getFunctionRealm(vm, asObject(species.value()))->arrayBufferStructure(ArrayBufferSharingMode::Default), WTFMove(buffer)); 137 JSGlobalObject* functionGlobalObject = getFunctionRealm(globalObject, asObject(species.value())); 138 RETURN_IF_EXCEPTION(scope, nullptr); 139 auto result = JSArrayBuffer::create(vm, functionGlobalObject->arrayBufferStructure(ArrayBufferSharingMode::Default), WTFMove(buffer)); 138 140 if (prototype.isObject()) 139 141 result->setPrototypeDirect(vm, prototype); … … 261 263 262 264 JSObject* newTarget = asObject(callFrame->newTarget()); 263 Structure* structure = newTarget == callFrame->jsCallee() 264 ? globalObject->typedArrayStructure(ViewClass::TypedArrayStorageType) 265 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->typedArrayStructure(ViewClass::TypedArrayStorageType)); 265 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, typedArrayStructureWithTypedArrayType<ViewClass::TypedArrayStorageType>, newTarget, callFrame->jsCallee()); 266 266 RETURN_IF_EXCEPTION(scope, { }); 267 267 -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r273225 r273661 787 787 return nullptr; 788 788 } 789 template<ErrorType errorType> Structure* errorStructureWithErrorType() const { return errorStructure(errorType); } 790 789 791 Structure* calleeStructure() const { return m_calleeStructure.get(); } 790 792 Structure* hostFunctionStructure() const { return m_hostFunctionStructure.get(); } … … 916 918 return nullptr; 917 919 } 920 template<ArrayBufferSharingMode sharingMode> Structure* arrayBufferStructureWithSharingMode() const { return arrayBufferStructure(sharingMode); } 918 921 JSObject* arrayBufferConstructor(ArrayBufferSharingMode sharingMode) const 919 922 { … … 979 982 return typedArrayStructureConcurrently(type) == structure; 980 983 } 984 template<TypedArrayType type> Structure* typedArrayStructureWithTypedArrayType() const { return typedArrayStructure(type); } 981 985 982 986 JSObject* typedArrayConstructor(TypedArrayType type) const -
trunk/Source/JavaScriptCore/runtime/JSGlobalObjectInlines.h
r260732 r273661 102 102 ALWAYS_INLINE Structure* JSGlobalObject::arrayStructureForIndexingTypeDuringAllocation(JSGlobalObject* globalObject, IndexingType indexingType, JSValue newTarget) const 103 103 { 104 return !newTarget || newTarget == globalObject->arrayConstructor() 105 ? globalObject->arrayStructureForIndexingTypeDuringAllocation(indexingType) 106 : InternalFunction::createSubclassStructure(globalObject, asObject(newTarget), getFunctionRealm(globalObject->vm(), asObject(newTarget))->arrayStructureForIndexingTypeDuringAllocation(indexingType)); 104 VM& vm = globalObject->vm(); 105 auto scope = DECLARE_THROW_SCOPE(vm); 106 if (!newTarget || newTarget == globalObject->arrayConstructor()) 107 return globalObject->arrayStructureForIndexingTypeDuringAllocation(indexingType); 108 auto* functionGlobalObject = getFunctionRealm(globalObject, asObject(newTarget)); 109 RETURN_IF_EXCEPTION(scope, nullptr); 110 RELEASE_AND_RETURN(scope, InternalFunction::createSubclassStructure(globalObject, asObject(newTarget), functionGlobalObject->arrayStructureForIndexingTypeDuringAllocation(indexingType))); 107 111 } 108 112 -
trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp
r267594 r273661 64 64 65 65 JSObject* newTarget = asObject(callFrame->newTarget()); 66 Structure* mapStructure = newTarget == callFrame->jsCallee() 67 ? globalObject->mapStructure() 68 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->mapStructure()); 66 Structure* mapStructure = JSC_GET_DERIVED_STRUCTURE(vm, mapStructure, newTarget, callFrame->jsCallee()); 69 67 RETURN_IF_EXCEPTION(scope, { }); 70 68 -
trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp
r273203 r273661 53 53 54 54 JSObject* newTarget = asObject(callFrame->newTarget()); 55 Structure* errorStructure = newTarget == callFrame->jsCallee() 56 ? globalObject->errorStructure(errorType) 57 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->errorStructure(errorType)); 55 Structure* errorStructure = JSC_GET_DERIVED_STRUCTURE(vm, errorStructureWithErrorType<errorType>, newTarget, callFrame->jsCallee()); 58 56 RETURN_IF_EXCEPTION(scope, { }); 59 ASSERT(errorStructure);60 61 57 RELEASE_AND_RETURN(scope, JSValue::encode(ErrorInstance::create(globalObject, errorStructure, message, nullptr, TypeNothing, errorType, false))); 62 58 } -
trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp
r267594 r273661 102 102 103 103 JSObject* newTarget = asObject(callFrame->newTarget()); 104 Structure* structure = newTarget == callFrame->jsCallee() 105 ? globalObject->numberObjectStructure() 106 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->numberObjectStructure()); 104 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, numberObjectStructure, newTarget, callFrame->jsCallee()); 107 105 RETURN_IF_EXCEPTION(scope, { }); 108 106 -
trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp
r272938 r273661 115 115 if (newTarget && newTarget != objectConstructor) { 116 116 // a. Return ? OrdinaryCreateFromConstructor(NewTarget, "%ObjectPrototype%"). 117 Structure* baseStructure = getFunctionRealm(vm, asObject(newTarget))->objectStructureForObjectConstructor(); 117 JSGlobalObject* functionGlobalObject = getFunctionRealm(globalObject, asObject(newTarget)); 118 RETURN_IF_EXCEPTION(scope, nullptr); 119 Structure* baseStructure = functionGlobalObject->objectStructureForObjectConstructor(); 118 120 Structure* objectStructure = InternalFunction::createSubclassStructure(globalObject, asObject(newTarget), baseStructure); 119 121 RETURN_IF_EXCEPTION(scope, nullptr); -
trunk/Source/JavaScriptCore/runtime/ProxyConstructor.cpp
r267594 r273661 41 41 { 42 42 ProxyConstructor* constructor = new (NotNull, allocateCell<ProxyConstructor>(vm.heap)) ProxyConstructor(vm, structure); 43 constructor->finishCreation(vm, "Proxy",structure->globalObject());43 constructor->finishCreation(vm, structure->globalObject()); 44 44 return constructor; 45 45 } … … 75 75 } 76 76 77 void ProxyConstructor::finishCreation(VM& vm, const char* name,JSGlobalObject* globalObject)77 void ProxyConstructor::finishCreation(VM& vm, JSGlobalObject* globalObject) 78 78 { 79 Base::finishCreation(vm, 2, name, PropertyAdditionMode::WithStructureTransition);80 putDirect(vm, makeIdentifier(vm, "revocable"), JSFunction::create(vm, globalObject, 2, "revocable"_s, makeRevocableProxy));79 Base::finishCreation(vm, 2, "Proxy", PropertyAdditionMode::WithoutStructureTransition); 80 JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("revocable", makeRevocableProxy, static_cast<unsigned>(PropertyAttribute::DontEnum), 2); 81 81 } 82 82 -
trunk/Source/JavaScriptCore/runtime/ProxyConstructor.h
r253019 r273661 44 44 } 45 45 46 void finishCreation(VM&, const char* name,JSGlobalObject*);46 void finishCreation(VM&, JSGlobalObject*); 47 47 48 48 private: -
trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp
r267727 r273661 213 213 inline Structure* getRegExpStructure(JSGlobalObject* globalObject, JSValue newTarget) 214 214 { 215 return !newTarget || newTarget == globalObject->regExpConstructor() 216 ? globalObject->regExpStructure() 217 : InternalFunction::createSubclassStructure(globalObject, asObject(newTarget), getFunctionRealm(globalObject->vm(), asObject(newTarget))->regExpStructure()); 215 if (!newTarget) 216 return globalObject->regExpStructure(); 217 VM& vm = globalObject->vm(); 218 return JSC_GET_DERIVED_STRUCTURE(vm, regExpStructure, asObject(newTarget), globalObject->regExpConstructor()); 218 219 } 219 220 -
trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp
r267594 r273661 64 64 65 65 JSObject* newTarget = asObject(callFrame->newTarget()); 66 Structure* setStructure = newTarget == callFrame->jsCallee() 67 ? globalObject->setStructure() 68 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->setStructure()); 66 Structure* setStructure = JSC_GET_DERIVED_STRUCTURE(vm, setStructure, newTarget, callFrame->jsCallee()); 69 67 RETURN_IF_EXCEPTION(scope, { }); 70 68 -
trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp
r267594 r273661 141 141 142 142 JSObject* newTarget = asObject(callFrame->newTarget()); 143 Structure* structure = newTarget == callFrame->jsCallee() 144 ? globalObject->stringObjectStructure() 145 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->stringObjectStructure()); 143 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, stringObjectStructure, newTarget, callFrame->jsCallee()); 146 144 RETURN_IF_EXCEPTION(scope, { }); 147 145 -
trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.cpp
r267594 r273661 63 63 64 64 JSObject* newTarget = asObject(callFrame->newTarget()); 65 Structure* weakMapStructure = newTarget == callFrame->jsCallee() 66 ? globalObject->weakMapStructure() 67 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->weakMapStructure()); 65 Structure* weakMapStructure = JSC_GET_DERIVED_STRUCTURE(vm, weakMapStructure, newTarget, callFrame->jsCallee()); 68 66 RETURN_IF_EXCEPTION(scope, { }); 69 67 -
trunk/Source/JavaScriptCore/runtime/WeakObjectRefConstructor.cpp
r267594 r273661 65 65 66 66 JSObject* newTarget = asObject(callFrame->newTarget()); 67 Structure* weakObjectRefStructure = newTarget == callFrame->jsCallee() 68 ? globalObject->weakObjectRefStructure() 69 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->weakObjectRefStructure()); 67 Structure* weakObjectRefStructure = JSC_GET_DERIVED_STRUCTURE(vm, weakObjectRefStructure, newTarget, callFrame->jsCallee()); 70 68 RETURN_IF_EXCEPTION(scope, { }); 71 69 -
trunk/Source/JavaScriptCore/runtime/WeakSetConstructor.cpp
r267594 r273661 63 63 64 64 JSObject* newTarget = asObject(callFrame->newTarget()); 65 Structure* weakSetStructure = newTarget == callFrame->jsCallee() 66 ? globalObject->weakSetStructure() 67 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->weakSetStructure()); 65 Structure* weakSetStructure = JSC_GET_DERIVED_STRUCTURE(vm, weakSetStructure, newTarget, callFrame->jsCallee()); 68 66 RETURN_IF_EXCEPTION(scope, { }); 69 67 -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyCompileErrorConstructor.cpp
r273203 r273661 54 54 55 55 JSObject* newTarget = asObject(callFrame->newTarget()); 56 Structure* structure = newTarget == callFrame->jsCallee() 57 ? globalObject->webAssemblyCompileErrorStructure() 58 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->webAssemblyCompileErrorStructure()); 56 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyCompileErrorStructure, newTarget, callFrame->jsCallee()); 59 57 RETURN_IF_EXCEPTION(scope, { }); 60 58 -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyGlobalConstructor.cpp
r272194 r273661 56 56 57 57 JSObject* newTarget = asObject(callFrame->newTarget()); 58 Structure* webAssemblyGlobalStructure = newTarget == callFrame->jsCallee() 59 ? globalObject->webAssemblyGlobalStructure() 60 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->webAssemblyGlobalStructure()); 58 Structure* webAssemblyGlobalStructure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyGlobalStructure, newTarget, callFrame->jsCallee()); 61 59 RETURN_IF_EXCEPTION(throwScope, { }); 62 60 -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp
r267594 r273661 67 67 68 68 JSObject* newTarget = asObject(callFrame->newTarget()); 69 Structure* instanceStructure = newTarget == callFrame->jsCallee() 70 ? globalObject->webAssemblyInstanceStructure() 71 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->webAssemblyInstanceStructure()); 69 Structure* instanceStructure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyInstanceStructure, newTarget, callFrame->jsCallee()); 72 70 RETURN_IF_EXCEPTION(scope, { }); 73 71 -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyLinkErrorConstructor.cpp
r273203 r273661 54 54 55 55 JSObject* newTarget = asObject(callFrame->newTarget()); 56 Structure* structure = newTarget == callFrame->jsCallee() 57 ? globalObject->webAssemblyLinkErrorStructure() 58 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->webAssemblyLinkErrorStructure()); 56 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyLinkErrorStructure, newTarget, callFrame->jsCallee()); 59 57 RETURN_IF_EXCEPTION(scope, { }); 60 58 -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp
r271774 r273661 59 59 60 60 JSObject* newTarget = asObject(callFrame->newTarget()); 61 Structure* webAssemblyMemoryStructure = newTarget == callFrame->jsCallee() 62 ? globalObject->webAssemblyMemoryStructure() 63 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->webAssemblyMemoryStructure()); 61 Structure* webAssemblyMemoryStructure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyMemoryStructure, newTarget, callFrame->jsCallee()); 64 62 RETURN_IF_EXCEPTION(throwScope, { }); 65 63 -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp
r267594 r273661 181 181 182 182 JSObject* newTarget = asObject(callFrame->newTarget()); 183 Structure* structure = newTarget == callFrame->jsCallee() 184 ? globalObject->webAssemblyModuleStructure() 185 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->webAssemblyModuleStructure()); 183 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyModuleStructure, newTarget, callFrame->jsCallee()); 186 184 RETURN_IF_EXCEPTION(scope, nullptr); 187 185 -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyRuntimeErrorConstructor.cpp
r273203 r273661 56 56 57 57 JSObject* newTarget = asObject(callFrame->newTarget()); 58 Structure* structure = newTarget == callFrame->jsCallee() 59 ? globalObject->webAssemblyRuntimeErrorStructure() 60 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->webAssemblyRuntimeErrorStructure()); 58 Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyRuntimeErrorStructure, newTarget, callFrame->jsCallee()); 61 59 RETURN_IF_EXCEPTION(scope, { }); 62 60 -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyTableConstructor.cpp
r272081 r273661 57 57 58 58 JSObject* newTarget = asObject(callFrame->newTarget()); 59 Structure* webAssemblyTableStructure = newTarget == callFrame->jsCallee() 60 ? globalObject->webAssemblyTableStructure() 61 : InternalFunction::createSubclassStructure(globalObject, newTarget, getFunctionRealm(vm, newTarget)->webAssemblyTableStructure()); 59 Structure* webAssemblyTableStructure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyTableStructure, newTarget, callFrame->jsCallee()); 62 60 RETURN_IF_EXCEPTION(throwScope, { }); 63 61 -
trunk/Source/WebCore/ChangeLog
r273657 r273661 1 2021-03-01 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Throw TypeError when getFunctionRealm hits revoked Proxy 4 https://bugs.webkit.org/show_bug.cgi?id=222523 5 6 Reviewed by Alexey Shvayka. 7 8 * bindings/js/JSDOMWrapperCache.h: 9 (WebCore::setSubclassStructureIfNeeded): 10 * bindings/js/JSHTMLElementCustom.cpp: 11 (WebCore::constructJSHTMLElement): 12 1 13 2021-02-25 Simon Fraser <simon.fraser@apple.com> 2 14 -
trunk/Source/WebCore/bindings/js/JSDOMWrapperCache.h
r268271 r273661 217 217 auto scope = DECLARE_THROW_SCOPE(vm); 218 218 219 auto* newTargetGlobalObject = JSC::jsCast<JSDOMGlobalObject*>(JSC::getFunctionRealm(vm, newTarget)); 219 auto* functionGlobalObject = JSC::getFunctionRealm(lexicalGlobalObject, newTarget); 220 RETURN_IF_EXCEPTION(scope, void()); 221 auto* newTargetGlobalObject = JSC::jsCast<JSDOMGlobalObject*>(functionGlobalObject); 220 222 auto* baseStructure = getDOMStructure<WrapperClass>(vm, *newTargetGlobalObject); 221 223 auto* subclassStructure = JSC::InternalFunction::createSubclassStructure(lexicalGlobalObject, newTarget, baseStructure); -
trunk/Source/WebCore/bindings/js/JSHTMLElementCustom.cpp
r260732 r273661 56 56 57 57 auto* newTarget = callFrame.newTarget().getObject(); 58 auto* newTargetGlobalObject = jsCast<JSDOMGlobalObject*>(getFunctionRealm(vm, newTarget)); 58 auto* functionGlobalObject = getFunctionRealm(lexicalGlobalObject, newTarget); 59 RETURN_IF_EXCEPTION(scope, { }); 60 auto* newTargetGlobalObject = jsCast<JSDOMGlobalObject*>(functionGlobalObject); 59 61 JSValue htmlElementConstructorValue = JSHTMLElement::getConstructor(vm, newTargetGlobalObject); 60 62 if (newTarget == htmlElementConstructorValue)
Note: See TracChangeset
for help on using the changeset viewer.