Title: [244708] trunk
Revision
244708
Author
[email protected]
Date
2019-04-26 15:21:25 -0700 (Fri, 26 Apr 2019)

Log Message

All prototypes should call didBecomePrototype()
https://bugs.webkit.org/show_bug.cgi?id=196315

Reviewed by Saam Barati.

JSTests:

* stress/function-prototype-indexed-accessor.js: Added.

Source/_javascript_Core:

Otherwise we won't remember to run haveABadTime() when someone adds to them an indexed accessor.

I added a check used in both Structure::finishCreation() and Structure::changePrototypeTransition to make sure we don't
create structures with invalid prototypes.
It found a lot of objects that are used as prototypes in JSGlobalObject and yet were missing didBecomePrototype() in their finishCreation().
Somewhat surprisingly, some of them have names like FunctionConstructor and not only FooPrototype.

* runtime/BigIntPrototype.cpp:
(JSC::BigIntPrototype::finishCreation):
* runtime/BooleanPrototype.cpp:
(JSC::BooleanPrototype::finishCreation):
* runtime/DatePrototype.cpp:
(JSC::DatePrototype::finishCreation):
* runtime/ErrorConstructor.cpp:
(JSC::ErrorConstructor::finishCreation):
* runtime/ErrorPrototype.cpp:
(JSC::ErrorPrototype::finishCreation):
* runtime/FunctionConstructor.cpp:
(JSC::FunctionConstructor::finishCreation):
* runtime/FunctionPrototype.cpp:
(JSC::FunctionPrototype::finishCreation):
* runtime/IntlCollatorPrototype.cpp:
(JSC::IntlCollatorPrototype::finishCreation):
* runtime/IntlDateTimeFormatPrototype.cpp:
(JSC::IntlDateTimeFormatPrototype::finishCreation):
* runtime/IntlNumberFormatPrototype.cpp:
(JSC::IntlNumberFormatPrototype::finishCreation):
* runtime/IntlPluralRulesPrototype.cpp:
(JSC::IntlPluralRulesPrototype::finishCreation):
* runtime/JSArrayBufferPrototype.cpp:
(JSC::JSArrayBufferPrototype::finishCreation):
* runtime/JSDataViewPrototype.cpp:
(JSC::JSDataViewPrototype::finishCreation):
* runtime/JSGenericTypedArrayViewPrototypeInlines.h:
(JSC::JSGenericTypedArrayViewPrototype<ViewClass>::finishCreation):
* runtime/JSGlobalObject.cpp:
(JSC::createConsoleProperty):
* runtime/JSPromisePrototype.cpp:
(JSC::JSPromisePrototype::finishCreation):
* runtime/JSTypedArrayViewConstructor.cpp:
(JSC::JSTypedArrayViewConstructor::finishCreation):
* runtime/JSTypedArrayViewPrototype.cpp:
(JSC::JSTypedArrayViewPrototype::finishCreation):
* runtime/NumberPrototype.cpp:
(JSC::NumberPrototype::finishCreation):
* runtime/RegExpPrototype.cpp:
(JSC::RegExpPrototype::finishCreation):
* runtime/StringPrototype.cpp:
(JSC::StringPrototype::finishCreation):
* runtime/Structure.cpp:
(JSC::Structure::isValidPrototype):
(JSC::Structure::changePrototypeTransition):
* runtime/Structure.h:
* runtime/SymbolPrototype.cpp:
(JSC::SymbolPrototype::finishCreation):
* wasm/js/WebAssemblyCompileErrorPrototype.cpp:
(JSC::WebAssemblyCompileErrorPrototype::finishCreation):
* wasm/js/WebAssemblyInstancePrototype.cpp:
(JSC::WebAssemblyInstancePrototype::finishCreation):
* wasm/js/WebAssemblyLinkErrorPrototype.cpp:
(JSC::WebAssemblyLinkErrorPrototype::finishCreation):
* wasm/js/WebAssemblyMemoryPrototype.cpp:
(JSC::WebAssemblyMemoryPrototype::finishCreation):
* wasm/js/WebAssemblyModulePrototype.cpp:
(JSC::WebAssemblyModulePrototype::finishCreation):
* wasm/js/WebAssemblyPrototype.cpp:
(JSC::WebAssemblyPrototype::finishCreation):
* wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
(JSC::WebAssemblyRuntimeErrorPrototype::finishCreation):
* wasm/js/WebAssemblyTablePrototype.cpp:
(JSC::WebAssemblyTablePrototype::finishCreation):

Source/WebCore:

It was found by existing tests, with the new assert in JSC::Structure

* bindings/js/JSWindowProxy.cpp:
(WebCore::JSWindowProxy::setWindow):
* bindings/scripts/CodeGeneratorJS.pm:
(GeneratePrototypeDeclaration):
(GenerateConstructorHelperMethods):

Modified Paths

Added Paths

Diff

Modified: trunk/JSTests/ChangeLog (244707 => 244708)


--- trunk/JSTests/ChangeLog	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/JSTests/ChangeLog	2019-04-26 22:21:25 UTC (rev 244708)
@@ -1,3 +1,12 @@
+2019-04-26  Robin Morisset  <[email protected]>
+
+        All prototypes should call didBecomePrototype()
+        https://bugs.webkit.org/show_bug.cgi?id=196315
+
+        Reviewed by Saam Barati.
+
+        * stress/function-prototype-indexed-accessor.js: Added.
+
 2019-04-23  Saam Barati  <[email protected]>
 
         LICM incorrectly assumes it'll never insert a node which provably OSR exits

Added: trunk/JSTests/stress/function-prototype-indexed-accessor.js (0 => 244708)


--- trunk/JSTests/stress/function-prototype-indexed-accessor.js	                        (rev 0)
+++ trunk/JSTests/stress/function-prototype-indexed-accessor.js	2019-04-26 22:21:25 UTC (rev 244708)
@@ -0,0 +1,3 @@
+Function[0] = 0;
+Object.defineProperty(Function.__proto__, '42', { set: ()=>{} });
+Function[1000] = 0;

Modified: trunk/Source/_javascript_Core/ChangeLog (244707 => 244708)


--- trunk/Source/_javascript_Core/ChangeLog	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/ChangeLog	2019-04-26 22:21:25 UTC (rev 244708)
@@ -1,3 +1,82 @@
+2019-04-26  Robin Morisset  <[email protected]>
+
+        All prototypes should call didBecomePrototype()
+        https://bugs.webkit.org/show_bug.cgi?id=196315
+
+        Reviewed by Saam Barati.
+
+        Otherwise we won't remember to run haveABadTime() when someone adds to them an indexed accessor.
+
+        I added a check used in both Structure::finishCreation() and Structure::changePrototypeTransition to make sure we don't
+        create structures with invalid prototypes.
+        It found a lot of objects that are used as prototypes in JSGlobalObject and yet were missing didBecomePrototype() in their finishCreation().
+        Somewhat surprisingly, some of them have names like FunctionConstructor and not only FooPrototype.
+
+        * runtime/BigIntPrototype.cpp:
+        (JSC::BigIntPrototype::finishCreation):
+        * runtime/BooleanPrototype.cpp:
+        (JSC::BooleanPrototype::finishCreation):
+        * runtime/DatePrototype.cpp:
+        (JSC::DatePrototype::finishCreation):
+        * runtime/ErrorConstructor.cpp:
+        (JSC::ErrorConstructor::finishCreation):
+        * runtime/ErrorPrototype.cpp:
+        (JSC::ErrorPrototype::finishCreation):
+        * runtime/FunctionConstructor.cpp:
+        (JSC::FunctionConstructor::finishCreation):
+        * runtime/FunctionPrototype.cpp:
+        (JSC::FunctionPrototype::finishCreation):
+        * runtime/IntlCollatorPrototype.cpp:
+        (JSC::IntlCollatorPrototype::finishCreation):
+        * runtime/IntlDateTimeFormatPrototype.cpp:
+        (JSC::IntlDateTimeFormatPrototype::finishCreation):
+        * runtime/IntlNumberFormatPrototype.cpp:
+        (JSC::IntlNumberFormatPrototype::finishCreation):
+        * runtime/IntlPluralRulesPrototype.cpp:
+        (JSC::IntlPluralRulesPrototype::finishCreation):
+        * runtime/JSArrayBufferPrototype.cpp:
+        (JSC::JSArrayBufferPrototype::finishCreation):
+        * runtime/JSDataViewPrototype.cpp:
+        (JSC::JSDataViewPrototype::finishCreation):
+        * runtime/JSGenericTypedArrayViewPrototypeInlines.h:
+        (JSC::JSGenericTypedArrayViewPrototype<ViewClass>::finishCreation):
+        * runtime/JSGlobalObject.cpp:
+        (JSC::createConsoleProperty):
+        * runtime/JSPromisePrototype.cpp:
+        (JSC::JSPromisePrototype::finishCreation):
+        * runtime/JSTypedArrayViewConstructor.cpp:
+        (JSC::JSTypedArrayViewConstructor::finishCreation):
+        * runtime/JSTypedArrayViewPrototype.cpp:
+        (JSC::JSTypedArrayViewPrototype::finishCreation):
+        * runtime/NumberPrototype.cpp:
+        (JSC::NumberPrototype::finishCreation):
+        * runtime/RegExpPrototype.cpp:
+        (JSC::RegExpPrototype::finishCreation):
+        * runtime/StringPrototype.cpp:
+        (JSC::StringPrototype::finishCreation):
+        * runtime/Structure.cpp:
+        (JSC::Structure::isValidPrototype):
+        (JSC::Structure::changePrototypeTransition):
+        * runtime/Structure.h:
+        * runtime/SymbolPrototype.cpp:
+        (JSC::SymbolPrototype::finishCreation):
+        * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
+        (JSC::WebAssemblyCompileErrorPrototype::finishCreation):
+        * wasm/js/WebAssemblyInstancePrototype.cpp:
+        (JSC::WebAssemblyInstancePrototype::finishCreation):
+        * wasm/js/WebAssemblyLinkErrorPrototype.cpp:
+        (JSC::WebAssemblyLinkErrorPrototype::finishCreation):
+        * wasm/js/WebAssemblyMemoryPrototype.cpp:
+        (JSC::WebAssemblyMemoryPrototype::finishCreation):
+        * wasm/js/WebAssemblyModulePrototype.cpp:
+        (JSC::WebAssemblyModulePrototype::finishCreation):
+        * wasm/js/WebAssemblyPrototype.cpp:
+        (JSC::WebAssemblyPrototype::finishCreation):
+        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
+        (JSC::WebAssemblyRuntimeErrorPrototype::finishCreation):
+        * wasm/js/WebAssemblyTablePrototype.cpp:
+        (JSC::WebAssemblyTablePrototype::finishCreation):
+
 2019-04-26  Don Olmstead  <[email protected]>
 
         Add WTF::findIgnoringASCIICaseWithoutLength to replace strcasestr

Modified: trunk/Source/_javascript_Core/runtime/BigIntPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/BigIntPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/BigIntPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -73,6 +73,7 @@
     Base::finishCreation(vm);
     ASSERT(inherits(vm, info()));
     putDirectWithoutTransition(vm, vm.propertyNames->toStringTagSymbol, jsString(&vm, "BigInt"), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 }
 
 // ------------------------------ Functions ---------------------------

Modified: trunk/Source/_javascript_Core/runtime/BooleanPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/BooleanPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/BooleanPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -59,6 +59,7 @@
 {
     Base::finishCreation(vm);
     setInternalValue(vm, jsBoolean(false));
+    didBecomePrototype();
 
     ASSERT(inherits(vm, info()));
 }

Modified: trunk/Source/_javascript_Core/runtime/DatePrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/DatePrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/DatePrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -515,6 +515,7 @@
 
     JSFunction* toPrimitiveFunction = JSFunction::create(vm, globalObject, 1, "[Symbol.toPrimitive]"_s, dateProtoFuncToPrimitiveSymbol, NoIntrinsic);
     putDirectWithoutTransition(vm, vm.propertyNames->toPrimitiveSymbol, toPrimitiveFunction, PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 
     // The constructor will be added later, after DateConstructor has been built.
 }

Modified: trunk/Source/_javascript_Core/runtime/ErrorConstructor.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/ErrorConstructor.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/ErrorConstructor.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -48,6 +48,7 @@
     putDirectWithoutTransition(vm, vm.propertyNames->prototype, errorPrototype, PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
     putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
     putDirectWithoutTransition(vm, vm.propertyNames->stackTraceLimit, jsNumber(globalObject(vm)->stackTraceLimit().valueOr(Options::defaultErrorStackTraceLimit())), static_cast<unsigned>(PropertyAttribute::None));
+    didBecomePrototype();
 }
 
 // ECMA 15.9.3

Modified: trunk/Source/_javascript_Core/runtime/ErrorPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/ErrorPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/ErrorPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -66,6 +66,7 @@
     ASSERT(inherits(vm, info()));
     putDirectWithoutTransition(vm, vm.propertyNames->name, jsString(&vm, name), static_cast<unsigned>(PropertyAttribute::DontEnum));
     putDirectWithoutTransition(vm, vm.propertyNames->message, jsEmptyString(&vm), static_cast<unsigned>(PropertyAttribute::DontEnum));
+    didBecomePrototype();
 }
 
 // ------------------------------ Functions ---------------------------

Modified: trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -61,6 +61,7 @@
     Base::finishCreation(vm, vm.propertyNames->Function.string(), NameVisibility::Visible, NameAdditionMode::WithoutStructureTransition);
     putDirectWithoutTransition(vm, vm.propertyNames->prototype, functionPrototype, PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
     putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), PropertyAttribute::ReadOnly | PropertyAttribute::DontEnum);
+    didBecomePrototype();
 }
 
 // ECMA 15.3.2 The Function Constructor

Modified: trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -54,6 +54,7 @@
 {
     Base::finishCreation(vm, name, NameVisibility::Visible, NameAdditionMode::WithoutStructureTransition);
     putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(0), PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly | PropertyAttribute::DontEnum);
+    didBecomePrototype();
 }
 
 void FunctionPrototype::addFunctionProperties(VM& vm, JSGlobalObject* globalObject, JSFunction** callFunction, JSFunction** applyFunction, JSFunction** hasInstanceSymbolFunction)

Modified: trunk/Source/_javascript_Core/runtime/IntlCollatorPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/IntlCollatorPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/IntlCollatorPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -76,6 +76,7 @@
     Base::finishCreation(vm);
 
     putDirectWithoutTransition(vm, vm.propertyNames->toStringTagSymbol, jsString(&vm, "Object"), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 }
 
 static EncodedJSValue JSC_HOST_CALL IntlCollatorFuncCompare(ExecState* state)

Modified: trunk/Source/_javascript_Core/runtime/IntlDateTimeFormatPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/IntlDateTimeFormatPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/IntlDateTimeFormatPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -90,6 +90,7 @@
 #endif
 
     putDirectWithoutTransition(vm, vm.propertyNames->toStringTagSymbol, jsString(&vm, "Object"), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 }
 
 static EncodedJSValue JSC_HOST_CALL IntlDateTimeFormatFuncFormatDateTime(ExecState* state)

Modified: trunk/Source/_javascript_Core/runtime/IntlNumberFormatPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/IntlNumberFormatPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/IntlNumberFormatPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -88,6 +88,7 @@
 #endif
 
     putDirectWithoutTransition(vm, vm.propertyNames->toStringTagSymbol, jsString(&vm, "Object"), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 }
 
 static EncodedJSValue JSC_HOST_CALL IntlNumberFormatFuncFormatNumber(ExecState* state)

Modified: trunk/Source/_javascript_Core/runtime/IntlPluralRulesPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/IntlPluralRulesPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/IntlPluralRulesPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -75,6 +75,7 @@
     Base::finishCreation(vm);
 
     putDirectWithoutTransition(vm, vm.propertyNames->toStringTagSymbol, jsString(&vm, "Object"), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 }
 
 EncodedJSValue JSC_HOST_CALL IntlPluralRulesPrototypeFuncSelect(ExecState* state)

Modified: trunk/Source/_javascript_Core/runtime/JSArrayBufferPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/JSArrayBufferPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/JSArrayBufferPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -121,6 +121,7 @@
         JSC_NATIVE_GETTER_WITHOUT_TRANSITION(vm.propertyNames->byteLength, arrayBufferProtoGetterFuncByteLength, PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
     else
         JSC_NATIVE_GETTER_WITHOUT_TRANSITION(vm.propertyNames->byteLength, sharedArrayBufferProtoGetterFuncByteLength, PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 }
 
 JSArrayBufferPrototype* JSArrayBufferPrototype::create(VM& vm, JSGlobalObject* globalObject, Structure* structure, ArrayBufferSharingMode sharingMode)

Modified: trunk/Source/_javascript_Core/runtime/JSDataViewPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/JSDataViewPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/JSDataViewPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -110,6 +110,7 @@
 {
     Base::finishCreation(vm);
     putDirectWithoutTransition(vm, vm.propertyNames->toStringTagSymbol, jsString(&vm, "DataView"), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 }
 
 Structure* JSDataViewPrototype::createStructure(

Modified: trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewPrototypeInlines.h (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewPrototypeInlines.h	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewPrototypeInlines.h	2019-04-26 22:21:25 UTC (rev 244708)
@@ -45,6 +45,7 @@
 
     putDirect(vm, vm.propertyNames->BYTES_PER_ELEMENT, jsNumber(ViewClass::elementSize), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly | PropertyAttribute::DontDelete);
 
+    didBecomePrototype();
 }
 
 template<typename ViewClass>

Modified: trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -232,7 +232,9 @@
 static JSValue createConsoleProperty(VM& vm, JSObject* object)
 {
     JSGlobalObject* global = jsCast<JSGlobalObject*>(object);
-    return ConsoleObject::create(vm, global, ConsoleObject::createStructure(vm, global, constructEmptyObject(global->globalExec())));
+    JSValue prototype = constructEmptyObject(global->globalExec());
+    prototype.getObject()->didBecomePrototype();
+    return ConsoleObject::create(vm, global, ConsoleObject::createStructure(vm, global, prototype));
 }
 
 static EncodedJSValue JSC_HOST_CALL makeBoundFunction(ExecState* exec)

Modified: trunk/Source/_javascript_Core/runtime/JSPromisePrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/JSPromisePrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/JSPromisePrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -77,6 +77,7 @@
 {
     Base::finishCreation(vm);
     putDirectWithoutTransition(vm, vm.propertyNames->toStringTagSymbol, jsString(&vm, "Promise"), PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+    didBecomePrototype();
 }
 
 void JSPromisePrototype::addOwnInternalSlots(VM& vm, JSGlobalObject* globalObject)

Modified: trunk/Source/_javascript_Core/runtime/JSTypedArrayViewConstructor.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/JSTypedArrayViewConstructor.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/JSTypedArrayViewConstructor.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -55,6 +55,8 @@
 
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->of, typedArrayConstructorOfCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->from, typedArrayConstructorFromCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
+
+    didBecomePrototype();
 }
 
 Structure* JSTypedArrayViewConstructor::createStructure(

Modified: trunk/Source/_javascript_Core/runtime/JSTypedArrayViewPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/JSTypedArrayViewPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/JSTypedArrayViewPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -334,6 +334,7 @@
     putDirectWithoutTransition(vm, vm.propertyNames->builtinNames().valuesPublicName(), valuesFunction, static_cast<unsigned>(PropertyAttribute::DontEnum));
     putDirectWithoutTransition(vm, vm.propertyNames->iteratorSymbol, valuesFunction, static_cast<unsigned>(PropertyAttribute::DontEnum));
 
+    didBecomePrototype();
 }
 
 JSTypedArrayViewPrototype* JSTypedArrayViewPrototype::create(

Modified: trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -82,6 +82,7 @@
 
     JSC_NATIVE_INTRINSIC_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->toString, numberProtoFuncToString, static_cast<unsigned>(PropertyAttribute::DontEnum), 1, NumberPrototypeToStringIntrinsic);
     ASSERT(inherits(vm, info()));
+    didBecomePrototype();
 }
 
 // ------------------------------ Functions ---------------------------

Modified: trunk/Source/_javascript_Core/runtime/RegExpPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/RegExpPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/RegExpPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -81,6 +81,8 @@
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->searchSymbol, regExpPrototypeSearchCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->splitSymbol, regExpPrototypeSplitCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->test, regExpPrototypeTestCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
+
+    didBecomePrototype();
 }
 
 // ------------------------------ Functions ---------------------------

Modified: trunk/Source/_javascript_Core/runtime/StringPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/StringPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/StringPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -172,6 +172,8 @@
 
     // The constructor will be added later, after StringConstructor has been built
     putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(0), PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly | PropertyAttribute::DontEnum);
+
+    didBecomePrototype();
 }
 
 StringPrototype* StringPrototype::create(VM& vm, JSGlobalObject* globalObject, Structure* structure)

Modified: trunk/Source/_javascript_Core/runtime/Structure.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/Structure.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/Structure.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -321,6 +321,11 @@
     return result;
 }
 
+bool Structure::isValidPrototype(JSValue prototype)
+{
+    return prototype.isNull() || (prototype.isObject() && prototype.getObject()->mayBePrototype());
+}
+
 void Structure::findStructuresAndMapForMaterialization(Vector<Structure*, 8>& structures, Structure*& structure, PropertyTable*& table)
 {
     ASSERT(structures.isEmpty());
@@ -544,7 +549,7 @@
 
 Structure* Structure::changePrototypeTransition(VM& vm, Structure* structure, JSValue prototype, DeferredStructureTransitionWatchpointFire& deferred)
 {
-    ASSERT(prototype.isObject() || prototype.isNull());
+    ASSERT(isValidPrototype(prototype));
 
     DeferGC deferGC(vm.heap);
     Structure* transition = create(vm, structure, &deferred);

Modified: trunk/Source/_javascript_Core/runtime/Structure.h (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/Structure.h	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/Structure.h	2019-04-26 22:21:25 UTC (rev 244708)
@@ -142,7 +142,7 @@
     void finishCreation(VM& vm)
     {
         Base::finishCreation(vm);
-        ASSERT(m_prototype.get().isEmpty() || m_prototype.isObject() || m_prototype.isNull());
+        ASSERT(m_prototype.get().isEmpty() || isValidPrototype(m_prototype.get()));
     }
 
     void finishCreation(VM& vm, const Structure* previous)
@@ -680,6 +680,8 @@
 
     void checkConsistency();
 
+    JS_EXPORT_PRIVATE static bool isValidPrototype(JSValue);
+
     // This may grab the lock, or not. Do not call when holding the Structure's lock.
     PropertyTable* ensurePropertyTableIfNotEmpty(VM& vm)
     {

Modified: trunk/Source/_javascript_Core/runtime/SymbolPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/runtime/SymbolPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/runtime/SymbolPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -67,6 +67,8 @@
 
     JSFunction* toPrimitiveFunction = JSFunction::create(vm, globalObject, 1, "[Symbol.toPrimitive]"_s, symbolProtoFuncValueOf, NoIntrinsic);
     putDirectWithoutTransition(vm, vm.propertyNames->toPrimitiveSymbol, toPrimitiveFunction, PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly);
+
+    didBecomePrototype();
 }
 
 // ------------------------------ Functions ---------------------------

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyCompileErrorPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyCompileErrorPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyCompileErrorPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -57,6 +57,7 @@
 void WebAssemblyCompileErrorPrototype::finishCreation(VM& vm)
 {
     Base::finishCreation(vm);
+    didBecomePrototype();
 }
 
 WebAssemblyCompileErrorPrototype::WebAssemblyCompileErrorPrototype(VM& vm, Structure* structure)

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstancePrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstancePrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstancePrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -86,6 +86,7 @@
 void WebAssemblyInstancePrototype::finishCreation(VM& vm)
 {
     Base::finishCreation(vm);
+    didBecomePrototype();
 }
 
 WebAssemblyInstancePrototype::WebAssemblyInstancePrototype(VM& vm, Structure* structure)

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyLinkErrorPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyLinkErrorPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyLinkErrorPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -57,6 +57,7 @@
 void WebAssemblyLinkErrorPrototype::finishCreation(VM& vm)
 {
     Base::finishCreation(vm);
+    didBecomePrototype();
 }
 
 WebAssemblyLinkErrorPrototype::WebAssemblyLinkErrorPrototype(VM& vm, Structure* structure)

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyMemoryPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyMemoryPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyMemoryPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -109,6 +109,7 @@
 {
     Base::finishCreation(vm);
     ASSERT(inherits(vm, info()));
+    didBecomePrototype();
 }
 
 WebAssemblyMemoryPrototype::WebAssemblyMemoryPrototype(VM& vm, Structure* structure)

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyModulePrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyModulePrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyModulePrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -56,6 +56,7 @@
 void WebAssemblyModulePrototype::finishCreation(VM& vm)
 {
     Base::finishCreation(vm);
+    didBecomePrototype();
 }
 
 WebAssemblyModulePrototype::WebAssemblyModulePrototype(VM& vm, Structure* structure)

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -381,6 +381,8 @@
         JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("compileStreaming", webAssemblyPrototypeCompileStreamingCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
         JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("instantiateStreaming", webAssemblyPrototypeInstantiateStreamingCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
     }
+
+    didBecomePrototype();
 }
 
 WebAssemblyPrototype::WebAssemblyPrototype(VM& vm, Structure* structure)

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyRuntimeErrorPrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyRuntimeErrorPrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyRuntimeErrorPrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -57,6 +57,7 @@
 void WebAssemblyRuntimeErrorPrototype::finishCreation(VM& vm)
 {
     Base::finishCreation(vm);
+    didBecomePrototype();
 }
 
 WebAssemblyRuntimeErrorPrototype::WebAssemblyRuntimeErrorPrototype(VM& vm, Structure* structure)

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyTablePrototype.cpp (244707 => 244708)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyTablePrototype.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyTablePrototype.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -164,6 +164,7 @@
 {
     Base::finishCreation(vm);
     ASSERT(inherits(vm, info()));
+    didBecomePrototype();
 }
 
 WebAssemblyTablePrototype::WebAssemblyTablePrototype(VM& vm, Structure* structure)

Modified: trunk/Source/WebCore/ChangeLog (244707 => 244708)


--- trunk/Source/WebCore/ChangeLog	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/ChangeLog	2019-04-26 22:21:25 UTC (rev 244708)
@@ -1,3 +1,18 @@
+2019-04-26  Robin Morisset  <[email protected]>
+
+        All prototypes should call didBecomePrototype()
+        https://bugs.webkit.org/show_bug.cgi?id=196315
+
+        Reviewed by Saam Barati.
+
+        It was found by existing tests, with the new assert in JSC::Structure
+
+        * bindings/js/JSWindowProxy.cpp:
+        (WebCore::JSWindowProxy::setWindow):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GeneratePrototypeDeclaration):
+        (GenerateConstructorHelperMethods):
+
 2019-04-26  Eric Carlson  <[email protected]>
 
         Create AVFoundationSoftLink.{h,mm} to reduce duplicate code

Modified: trunk/Source/WebCore/bindings/js/JSWindowProxy.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/js/JSWindowProxy.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/js/JSWindowProxy.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -97,6 +97,7 @@
     // FIXME: Why do we need to protect this when there's a pointer to it on the stack?
     // Perhaps the issue is that structure objects aren't seen when scanning the stack?
     Strong<JSNonFinalObject> prototype(vm, isRemoteDOMWindow ? static_cast<JSNonFinalObject*>(JSRemoteDOMWindowPrototype::create(vm, nullptr, &prototypeStructure)) : static_cast<JSNonFinalObject*>(JSDOMWindowPrototype::create(vm, nullptr, &prototypeStructure)));
+    prototype->didBecomePrototype();
 
     JSDOMGlobalObject* window = nullptr;
     if (isRemoteDOMWindow) {

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2019-04-26 22:21:25 UTC (rev 244708)
@@ -7070,6 +7070,7 @@
     push(@$outputArray, "    ${prototypeClassName}(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)\n");
     push(@$outputArray, "        : JSC::JSNonFinalObject(vm, structure)\n");
     push(@$outputArray, "    {\n");
+    push(@$outputArray, "        didBecomePrototype();\n");
     push(@$outputArray, "    }\n");
 
     if (PrototypeHasStaticPropertyTable($interface)) {
@@ -7304,7 +7305,9 @@
 
     if (!$generatingNamedConstructor and $interface->parentType) {
         my $parentClassName = "JS" . $interface->parentType->name;
-        push(@$outputArray, "    return ${parentClassName}::getConstructor(vm, &globalObject);\n");
+        push(@$outputArray, "    auto result = ${parentClassName}::getConstructor(vm, &globalObject);\n");
+        push(@$outputArray, "    result.getObject()->didBecomePrototype();\n");
+        push(@$outputArray, "    return result;\n");
     } else {
         AddToImplIncludes("<_javascript_Core/FunctionPrototype.h>");
         push(@$outputArray, "    UNUSED_PARAM(vm);\n");

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSInterfaceName.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSInterfaceName.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSInterfaceName.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -62,6 +62,7 @@
     JSInterfaceNamePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSMapLike.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSMapLike.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSMapLike.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -81,6 +81,7 @@
     JSMapLikePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSReadOnlyMapLike.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSReadOnlyMapLike.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSReadOnlyMapLike.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -78,6 +78,7 @@
     JSReadOnlyMapLikePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -75,6 +75,7 @@
     JSTestActiveDOMObjectPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -87,6 +87,7 @@
     JSTestCEReactionsPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -74,6 +74,7 @@
     JSTestCEReactionsStringifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -92,6 +92,7 @@
     JSTestCallTracerPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -63,6 +63,7 @@
     JSTestClassWithJSBuiltinConstructorPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -485,6 +485,7 @@
     JSTestDOMJITPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
@@ -494,7 +495,9 @@
 
 template<> JSValue JSTestDOMJITConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
 {
-    return JSNode::getConstructor(vm, &globalObject);
+    auto result = JSNode::getConstructor(vm, &globalObject);
+    result.getObject()->didBecomePrototype();
+    return result;
 }
 
 template<> void JSTestDOMJITConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -84,6 +84,7 @@
     JSTestEnabledBySettingPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -144,6 +144,7 @@
     JSTestEventConstructorPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
@@ -170,7 +171,9 @@
 
 template<> JSValue JSTestEventConstructorConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
 {
-    return JSEvent::getConstructor(vm, &globalObject);
+    auto result = JSEvent::getConstructor(vm, &globalObject);
+    result.getObject()->didBecomePrototype();
+    return result;
 }
 
 template<> void JSTestEventConstructorConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -72,6 +72,7 @@
     JSTestEventTargetPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
@@ -81,7 +82,9 @@
 
 template<> JSValue JSTestEventTargetConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
 {
-    return JSEventTarget::getConstructor(vm, &globalObject);
+    auto result = JSEventTarget::getConstructor(vm, &globalObject);
+    result.getObject()->didBecomePrototype();
+    return result;
 }
 
 template<> void JSTestEventTargetConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -65,6 +65,7 @@
     JSTestExceptionPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -65,6 +65,7 @@
     JSTestGenerateIsReachablePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h	2019-04-26 22:21:25 UTC (rev 244708)
@@ -102,6 +102,7 @@
     JSTestGlobalObjectPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 public:
     static const unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestIndexedSetterNoIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestIndexedSetterThrowingExceptionPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -70,6 +70,7 @@
     JSTestIndexedSetterWithIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -168,6 +168,7 @@
     JSTestInterfacePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -65,6 +65,7 @@
     JSTestInterfaceLeadingUnderscorePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -73,6 +73,7 @@
     JSTestIterablePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -69,6 +69,7 @@
     JSTestJSBuiltinConstructorPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -70,6 +70,7 @@
     JSTestMediaQueryListListenerPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -65,6 +65,7 @@
     JSTestNamedAndIndexedSetterNoIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -65,6 +65,7 @@
     JSTestNamedAndIndexedSetterThrowingExceptionPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -72,6 +72,7 @@
     JSTestNamedAndIndexedSetterWithIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -65,6 +65,7 @@
     JSTestNamedConstructorPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestNamedDeleterNoIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestNamedDeleterThrowingExceptionPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -69,6 +69,7 @@
     JSTestNamedDeleterWithIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -65,6 +65,7 @@
     JSTestNamedDeleterWithIndexedGetterPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestNamedGetterCallWithPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestNamedGetterNoIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -69,6 +69,7 @@
     JSTestNamedGetterWithIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestNamedSetterNoIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestNamedSetterThrowingExceptionPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -69,6 +69,7 @@
     JSTestNamedSetterWithIdentifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -72,6 +72,7 @@
     JSTestNamedSetterWithIndexedGetterPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -72,6 +72,7 @@
     JSTestNamedSetterWithIndexedGetterAndSetterPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -64,6 +64,7 @@
     JSTestNamedSetterWithOverrideBuiltinsPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -71,6 +71,7 @@
     JSTestNamedSetterWithUnforgablePropertiesPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -71,6 +71,7 @@
     JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -88,6 +88,7 @@
     JSTestNodePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
@@ -108,7 +109,9 @@
 
 template<> JSValue JSTestNodeConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
 {
-    return JSNode::getConstructor(vm, &globalObject);
+    auto result = JSNode::getConstructor(vm, &globalObject);
+    result.getObject()->didBecomePrototype();
+    return result;
 }
 
 template<> void JSTestNodeConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -1819,6 +1819,7 @@
     JSTestObjPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -68,6 +68,7 @@
     JSTestOverloadedConstructorsPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -67,6 +67,7 @@
     JSTestOverloadedConstructorsWithSequencePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -72,6 +72,7 @@
     JSTestOverrideBuiltinsPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -63,6 +63,7 @@
     JSTestPluginInterfacePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -147,6 +147,7 @@
     JSTestPromiseRejectionEventPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
@@ -174,7 +175,9 @@
 
 template<> JSValue JSTestPromiseRejectionEventConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
 {
-    return JSEvent::getConstructor(vm, &globalObject);
+    auto result = JSEvent::getConstructor(vm, &globalObject);
+    result.getObject()->didBecomePrototype();
+    return result;
 }
 
 template<> void JSTestPromiseRejectionEventConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -104,6 +104,7 @@
     JSTestSerializationPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -61,6 +61,7 @@
     JSTestSerializationIndirectInheritancePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
@@ -70,7 +71,9 @@
 
 template<> JSValue JSTestSerializationIndirectInheritanceConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
 {
-    return JSTestSerializationInherit::getConstructor(vm, &globalObject);
+    auto result = JSTestSerializationInherit::getConstructor(vm, &globalObject);
+    result.getObject()->didBecomePrototype();
+    return result;
 }
 
 template<> void JSTestSerializationIndirectInheritanceConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -71,6 +71,7 @@
     JSTestSerializationInheritPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
@@ -80,7 +81,9 @@
 
 template<> JSValue JSTestSerializationInheritConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
 {
-    return JSTestSerialization::getConstructor(vm, &globalObject);
+    auto result = JSTestSerialization::getConstructor(vm, &globalObject);
+    result.getObject()->didBecomePrototype();
+    return result;
 }
 
 template<> void JSTestSerializationInheritConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -73,6 +73,7 @@
     JSTestSerializationInheritFinalPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
@@ -82,7 +83,9 @@
 
 template<> JSValue JSTestSerializationInheritFinalConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
 {
-    return JSTestSerializationInherit::getConstructor(vm, &globalObject);
+    auto result = JSTestSerializationInherit::getConstructor(vm, &globalObject);
+    result.getObject()->didBecomePrototype();
+    return result;
 }
 
 template<> void JSTestSerializationInheritFinalConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -86,6 +86,7 @@
     JSTestSerializedScriptValueInterfacePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -68,6 +68,7 @@
     JSTestStringifierPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -68,6 +68,7 @@
     JSTestStringifierAnonymousOperationPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -69,6 +69,7 @@
     JSTestStringifierNamedOperationPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -69,6 +69,7 @@
     JSTestStringifierOperationImplementedAsPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -68,6 +68,7 @@
     JSTestStringifierOperationNamedToStringPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -70,6 +70,7 @@
     JSTestStringifierReadOnlyAttributePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -71,6 +71,7 @@
     JSTestStringifierReadWriteAttributePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (244707 => 244708)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp	2019-04-26 22:05:01 UTC (rev 244707)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp	2019-04-26 22:21:25 UTC (rev 244708)
@@ -114,6 +114,7 @@
     JSTestTypedefsPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
+        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to