<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[279546] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/279546">279546</a></dd>
<dt>Author</dt> <dd>shvaikalesh@gmail.com</dd>
<dt>Date</dt> <dd>2021-07-03 12:57:46 -0700 (Sat, 03 Jul 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WebIDL] Rework runtime enabled properties leveraging PropertyCallback
https://bugs.webkit.org/show_bug.cgi?id=227275

Reviewed by Saam Barati.

JSTests:

* stress/lazy-property-cross-realm.js: Added.
* stress/lazy-property-get-cache.js: Added.
* stress/lazy-property-gopd.js: Added.
* stress/lazy-property-hasownproperty-cache.js: Added.
* stress/lazy-property-put-cache.js: Added.

Source/JavaScriptCore:

To make the implementation of WebIDL runtime enabled properties independent of eager
property reification, this change:

1. Introduces IsLazyPropertyEnabledCallback, which is needed separately from existing
   value callback to maintain the invariant that reifyStaticProperty() always puts a
   property, and to keep enumeration fast.

   Calling disableCaching() isn't enough to achieve correct [[Get]] inline caching,
   so isTaintedByOpaqueObject() is leveraged to prohibit caching of runtime disabled
   properties, just like in operationTryGetByIdOptimize().

   The only case that might seem weird is runtime disabled properties, which were
   enabled after all static properties were reified via [[Delete]], are not appearing.
   It's fixable, yet there is currently no demand for it.

2. Adds support for LazyPropertyCallback returning GetterSetter / CustomGetterSetter,
   ensuring correct structure flags and slot initialization. Previously, the callback
   was used to init only objects and constructors, using putDirect() unconditionally.

   To avoid mixing other non-basic attributes with PropertyCallback, which would require
   hoisting of checks against PropertyCallback and complicating attribute validation in
   HashTableValue methods, this patch checks the type of callback's return value instead.

   In the future, sticking to this approach will make returning CustomValue impossible
   as it can't be distinguished from CustomAccessor. That's fine because all present
   CustomValue usages merely do lazy init, which PropertyCallback is better suited for.

Also, this patch:

3. Expands setUpStaticFunctionSlot() to handle constant integers so the code using
   `Node.ELEMENT_NODE` & friends doesn't regress (proven by attached microbenchmark).

4. Removes extra checks from setUpStaticPropertySlot(), which is called only on
   non-reified properties.

5. Removes invariant that DOMJITAttribute property is read-only, which was broken
   by `document.body` having a non-JIT custom setter. This aligns non-reified
   properties with structure ones.

* jit/Repatch.cpp:
(JSC::tryCacheGetBy):
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::setupGetByIdPrototypeCache):
* runtime/HasOwnPropertyCache.h:
(JSC::HasOwnPropertyCache::tryAdd):
* runtime/JSObject.cpp:
(JSC::lookupPropertyForPut):
(JSC::JSObject::putInlineSlow):
(JSC::JSObject::reifyAllStaticProperties):
* runtime/JSObject.h:
(JSC::JSObject::getOwnNonIndexPropertySlot):
(JSC::JSObject::fillStructurePropertySlot):
* runtime/JSObjectInlines.h:
(JSC::JSObject::getNonReifiedStaticPropertyNames):
* runtime/Lookup.cpp:
(JSC::setUpStaticPropertySlot):
(JSC::setUpStaticFunctionSlot): Deleted.
* runtime/Lookup.h:
(JSC::HashTableValue::isLazyPropertyEnabled const):
(JSC::getStaticPropertySlotFromTable):
(JSC::reifyStaticProperty):
(JSC::reifyStaticProperties):
* tools/JSDollarVM.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
(JSC::JSDollarVM::finishCreation):

Source/WebCore:

This performance-neutral change makes implementation of runtime enabled properties independent
of eager property reification, slightly optimizing DOM global objects initialization.
A follow-up patch (webkit.org/b/158557) will remove eager property reification of WebIDL
constructors / prototypes, further reducing CPU usage and memory cost on page load.

Provided we reify properties without creating transitions and avoid conversion to a cacheable
dictionary, that should not regress performance & memory usage as well. Non-reified custom
accessors / values are inline-cached, even through JSProxy. DOM methods are reified on first
lookup; the same approach is used for multiple hot JSC built-ins (e.g. StringPrototype).

A huge refactoring was required to keep generation of lazy property callbacks within a single
function. Handling of private identifiers was decoupled from public ones, while hash table
generation for constructors / prototypes / instances was merged into GenerateHashTable.

This approach preserves HashTable's immutability while avoiding addition of extra checks to
entry lookup and memory usage increase. Another important advantage: a feature that was
enabled after its interface was created, immediately becomes usable (no page reload needed).

Also, this change removes all usages of DeletePropertyModeScope from WebCore, which was used
to disable non-configurable constants at runtime, allowing its complete removal in the future.

No new tests, no behavior change.

* bindings/js/JSDOMBuiltinConstructor.h:
* bindings/js/JSDOMConstructor.h:
* bindings/js/JSDOMConstructorNotCallable.h:
* bindings/js/JSDOMConstructorNotConstructable.h:
* bindings/scripts/CodeGeneratorJS.pm:
Extract IDLInterface::className() to avoid passing $className as an argument.

(InstanceOperationCount): Deleted.
(PrototypeOperationCount): Deleted.
(InstancePropertyCount): Deleted.
(PrototypePropertyCount): Deleted.
(PrototypeHasStaticPropertyTable): Deleted.
(ConstructorHasProperties):
(PrototypeHasProperties):
(InstanceHasProperties):
Remove *Count helpers because they were incorrect with constants, overloads, private identifiers,
and Symbol.iterator. Instead, do the count in GeneratePropertiesHashTable to avoid duplicate checks.

(GeneratePropertiesHashTable):
(GenerateHashTableValueArray):
- Compute $hasSetterOrReadonlyProperties early because it's impossible to detect runtime enabled accessors,
  which are concealed behind PropertyAttribute::PropertyCallback, in GenerateHashTableValueArray.
- Set HashTable.hasSetterOrReadonlyProperties to `true` if a read-only value (constant) was seen.

(GenerateRuntimeEnableConditionalString):
Always use provided $globalObjectPtr parameter.

(GenerateHashTable):
- Simplify name inference for HashTable's values / indices since hash table names never include ":".
- Nicely simplify generation of hash table kind comment.
- Set HashTable.classForThis to `nullptr` for constructors because they can't have DOMAttribute properties.

(GenerateImplementation):
- Set ReadOnly attribute for runtime read-only accessors that shadow setter from static hash table.
- Reify "entries" property of an iterable interface to ensure its identity with Symbol.iterator method.

(GeneratePrivateIdentifiers):
- Add support for accelerated DOM attributes, which are rather common.
- Add support for static operations, which we have a use case for (see @whenSignalAborted).

(GeneratePrototypeDeclaration):
Set HasStaticPropertyTable structure flag for global interfaces as well, progressing idlharness.js test.

(GenerateConstructorHelperMethods):
Ensure that HasStaticPropertyTable structure flag is set for constructors as well.

(StringifyJSCAttributes):
(GetJSCAttributesForAttribute):
(ShouldBeOnInstance):
(GenerateHeader):
(GetAttributeGetter):
(GetAttributeSetter):
(GetAttributeJSValue):
(GetOperationJSValue):
(GenerateLazyPropertyCallbacks):
(GenerateCallbackImplementationContent):
(GetRuntimeEnabledStaticProperties): Deleted.

* bindings/scripts/test/JS/*: Updated.
* bindings/scripts/test/DOMWindowConstructors.idl:
* bindings/scripts/test/TestEnabledBySetting.idl:
* bindings/scripts/test/TestObj.idl:
Cover [PrivateIdentifiers] with accelerated DOM attributes, static operations, and constructors.

LayoutTests:

* platform/gtk/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
* platform/ios-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
* platform/mac-wk1/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
* platform/mac-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkJSTestsChangeLog">trunk/JSTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformgtkimportedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt">trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformioswk2importedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt">trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk1importedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt">trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2importedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt">trunk/LayoutTests/platform/mac-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformwpeimportedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt">trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorejitRepatchcpp">trunk/Source/JavaScriptCore/jit/Repatch.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeHasOwnPropertyCacheh">trunk/Source/JavaScriptCore/runtime/HasOwnPropertyCache.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjectcpp">trunk/Source/JavaScriptCore/runtime/JSObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjecth">trunk/Source/JavaScriptCore/runtime/JSObject.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjectInlinesh">trunk/Source/JavaScriptCore/runtime/JSObjectInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeLookupcpp">trunk/Source/JavaScriptCore/runtime/Lookup.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeLookuph">trunk/Source/JavaScriptCore/runtime/Lookup.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretoolsJSDollarVMcpp">trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBuiltinConstructorh">trunk/Source/WebCore/bindings/js/JSDOMBuiltinConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMConstructorh">trunk/Source/WebCore/bindings/js/JSDOMConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMConstructorNotCallableh">trunk/Source/WebCore/bindings/js/JSDOMConstructorNotCallable.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMConstructorNotConstructableh">trunk/Source/WebCore/bindings/js/JSDOMConstructorNotConstructable.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestDOMWindowConstructorsidl">trunk/Source/WebCore/bindings/scripts/test/DOMWindowConstructors.idl</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSDOMWindowcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSDOMWindowh">trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSDedicatedWorkerGlobalScopecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSDedicatedWorkerGlobalScopeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSExposedToWorkerAndWindowcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSPaintWorkletGlobalScopecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSPaintWorkletGlobalScopeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSServiceWorkerGlobalScopecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSServiceWorkerGlobalScopeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionsStringifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCallTracercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCallbackInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestClassWithJSBuiltinConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestConditionalIncludescpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestConditionallyReadWritecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDOMJITcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONFilteredByExposedcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONIndirectInheritancecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONInheritcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONInheritFinalcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDelegateToSharedSyntheticAttributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDomainSecuritycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEnabledBySettingcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEnabledForContextcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateAddOpaqueRootcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestIndexedSetterNoIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestIndexedSetterThrowingExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestIndexedSetterWithIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceLeadingUnderscorecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestIterablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestLegacyFactoryFunctioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestLegacyNoInterfaceObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestLegacyOverrideBuiltInscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMapLikecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMapLikeWithOverriddenOperationscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedAndIndexedSetterNoIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedAndIndexedSetterThrowingExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedAndIndexedSetterWithIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedDeleterNoIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedDeleterThrowingExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedDeleterWithIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedDeleterWithIndexedGettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedGetterCallWithcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedGetterNoIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedGetterWithIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedSetterNoIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedSetterThrowingExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedSetterWithIdentifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedSetterWithIndexedGettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedSetterWithIndexedGetterAndSettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedSetterWithLegacyOverrideBuiltInscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedSetterWithLegacyUnforgeablePropertiescpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltInscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamespaceObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOperationConditionalcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOperationConditional.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorsWithSequencecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestPluginInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestPromiseRejectionEventcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestReadOnlyMapLikecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestReadOnlySetLikecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestReportExtraMemoryCostcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSetLikecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSetLike.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSetLikeWithOverriddenOperationscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestStringifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestStringifierAnonymousOperationcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestStringifierNamedOperationcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestStringifierOperationImplementedAscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestStringifierOperationNamedToStringcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestStringifierReadOnlyAttributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestStringifierReadWriteAttributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSWorkerGlobalScopecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSWorkerGlobalScopeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSWorkletGlobalScopecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSWorkletGlobalScopeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestEnabledBySettingidl">trunk/Source/WebCore/bindings/scripts/test/TestEnabledBySetting.idl</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestObjidl">trunk/Source/WebCore/bindings/scripts/test/TestObj.idl</a></li>
<li><a href="#trunkSourceWebCoretestingMockPaymentCoordinatorh">trunk/Source/WebCore/testing/MockPaymentCoordinator.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkJSTestsstresslazypropertycrossrealmjs">trunk/JSTests/stress/lazy-property-cross-realm.js</a></li>
<li><a href="#trunkJSTestsstresslazypropertygetcachejs">trunk/JSTests/stress/lazy-property-get-cache.js</a></li>
<li><a href="#trunkJSTestsstresslazypropertygopdjs">trunk/JSTests/stress/lazy-property-gopd.js</a></li>
<li><a href="#trunkJSTestsstresslazypropertyhasownpropertycachejs">trunk/JSTests/stress/lazy-property-hasownproperty-cache.js</a></li>
<li><a href="#trunkJSTestsstresslazypropertyputcachejs">trunk/JSTests/stress/lazy-property-put-cache.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkJSTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/JSTests/ChangeLog (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/ChangeLog  2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/JSTests/ChangeLog     2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2021-07-03  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        [WebIDL] Rework runtime enabled properties leveraging PropertyCallback
+        https://bugs.webkit.org/show_bug.cgi?id=227275
+
+        Reviewed by Saam Barati.
+
+        * stress/lazy-property-cross-realm.js: Added.
+        * stress/lazy-property-get-cache.js: Added.
+        * stress/lazy-property-gopd.js: Added.
+        * stress/lazy-property-hasownproperty-cache.js: Added.
+        * stress/lazy-property-put-cache.js: Added.
+
</ins><span class="cx"> 2021-06-30  Saam Barati  <sbarati@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Turn off data ICs by default
</span></span></pre></div>
<a id="trunkJSTestsstresslazypropertycrossrealmjs"></a>
<div class="addfile"><h4>Added: trunk/JSTests/stress/lazy-property-cross-realm.js (0 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/lazy-property-cross-realm.js                                (rev 0)
+++ trunk/JSTests/stress/lazy-property-cross-realm.js   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -0,0 +1,43 @@
</span><ins>+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error(`Bad value: ${actual}.`);
+}
+
+(function get() {
+    const other = $vm.createGlobalObject();
+    const lazyProperty = other.$vm.createStaticLazyProperty();
+    other.isEnabledLazyCallbackAccessor = true;
+    shouldBe(lazyProperty.testLazyCallbackAccessor, lazyProperty);
+})();
+
+(function set() {
+    const other = $vm.createGlobalObject();
+    const lazyProperty = other.eval("$vm.createStaticLazyProperty()");
+
+    other.isEnabledLazyCallbackCustomAccessor = true;
+    const value = {};
+    lazyProperty.testLazyCallbackCustomAccessor = value;
+    shouldBe(lazyProperty.testField, value);
+
+    other.isEnabledLazyCallbackConstantInteger = true;
+    lazyProperty.testLazyCallbackConstantInteger = 1;
+    shouldBe(lazyProperty.testLazyCallbackConstantInteger, 42);
+})();
+
+(function ownKeys() {
+    const other = $vm.createGlobalObject();
+    const lazyProperty = other.Function("return $vm.createStaticLazyProperty()")();
+    other.isEnabledLazyCallbackCustomAccessor = true;
+    other.isEnabledLazyCallbackConstantInteger = true;
+    shouldBe(Reflect.ownKeys(lazyProperty).join(), "testLazyCallbackCustomAccessor,testLazyCallbackConstantInteger");
+})();
+
+(function deleteProperty() {
+    const other = $vm.createGlobalObject();
+    const lazyProperty = other.$vm.createStaticLazyProperty();
+    other.isEnabledLazyCallbackAccessor = true;
+    other.isEnabledLazyCallbackConstantInteger = true;
+    shouldBe(delete lazyProperty.testLazyCallbackConstantInteger, false);
+    shouldBe(delete lazyProperty.testLazyCallbackAccessor, true);
+    shouldBe(Reflect.ownKeys(lazyProperty).join(), "testLazyCallbackConstantInteger");
+})();
</ins></span></pre></div>
<a id="trunkJSTestsstresslazypropertygetcachejs"></a>
<div class="addfile"><h4>Added: trunk/JSTests/stress/lazy-property-get-cache.js (0 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/lazy-property-get-cache.js                          (rev 0)
+++ trunk/JSTests/stress/lazy-property-get-cache.js     2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -0,0 +1,141 @@
</span><ins>+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error(`Bad value: ${actual}.`);
+}
+
+(function lazyCallbackAccessor1() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+
+    const get = () => lazyProperty.testLazyCallbackAccessor;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackAccessor = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), undefined);
+
+    globalThis.isEnabledLazyCallbackAccessor = true;
+    shouldBe(get(), lazyProperty);
+})();
+
+(function lazyCallbackAccessor2() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    Object.setPrototypeOf(lazyProperty, { testLazyCallbackAccessor: 21 });
+
+    const get = () => lazyProperty.testLazyCallbackAccessor;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackAccessor = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), 21);
+
+    globalThis.isEnabledLazyCallbackAccessor = true;
+    shouldBe(get(), lazyProperty);
+})();
+
+(function lazyCallbackAccessor3() {
+    const heir = Object.create($vm.createStaticLazyProperty());
+
+    const get = () => heir.testLazyCallbackAccessor;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackAccessor = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), undefined);
+
+    globalThis.isEnabledLazyCallbackAccessor = true;
+    shouldBe(get(), heir);
+})();
+
+
+(function lazyCallbackCustomAccessor1() {
+    const testField = {};
+    const lazyProperty = $vm.createStaticLazyProperty();
+    lazyProperty.testField = testField;
+
+    const get = () => lazyProperty.testLazyCallbackCustomAccessor;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), undefined);
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = true;
+    shouldBe(get(), testField);
+})();
+
+(function lazyCallbackCustomAccessor2() {
+    const testField = {};
+    const lazyProperty = $vm.createStaticLazyProperty();
+    lazyProperty.testField = testField;
+    Object.setPrototypeOf(lazyProperty, { testLazyCallbackCustomAccessor: 21 });
+
+    const get = () => lazyProperty.testLazyCallbackCustomAccessor;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), 21);
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = true;
+    shouldBe(get(), testField);
+})();
+
+(function lazyCallbackCustomAccessor3() {
+    const testField = {};
+    const heir = Object.create($vm.createStaticLazyProperty());
+    heir.testField = testField;
+
+    const get = () => heir.testLazyCallbackCustomAccessor;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), undefined);
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = true;
+    shouldBe(get(), testField);
+})();
+
+
+(function lazyCallbackConstantInteger1() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+
+    const get = () => lazyProperty.testLazyCallbackConstantInteger;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), undefined);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+    shouldBe(get(), 42);
+})();
+
+(function lazyCallbackConstantInteger2() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    Object.setPrototypeOf(lazyProperty, { testLazyCallbackConstantInteger: 21 });
+
+    const get = () => lazyProperty.testLazyCallbackConstantInteger;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), 21);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+    shouldBe(get(), 42);
+})();
+
+(function lazyCallbackConstantInteger3() {
+    const heir = Object.create($vm.createStaticLazyProperty());
+
+    const get = () => heir.testLazyCallbackConstantInteger;
+    noInline(get);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(get(), undefined);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+    shouldBe(get(), 42);
+})();
</ins></span></pre></div>
<a id="trunkJSTestsstresslazypropertygopdjs"></a>
<div class="addfile"><h4>Added: trunk/JSTests/stress/lazy-property-gopd.js (0 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/lazy-property-gopd.js                               (rev 0)
+++ trunk/JSTests/stress/lazy-property-gopd.js  2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error(`Bad value: ${actual}.`);
+}
+
+(function lazyCallbackAccessor() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    const key = "testLazyCallbackAccessor";
+
+    shouldBe(Object.getOwnPropertyDescriptor(lazyProperty, key), undefined);
+    globalThis.isEnabledLazyCallbackAccessor = true;
+
+    const desc = Object.getOwnPropertyDescriptor(lazyProperty, key);
+    shouldBe(typeof desc.get, "function");
+    shouldBe(desc.set, undefined);
+    shouldBe(desc.enumerable, true);
+    shouldBe(desc.configurable, true);
+})();
+
+(function lazyCallbackCustomAccessor() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    const key = "testLazyCallbackCustomAccessor";
+
+    shouldBe(Object.getOwnPropertyDescriptor(lazyProperty, key), undefined);
+    globalThis.isEnabledLazyCallbackCustomAccessor = true;
+
+    const desc1 = Object.getOwnPropertyDescriptor(lazyProperty, key);
+    shouldBe(typeof desc1.get, "function");
+    shouldBe(typeof desc1.set, "function");
+    shouldBe(desc1.enumerable, true);
+    shouldBe(desc1.configurable, true);
+
+    const desc2 = Object.getOwnPropertyDescriptor(lazyProperty, key);
+    shouldBe(desc2.get, desc1.get);
+    shouldBe(desc2.set, desc1.set);
+})();
+
+(function lazyCallbackConstantInteger() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    const key = "testLazyCallbackConstantInteger";
+
+    shouldBe(Object.getOwnPropertyDescriptor(lazyProperty, key), undefined);
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+
+    const desc = Object.getOwnPropertyDescriptor(lazyProperty, key);
+    shouldBe(desc.value, 42);
+    shouldBe(desc.writable, false);
+    shouldBe(desc.enumerable, true);
+    shouldBe(desc.configurable, false);
+})();
</ins></span></pre></div>
<a id="trunkJSTestsstresslazypropertyhasownpropertycachejs"></a>
<div class="addfile"><h4>Added: trunk/JSTests/stress/lazy-property-hasownproperty-cache.js (0 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/lazy-property-hasownproperty-cache.js                               (rev 0)
+++ trunk/JSTests/stress/lazy-property-hasownproperty-cache.js  2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error(`Bad value: ${actual}.`);
+}
+
+(function lazyCallbackAccessor() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    Object.setPrototypeOf(lazyProperty, Object.prototype);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(lazyProperty.hasOwnProperty("testLazyCallbackConstantInteger"), false);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+    shouldBe(lazyProperty.hasOwnProperty("testLazyCallbackConstantInteger"), true);
+})();
+
+(function lazyCallbackCustomAccessor() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    Object.setPrototypeOf(lazyProperty, Object.prototype);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(lazyProperty.hasOwnProperty("testLazyCallbackConstantInteger"), false);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+    shouldBe(lazyProperty.hasOwnProperty("testLazyCallbackConstantInteger"), true);
+})();
+
+(function lazyCallbackConstantInteger() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    Object.setPrototypeOf(lazyProperty, Object.prototype);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = false;
+    for (let i = 0; i < 1e4; ++i)
+        shouldBe(lazyProperty.hasOwnProperty("testLazyCallbackConstantInteger"), false);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+    shouldBe(lazyProperty.hasOwnProperty("testLazyCallbackConstantInteger"), true);
+})();
</ins></span></pre></div>
<a id="trunkJSTestsstresslazypropertyputcachejs"></a>
<div class="addfile"><h4>Added: trunk/JSTests/stress/lazy-property-put-cache.js (0 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/lazy-property-put-cache.js                          (rev 0)
+++ trunk/JSTests/stress/lazy-property-put-cache.js     2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -0,0 +1,158 @@
</span><ins>+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error(`Bad value: ${actual}.`);
+}
+
+function shouldThrow(func, errorMessage) {
+    let errorThrown = false;
+    try {
+        func();
+    } catch (error) {
+        errorThrown = true;
+        if (error.toString() !== errorMessage)
+            throw new Error(`Bad error: ${error}`);
+    }
+    if (!errorThrown)
+        throw new Error("Didn't throw!");
+}
+
+(function lazyCallbackAccessor1() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+
+    Object.setPrototypeOf(lazyProperty, Object.create(null, {
+        testLazyCallbackAccessor: Object.getOwnPropertyDescriptor($vm.createCustomTestGetterSetter(), "customAccessor"),
+    }));
+
+    function putStrict(val) { "use strict"; lazyProperty.testLazyCallbackAccessor = val; };
+    noInline(putStrict);
+
+    globalThis.isEnabledLazyCallbackAccessor = false;
+    for (let i = 1; i <= 1e4; ++i) {
+        const value = {};
+        putStrict(value);
+        shouldBe(value.result, lazyProperty);
+    }
+
+    globalThis.isEnabledLazyCallbackAccessor = true;
+    const value = {};
+    shouldThrow(() => { putStrict({}); }, "TypeError: Attempted to assign to readonly property.");
+    shouldBe(value.hasOwnProperty("value"), false);
+})();
+
+(function lazyCallbackAccessor2() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    const heir = Object.create(lazyProperty);
+
+    Object.setPrototypeOf(lazyProperty, Object.create(null, {
+        testLazyCallbackAccessor: Object.getOwnPropertyDescriptor($vm.createStaticCustomAccessor(), "testStaticAccessor"),
+    }));
+
+    function putToHeirSloppy(val) { heir.testLazyCallbackAccessor = val; };
+    noInline(putToHeirSloppy);
+
+    globalThis.isEnabledLazyCallbackAccessor = false;
+    for (let i = 1; i <= 1e4; ++i) {
+        putToHeirSloppy(i);
+        shouldBe(heir.testField, i);
+    }
+
+    globalThis.isEnabledLazyCallbackAccessor = true;
+    putToHeirSloppy(42);
+    shouldBe(heir.testField, 1e4);
+})();
+
+
+(function lazyCallbackCustomAccessor1() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+
+    let lastSetValue;
+    Object.setPrototypeOf(lazyProperty, {
+        set testLazyCallbackCustomAccessor(val) { lastSetValue = val; },
+    });
+
+    function putStrict(val) { "use strict"; lazyProperty.testLazyCallbackCustomAccessor = val; };
+    noInline(putStrict);
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = false;
+    for (let i = 1; i <= 1e4; ++i) {
+        putStrict(i);
+        shouldBe(lastSetValue, i);
+    }
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = true;
+    shouldBe(lazyProperty.testField, undefined);
+    putStrict(42);
+    shouldBe(lazyProperty.testField, 42);
+})();
+
+(function lazyCallbackCustomAccessor2() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    const heir = Object.create(lazyProperty);
+
+    let lastSetValue;
+    Object.setPrototypeOf(lazyProperty, {
+        get testLazyCallbackCustomAccessor() {},
+        set testLazyCallbackCustomAccessor(val) { lastSetValue = val; },
+    });
+
+    function putToHeirSloppy(val) { "use strict"; heir.testLazyCallbackCustomAccessor = val; };
+    noInline(putToHeirSloppy);
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = false;
+    for (let i = 1; i <= 1e4; ++i) {
+        putToHeirSloppy(i);
+        shouldBe(lastSetValue, i);
+    }
+
+    globalThis.isEnabledLazyCallbackCustomAccessor = true;
+    shouldBe(heir.testField, undefined);
+    putToHeirSloppy(42);
+    shouldBe(heir.testField, 42);
+})();
+
+
+(function lazyCallbackConstantInteger1() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+
+    let lastSetValue = 0;
+    Object.setPrototypeOf(lazyProperty, {
+        get testLazyCallbackConstantInteger() {},
+        set testLazyCallbackConstantInteger(val) { lastSetValue = val; },
+    });
+
+    function putSloppy(val) { lazyProperty.testLazyCallbackConstantInteger = val; };
+    noInline(putSloppy);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = false;
+    for (let i = 1; i <= 1e4; ++i) {
+        putSloppy(i);
+        shouldBe(lastSetValue, i);
+    }
+
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+    putSloppy(42);
+    shouldBe(lastSetValue, 1e4);
+})();
+
+(function lazyCallbackConstantInteger2() {
+    const lazyProperty = $vm.createStaticLazyProperty();
+    const heir = Object.create(lazyProperty);
+
+    let lastSetValue = 0;
+    Object.setPrototypeOf(lazyProperty, {
+        set testLazyCallbackConstantInteger(val) { lastSetValue = val; },
+    });
+
+    function putToHeirStrict(val) { "use strict"; heir.testLazyCallbackConstantInteger = val; }
+    noInline(putToHeirStrict);
+
+    globalThis.isEnabledLazyCallbackConstantInteger = false;
+    for (let i = 1; i <= 1e4; ++i) {
+        putToHeirStrict(i);
+        shouldBe(lastSetValue, i);
+    }
+
+    globalThis.isEnabledLazyCallbackConstantInteger = true;
+    shouldThrow(() => { putToHeirStrict(42); }, "TypeError: Attempted to assign to readonly property.");
+    shouldBe(lastSetValue, 1e4);
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/LayoutTests/ChangeLog 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2021-07-03  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        [WebIDL] Rework runtime enabled properties leveraging PropertyCallback
+        https://bugs.webkit.org/show_bug.cgi?id=227275
+
+        Reviewed by Saam Barati.
+
+        * platform/gtk/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
+        * platform/ios-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
+        * platform/mac-wk1/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
+        * platform/mac-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt:
+
</ins><span class="cx"> 2021-07-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>
</span><span class="cx"> 
</span><span class="cx">         [GTK][WPE] Gardening of expected failures and update list of baselines.
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkimportedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -5022,7 +5022,7 @@
</span><span class="cx"> PASS Worklet interface object length
</span><span class="cx"> PASS Worklet interface object name
</span><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object
</span><del>-FAIL Worklet interface: existence and properties of interface prototype object's "constructor" property assert_own_property: Worklet.prototype does not have own property "constructor" expected property "constructor" missing
</del><ins>+PASS Worklet interface: existence and properties of interface prototype object's "constructor" property
</ins><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object's @@unscopables property
</span><span class="cx"> FAIL Worklet interface: operation addModule(USVString, optional WorkletOptions) assert_own_property: interface prototype object missing non-static operation expected property "addModule" missing
</span><span class="cx"> PASS Storage interface: existence and properties of interface object
</span></span></pre></div>
<a id="trunkLayoutTestsplatformioswk2importedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -5012,7 +5012,7 @@
</span><span class="cx"> PASS Worklet interface object length
</span><span class="cx"> PASS Worklet interface object name
</span><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object
</span><del>-FAIL Worklet interface: existence and properties of interface prototype object's "constructor" property assert_own_property: Worklet.prototype does not have own property "constructor" expected property "constructor" missing
</del><ins>+PASS Worklet interface: existence and properties of interface prototype object's "constructor" property
</ins><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object's @@unscopables property
</span><span class="cx"> FAIL Worklet interface: operation addModule(USVString, optional WorkletOptions) assert_own_property: interface prototype object missing non-static operation expected property "addModule" missing
</span><span class="cx"> PASS Storage interface: existence and properties of interface object
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1importedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -5022,7 +5022,7 @@
</span><span class="cx"> PASS Worklet interface object length
</span><span class="cx"> PASS Worklet interface object name
</span><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object
</span><del>-FAIL Worklet interface: existence and properties of interface prototype object's "constructor" property assert_own_property: Worklet.prototype does not have own property "constructor" expected property "constructor" missing
</del><ins>+PASS Worklet interface: existence and properties of interface prototype object's "constructor" property
</ins><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object's @@unscopables property
</span><span class="cx"> FAIL Worklet interface: operation addModule(USVString, optional WorkletOptions) assert_own_property: interface prototype object missing non-static operation expected property "addModule" missing
</span><span class="cx"> PASS Storage interface: existence and properties of interface object
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2importedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/LayoutTests/platform/mac-wk2/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -5022,7 +5022,7 @@
</span><span class="cx"> PASS Worklet interface object length
</span><span class="cx"> PASS Worklet interface object name
</span><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object
</span><del>-FAIL Worklet interface: existence and properties of interface prototype object's "constructor" property assert_own_property: Worklet.prototype does not have own property "constructor" expected property "constructor" missing
</del><ins>+PASS Worklet interface: existence and properties of interface prototype object's "constructor" property
</ins><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object's @@unscopables property
</span><span class="cx"> FAIL Worklet interface: operation addModule(USVString, optional WorkletOptions) assert_own_property: interface prototype object missing non-static operation expected property "addModule" missing
</span><span class="cx"> PASS Storage interface: existence and properties of interface object
</span></span></pre></div>
<a id="trunkLayoutTestsplatformwpeimportedw3cwebplatformtestshtmldomidlharnesshttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/html/dom/idlharness.https-expected.txt       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -5022,7 +5022,7 @@
</span><span class="cx"> PASS Worklet interface object length
</span><span class="cx"> PASS Worklet interface object name
</span><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object
</span><del>-FAIL Worklet interface: existence and properties of interface prototype object's "constructor" property assert_own_property: Worklet.prototype does not have own property "constructor" expected property "constructor" missing
</del><ins>+PASS Worklet interface: existence and properties of interface prototype object's "constructor" property
</ins><span class="cx"> PASS Worklet interface: existence and properties of interface prototype object's @@unscopables property
</span><span class="cx"> FAIL Worklet interface: operation addModule(USVString, optional WorkletOptions) assert_own_property: interface prototype object missing non-static operation expected property "addModule" missing
</span><span class="cx"> PASS Storage interface: existence and properties of interface object
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/ChangeLog       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -1,3 +1,76 @@
</span><ins>+2021-07-03  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        [WebIDL] Rework runtime enabled properties leveraging PropertyCallback
+        https://bugs.webkit.org/show_bug.cgi?id=227275
+
+        Reviewed by Saam Barati.
+
+        To make the implementation of WebIDL runtime enabled properties independent of eager
+        property reification, this change:
+
+        1. Introduces IsLazyPropertyEnabledCallback, which is needed separately from existing
+           value callback to maintain the invariant that reifyStaticProperty() always puts a
+           property, and to keep enumeration fast.
+
+           Calling disableCaching() isn't enough to achieve correct [[Get]] inline caching,
+           so isTaintedByOpaqueObject() is leveraged to prohibit caching of runtime disabled
+           properties, just like in operationTryGetByIdOptimize().
+
+           The only case that might seem weird is runtime disabled properties, which were
+           enabled after all static properties were reified via [[Delete]], are not appearing.
+           It's fixable, yet there is currently no demand for it.
+
+        2. Adds support for LazyPropertyCallback returning GetterSetter / CustomGetterSetter,
+           ensuring correct structure flags and slot initialization. Previously, the callback
+           was used to init only objects and constructors, using putDirect() unconditionally.
+
+           To avoid mixing other non-basic attributes with PropertyCallback, which would require
+           hoisting of checks against PropertyCallback and complicating attribute validation in
+           HashTableValue methods, this patch checks the type of callback's return value instead.
+
+           In the future, sticking to this approach will make returning CustomValue impossible
+           as it can't be distinguished from CustomAccessor. That's fine because all present
+           CustomValue usages merely do lazy init, which PropertyCallback is better suited for.
+
+        Also, this patch:
+
+        3. Expands setUpStaticFunctionSlot() to handle constant integers so the code using
+           `Node.ELEMENT_NODE` & friends doesn't regress (proven by attached microbenchmark).
+
+        4. Removes extra checks from setUpStaticPropertySlot(), which is called only on
+           non-reified properties.
+
+        5. Removes invariant that DOMJITAttribute property is read-only, which was broken
+           by `document.body` having a non-JIT custom setter. This aligns non-reified
+           properties with structure ones.
+
+        * jit/Repatch.cpp:
+        (JSC::tryCacheGetBy):
+        * llint/LLIntSlowPaths.cpp:
+        (JSC::LLInt::setupGetByIdPrototypeCache):
+        * runtime/HasOwnPropertyCache.h:
+        (JSC::HasOwnPropertyCache::tryAdd):
+        * runtime/JSObject.cpp:
+        (JSC::lookupPropertyForPut):
+        (JSC::JSObject::putInlineSlow):
+        (JSC::JSObject::reifyAllStaticProperties):
+        * runtime/JSObject.h:
+        (JSC::JSObject::getOwnNonIndexPropertySlot):
+        (JSC::JSObject::fillStructurePropertySlot):
+        * runtime/JSObjectInlines.h:
+        (JSC::JSObject::getNonReifiedStaticPropertyNames):
+        * runtime/Lookup.cpp:
+        (JSC::setUpStaticPropertySlot):
+        (JSC::setUpStaticFunctionSlot): Deleted.
+        * runtime/Lookup.h:
+        (JSC::HashTableValue::isLazyPropertyEnabled const):
+        (JSC::getStaticPropertySlotFromTable):
+        (JSC::reifyStaticProperty):
+        (JSC::reifyStaticProperties):
+        * tools/JSDollarVM.cpp:
+        (JSC::JSC_DEFINE_HOST_FUNCTION):
+        (JSC::JSDollarVM::finishCreation):
+
</ins><span class="cx"> 2021-07-02  Keith Miller  <keith_miller@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Add 10 more unified source cpp files for JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.cpp      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/jit/Repatch.cpp 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -319,7 +319,7 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             if (slot.isUnset() || slot.slotBase() != baseValue) {
</span><del>-                if (structure->typeInfo().prohibitsPropertyCaching())
</del><ins>+                if (structure->typeInfo().prohibitsPropertyCaching() || slot.isTaintedByOpaqueObject())
</ins><span class="cx">                     return GiveUpOnCache;
</span><span class="cx"> 
</span><span class="cx">                 if (structure->isDictionary()) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -707,7 +707,7 @@
</span><span class="cx"> {
</span><span class="cx">     Structure* structure = baseCell->structure(vm);
</span><span class="cx"> 
</span><del>-    if (structure->typeInfo().prohibitsPropertyCaching())
</del><ins>+    if (structure->typeInfo().prohibitsPropertyCaching() || slot.isTaintedByOpaqueObject())
</ins><span class="cx">         return;
</span><span class="cx">     
</span><span class="cx">     if (structure->needImpurePropertyWatchpoint())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeHasOwnPropertyCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/HasOwnPropertyCache.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/HasOwnPropertyCache.h        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/runtime/HasOwnPropertyCache.h   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -91,7 +91,7 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         Structure* structure = object->structure(vm);
</span><del>-        if (!structure->typeInfo().prohibitsPropertyCaching()
</del><ins>+        if (!(structure->typeInfo().prohibitsPropertyCaching() || slot.isTaintedByOpaqueObject())
</ins><span class="cx">             && structure->propertyAccessesAreCacheable()
</span><span class="cx">             && (!slot.isUnset() || structure->propertyAccessesAreCacheableForAbsence())) {
</span><span class="cx">             if (structure->isDictionary()) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.cpp 2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.cpp    2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -760,6 +760,56 @@
</span><span class="cx">     return putInlineForJSObject(cell, globalObject, propertyName, value, slot);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+struct PropertyForPut {
+    const unsigned attributes;
+    const PropertyOffset offset;
+    const PutValueFunc customSetter;
+};
+
+static ALWAYS_INLINE std::optional<PropertyForPut> lookupPropertyForPut(VM& vm, JSObject* object, Structure* structure, PropertyName propertyName, PutPropertySlot& slot)
+{
+    PutValueFunc customSetter = nullptr;
+    auto getFromStructure = [&] (Structure* structure) -> std::optional<PropertyForPut> {
+        unsigned attributes;
+        PropertyOffset offset = structure->get(vm, propertyName, attributes);
+        if (!isValidOffset(offset))
+            return std::nullopt;
+        if (attributes & PropertyAttribute::CustomAccessorOrValue)
+            customSetter = jsCast<CustomGetterSetter*>(object->getDirect(offset))->setter();
+        return PropertyForPut { attributes, offset, customSetter };
+    };
+
+    if (auto property = getFromStructure(structure))
+        return property;
+
+    if (structure->hasNonReifiedStaticProperties()) {
+        if (auto entry = structure->findPropertyHashEntry(propertyName)) {
+            unsigned attributes = entry->value->attributes();
+
+            if (attributes & PropertyAttribute::PropertyCallback) {
+                slot.disableCaching();
+                if (!entry->value->isLazyPropertyEnabled(object->globalObject(vm)))
+                    return std::nullopt;
+                reifyStaticProperty(vm, entry->table->classForThis, propertyName, *entry->value, *object);
+                return getFromStructure(object->structure(vm));
+            }
+
+            // FIXME: create_hash_table should set ReadOnly attribute for setter-less accessors.
+            // https://bugs.webkit.org/show_bug.cgi?id=225997
+            if (attributes & PropertyAttribute::Accessor)
+                attributes |= PropertyAttribute::ReadOnly;
+            // FIXME: Remove this after we stop defaulting to CustomValue in static hash tables.
+            if (!(attributes & (PropertyAttribute::CustomAccessor | PropertyAttribute::BuiltinOrFunctionOrAccessorOrLazyPropertyOrConstant)))
+                attributes |= PropertyAttribute::CustomValue;
+            if (attributes & PropertyAttribute::CustomAccessorOrValue)
+                customSetter = entry->value->propertyPutter();
+            return PropertyForPut { attributes, invalidOffset, customSetter };
+        }
+    }
+
+    return std::nullopt;
+}
+
</ins><span class="cx"> bool JSObject::putInlineSlow(JSGlobalObject* globalObject, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!parseIndex(propertyName));
</span><span class="lines">@@ -778,35 +828,12 @@
</span><span class="cx">         if (obj != this && structure->typeInfo().overridesPut())
</span><span class="cx">             RELEASE_AND_RETURN(scope, obj->methodTable(vm)->put(obj, globalObject, propertyName, value, slot));
</span><span class="cx"> 
</span><del>-        bool hasProperty = false;
-        unsigned attributes;
-        PutPropertySlot::PutValueFunc customSetter = nullptr;
-        PropertyOffset offset = structure->get(vm, propertyName, attributes);
-        if (isValidOffset(offset)) {
-            hasProperty = true;
-            if (attributes & PropertyAttribute::CustomAccessorOrValue)
-                customSetter = jsCast<CustomGetterSetter*>(obj->getDirect(offset))->setter();
-        } else if (structure->hasNonReifiedStaticProperties()) {
-            if (auto entry = structure->findPropertyHashEntry(propertyName)) {
-                hasProperty = true;
-                attributes = entry->value->attributes();
-
-                // FIXME: Remove this after writable accessors are introduced to static hash tables.
-                if (attributes & PropertyAttribute::Accessor)
-                    attributes |= PropertyAttribute::ReadOnly;
-                // FIXME: Remove this after we stop defaulting to CustomValue in static hash tables.
-                if (!(attributes & (PropertyAttribute::CustomAccessor | PropertyAttribute::BuiltinOrFunctionOrAccessorOrLazyPropertyOrConstant)))
-                    attributes |= PropertyAttribute::CustomValue;
-
-                if (attributes & PropertyAttribute::CustomAccessorOrValue)
-                    customSetter = entry->value->propertyPutter();
-            }
-        }
-
-        if (hasProperty) {
</del><ins>+        if (auto property = lookupPropertyForPut(vm, obj, structure, propertyName, slot)) {
+            unsigned attributes = property->attributes;
</ins><span class="cx">             if (attributes & PropertyAttribute::ReadOnly)
</span><span class="cx">                 return typeError(globalObject, scope, slot.isStrictMode(), ReadonlyPropertyWriteError);
</span><span class="cx">             if (attributes & PropertyAttribute::Accessor) {
</span><ins>+                PropertyOffset offset = property->offset;
</ins><span class="cx">                 ASSERT(isValidOffset(offset));
</span><span class="cx">                 // We need to make sure that we decide to cache this property before we potentially execute aribitrary JS.
</span><span class="cx">                 if (!this->structure(vm)->isUncacheableDictionary())
</span><span class="lines">@@ -814,9 +841,7 @@
</span><span class="cx">                 RELEASE_AND_RETURN(scope, jsCast<GetterSetter*>(obj->getDirect(offset))->callSetter(globalObject, slot.thisValue(), value, slot.isStrictMode()));
</span><span class="cx">             }
</span><span class="cx">             if (attributes & PropertyAttribute::CustomAccessor) {
</span><del>-                // FIXME: Remove this after WebIDL generator is fixed to set ReadOnly for [RuntimeConditionallyReadWrite] attributes.
-                if (!customSetter)
-                    return false;
</del><ins>+                PutValueFunc customSetter = property->customSetter;
</ins><span class="cx">                 ASSERT(customSetter);
</span><span class="cx">                 // FIXME: We should only be caching these if we're not an uncacheable dictionary:
</span><span class="cx">                 // https://bugs.webkit.org/show_bug.cgi?id=215347
</span><span class="lines">@@ -826,6 +851,7 @@
</span><span class="cx">                 return true;
</span><span class="cx">             }
</span><span class="cx">             if (attributes & PropertyAttribute::CustomValue) {
</span><ins>+                PutValueFunc customSetter = property->customSetter;
</ins><span class="cx">                 // FIXME: Once legacy RegExp features are implemented, there would be no use case for calling CustomValue setter if receiver is altered.
</span><span class="cx">                 if (customSetter && !(isThisValueAltered(slot, obj) && slot.context() == PutPropertySlot::ReflectSet)) {
</span><span class="cx">                     // FIXME: We should only be caching these if we're not an uncacheable dictionary:
</span><span class="lines">@@ -2627,6 +2653,8 @@
</span><span class="cx">     if (!structure(vm)->isDictionary())
</span><span class="cx">         setStructure(vm, Structure::toCacheableDictionaryTransition(vm, structure(vm)));
</span><span class="cx"> 
</span><ins>+    JSGlobalObject* thisGlobalObject = this->globalObject(vm);
+
</ins><span class="cx">     for (const ClassInfo* info = classInfo(vm); info; info = info->parentClass) {
</span><span class="cx">         const HashTable* hashTable = info->staticPropHashTable;
</span><span class="cx">         if (!hashTable)
</span><span class="lines">@@ -2633,6 +2661,8 @@
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><span class="cx">         for (auto& value : *hashTable) {
</span><ins>+            if ((value.attributes() & PropertyAttribute::PropertyCallback) && !value.isLazyPropertyEnabled(thisGlobalObject))
+                continue;
</ins><span class="cx">             unsigned attributes;
</span><span class="cx">             auto key = Identifier::fromString(vm, value.m_key);
</span><span class="cx">             PropertyOffset offset = getDirectOffset(vm, key, attributes);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.h   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.h      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -171,6 +171,7 @@
</span><span class="cx"> 
</span><span class="cx">     JS_EXPORT_PRIVATE static bool getOwnPropertySlotByIndex(JSObject*, JSGlobalObject*, unsigned propertyName, PropertySlot&);
</span><span class="cx">     bool getOwnPropertySlotInline(JSGlobalObject*, PropertyName, PropertySlot&);
</span><ins>+    bool fillStructurePropertySlot(VM&, Structure*, PropertyOffset, unsigned attributes, PropertySlot&);
</ins><span class="cx"> 
</span><span class="cx">     // The key difference between this and getOwnPropertySlot is that getOwnPropertySlot
</span><span class="cx">     // currently returns incorrect results for the DOM window (with non-own properties)
</span><span class="lines">@@ -648,7 +649,7 @@
</span><span class="cx">     bool putDirect(VM&, PropertyName, JSValue, unsigned attributes, PutPropertySlot&);
</span><span class="cx">     bool putDirect(VM&, PropertyName, JSValue, PutPropertySlot&);
</span><span class="cx">     void putDirectWithoutTransition(VM&, PropertyName, JSValue, unsigned attributes = 0);
</span><del>-    bool putDirectNonIndexAccessor(VM&, PropertyName, GetterSetter*, unsigned attributes);
</del><ins>+    JS_EXPORT_PRIVATE bool putDirectNonIndexAccessor(VM&, PropertyName, GetterSetter*, unsigned attributes);
</ins><span class="cx">     void putDirectNonIndexAccessorWithoutTransition(VM&, PropertyName, GetterSetter*, unsigned attributes);
</span><span class="cx">     bool putDirectAccessor(JSGlobalObject*, PropertyName, GetterSetter*, unsigned attributes);
</span><span class="cx">     JS_EXPORT_PRIVATE bool putDirectCustomAccessor(VM&, PropertyName, JSValue, unsigned attributes);
</span><span class="lines">@@ -1391,6 +1392,12 @@
</span><span class="cx">     // getPropertySlot relies on this method never returning index properties!
</span><span class="cx">     ASSERT(!parseIndex(propertyName));
</span><span class="cx"> 
</span><ins>+    fillStructurePropertySlot(vm, structure, offset, attributes, slot);
+    return true;
+}
+
+ALWAYS_INLINE bool JSObject::fillStructurePropertySlot(VM& vm, Structure* structure, PropertyOffset offset, unsigned attributes, PropertySlot& slot)
+{
</ins><span class="cx">     JSValue value = getDirect(offset);
</span><span class="cx">     if (value.isCell()) {
</span><span class="cx">         ASSERT(value);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjectInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObjectInlines.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObjectInlines.h    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/runtime/JSObjectInlines.h       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -682,6 +682,8 @@
</span><span class="cx">     if (staticPropertiesReified(vm))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    JSGlobalObject* globalObject = this->globalObject(vm);
+
</ins><span class="cx">     // Add properties from the static hashtables of properties
</span><span class="cx">     for (const ClassInfo* info = classInfo(vm); info; info = info->parentClass) {
</span><span class="cx">         const HashTable* table = info->staticPropHashTable;
</span><span class="lines">@@ -689,8 +691,11 @@
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><span class="cx">         for (auto iter = table->begin(); iter != table->end(); ++iter) {
</span><del>-            if (mode == DontEnumPropertiesMode::Include || !(iter->attributes() & PropertyAttribute::DontEnum))
-                propertyNames.add(Identifier::fromString(vm, iter.key()));
</del><ins>+            if (mode == DontEnumPropertiesMode::Exclude && (iter->attributes() & PropertyAttribute::DontEnum))
+                continue;
+            if ((iter->attributes() & PropertyAttribute::PropertyCallback) && !iter->isLazyPropertyEnabled(globalObject))
+                continue;
+            propertyNames.add(Identifier::fromString(vm, iter.key()));
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeLookupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Lookup.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Lookup.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/runtime/Lookup.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -43,34 +43,21 @@
</span><span class="cx">     thisObject.putDirectNonIndexAccessor(vm, propertyName, accessor, attributesForStructure(value.attributes()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool setUpStaticFunctionSlot(VM& vm, const ClassInfo* classInfo, const HashTableValue* entry, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot)
</del><ins>+void setUpStaticPropertySlot(VM& vm, const ClassInfo* classInfo, const HashTableValue* entry, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot)
</ins><span class="cx"> {
</span><ins>+    ASSERT(entry->attributes() & PropertyAttribute::BuiltinOrFunctionOrAccessorOrLazyPropertyOrConstant);
</ins><span class="cx">     ASSERT(thisObject->globalObject(vm));
</span><del>-    ASSERT(entry->attributes() & PropertyAttribute::BuiltinOrFunctionOrAccessorOrLazyProperty);
-    unsigned attributes;
-    bool isAccessor = entry->attributes() & PropertyAttribute::Accessor;
-    PropertyOffset offset = thisObject->getDirectOffset(vm, propertyName, attributes);
</del><ins>+    ASSERT(!thisObject->staticPropertiesReified(vm));
+    ASSERT(!thisObject->getDirect(vm, propertyName));
</ins><span class="cx"> 
</span><del>-    if (!isValidOffset(offset)) {
-        // If a property is ever deleted from an object with a static table, then we reify
-        // all static functions at that time - after this we shouldn't be re-adding anything.
-        if (thisObject->staticPropertiesReified(vm))
-            return false;
</del><ins>+    reifyStaticProperty(vm, classInfo, propertyName, *entry, *thisObject);
</ins><span class="cx"> 
</span><del>-        reifyStaticProperty(vm, classInfo, propertyName, *entry, *thisObject);
</del><ins>+    Structure* structure = thisObject->structure(vm);
+    unsigned attributes;
+    PropertyOffset offset = structure->get(vm, propertyName, attributes);
+    ASSERT_WITH_MESSAGE(isValidOffset(offset), "Static hashtable initialiation for '%s' did not produce a property.\n", propertyName.uid()->characters8());
</ins><span class="cx"> 
</span><del>-        offset = thisObject->getDirectOffset(vm, propertyName, attributes);
-        if (!isValidOffset(offset)) {
-            dataLog("Static hashtable initialiation for ", propertyName, " did not produce a property.\n");
-            RELEASE_ASSERT_NOT_REACHED();
-        }
-    }
-
-    if (isAccessor)
-        slot.setCacheableGetterSlot(thisObject, attributes, jsCast<GetterSetter*>(thisObject->getDirect(offset)), offset);
-    else
-        slot.setValue(thisObject, attributes, thisObject->getDirect(offset), offset);
-    return true;
</del><ins>+    thisObject->fillStructurePropertySlot(vm, structure, offset, attributes, slot);    
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeLookuph"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Lookup.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Lookup.h     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/runtime/Lookup.h        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> #include "CustomGetterSetter.h"
</span><span class="cx"> #include "DOMJITGetterSetter.h"
</span><span class="cx"> #include "DOMJITSignature.h"
</span><ins>+#include "GetterSetter.h"
</ins><span class="cx"> #include "Identifier.h"
</span><span class="cx"> #include "IdentifierInlines.h"
</span><span class="cx"> #include "Intrinsic.h"
</span><span class="lines">@@ -38,6 +39,8 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><ins>+// FIXME: Templatize HashTable and CompactHashIndex so int8_t sized values can be used for small tables to reduce binary size.
+// https://bugs.webkit.org/show_bug.cgi?id=227216
</ins><span class="cx"> struct CompactHashIndex {
</span><span class="cx">     const int16_t value;
</span><span class="cx">     const int16_t next;
</span><span class="lines">@@ -47,6 +50,7 @@
</span><span class="cx"> typedef PutPropertySlot::PutValueFunc PutFunction;
</span><span class="cx"> typedef FunctionExecutable* (*BuiltinGenerator)(VM&);
</span><span class="cx"> typedef JSValue (*LazyPropertyCallback)(VM&, JSObject*);
</span><ins>+typedef bool (*IsLazyPropertyEnabledCallback)(JSGlobalObject*);
</ins><span class="cx"> 
</span><span class="cx"> // Hash table generated by the create_hash_table script.
</span><span class="cx"> struct HashTableValue {
</span><span class="lines">@@ -99,7 +103,14 @@
</span><span class="cx">     
</span><span class="cx">     ptrdiff_t lazyCellPropertyOffset() const { ASSERT(m_attributes & PropertyAttribute::CellProperty); return m_values.value1; }
</span><span class="cx">     ptrdiff_t lazyClassStructureOffset() const { ASSERT(m_attributes & PropertyAttribute::ClassStructure); return m_values.value1; }
</span><ins>+
</ins><span class="cx">     LazyPropertyCallback lazyPropertyCallback() const { ASSERT(m_attributes & PropertyAttribute::PropertyCallback); return reinterpret_cast<LazyPropertyCallback>(m_values.value1); }
</span><ins>+    bool isLazyPropertyEnabled(JSGlobalObject* globalObject) const
+    {
+        ASSERT(m_attributes & PropertyAttribute::PropertyCallback);
+        auto isEnabledCallback = bitwise_cast<IsLazyPropertyEnabledCallback>(m_values.value2);
+        return !isEnabledCallback || isEnabledCallback(globalObject);
+    }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> struct HashTable {
</span><span class="lines">@@ -201,7 +212,7 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-JS_EXPORT_PRIVATE bool setUpStaticFunctionSlot(VM&, const ClassInfo*, const HashTableValue*, JSObject* thisObject, PropertyName, PropertySlot&);
</del><ins>+JS_EXPORT_PRIVATE void setUpStaticPropertySlot(VM&, const ClassInfo*, const HashTableValue*, JSObject* thisObject, PropertyName, PropertySlot&);
</ins><span class="cx"> JS_EXPORT_PRIVATE void reifyStaticAccessor(VM&, const HashTableValue&, JSObject& thisObject, PropertyName);
</span><span class="cx"> 
</span><span class="cx"> inline BuiltinGenerator HashTableValue::builtinAccessorGetterGenerator() const
</span><span class="lines">@@ -218,6 +229,7 @@
</span><span class="cx">     return reinterpret_cast<BuiltinGenerator>(m_values.value2);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+// FIXME: Inline this function into its call site so staticPropertiesReified() check can be hoisted.
</ins><span class="cx"> inline bool getStaticPropertySlotFromTable(VM& vm, const ClassInfo* classInfo, const HashTable& table, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot)
</span><span class="cx"> {
</span><span class="cx">     if (thisObject->staticPropertiesReified(vm))
</span><span class="lines">@@ -227,18 +239,20 @@
</span><span class="cx">     if (!entry)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    if (entry->attributes() & PropertyAttribute::BuiltinOrFunctionOrAccessorOrLazyProperty)
-        return setUpStaticFunctionSlot(vm, classInfo, entry, thisObject, propertyName, slot);
</del><ins>+    if ((entry->attributes() & PropertyAttribute::PropertyCallback) && !entry->isLazyPropertyEnabled(thisObject->globalObject(vm))) {
+        slot.disableCaching();
+        slot.setIsTaintedByOpaqueObject();
+        return false;
+    }
</ins><span class="cx"> 
</span><del>-    if (entry->attributes() & PropertyAttribute::ConstantInteger) {
-        slot.setValue(thisObject, attributesForStructure(entry->attributes()), jsNumber(entry->constantInteger()));
</del><ins>+    if (entry->attributes() & PropertyAttribute::BuiltinOrFunctionOrAccessorOrLazyPropertyOrConstant) {
+        setUpStaticPropertySlot(vm, classInfo, entry, thisObject, propertyName, slot);
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (entry->attributes() & PropertyAttribute::DOMJITAttribute) {
</span><del>-        ASSERT_WITH_MESSAGE(entry->attributes() & PropertyAttribute::ReadOnly, "DOMJITAttribute supports readonly attributes currently.");
</del><span class="cx">         const DOMJIT::GetterSetter* domJIT = entry->domJIT();
</span><del>-        slot.setCacheableCustom(thisObject, attributesForStructure(entry->attributes()), domJIT->getter(), nullptr, DOMAttributeAnnotation { classInfo, domJIT });
</del><ins>+        slot.setCacheableCustom(thisObject, attributesForStructure(entry->attributes()), domJIT->getter(), entry->propertyPutter(), DOMAttributeAnnotation { classInfo, domJIT });
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -312,8 +326,15 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     if (value.attributes() & PropertyAttribute::PropertyCallback) {
</span><ins>+        ASSERT(value.isLazyPropertyEnabled(thisObj.globalObject(vm)));
+
</ins><span class="cx">         JSValue result = value.lazyPropertyCallback()(vm, &thisObj);
</span><del>-        thisObj.putDirect(vm, propertyName, result, attributesForStructure(value.attributes()));
</del><ins>+        if (result.isGetterSetter())
+            thisObj.putDirectNonIndexAccessor(vm, propertyName, jsCast<GetterSetter*>(result), attributesForStructure(value.attributes()) | PropertyAttribute::Accessor);
+        else if (result.isCustomGetterSetter())
+            thisObj.putDirectCustomAccessor(vm, propertyName, result, attributesForStructure(value.attributes()));
+        else
+            thisObj.putDirect(vm, propertyName, result, attributesForStructure(value.attributes()));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -339,10 +360,13 @@
</span><span class="cx"> template<unsigned numberOfValues>
</span><span class="cx"> inline void reifyStaticProperties(VM& vm, const ClassInfo* classInfo, const HashTableValue (&values)[numberOfValues], JSObject& thisObj)
</span><span class="cx"> {
</span><ins>+    JSGlobalObject* globalObject = thisObj.globalObject(vm);
</ins><span class="cx">     BatchedTransitionOptimizer transitionOptimizer(vm, &thisObj);
</span><span class="cx">     for (auto& value : values) {
</span><span class="cx">         if (!value.m_key)
</span><span class="cx">             continue;
</span><ins>+        if ((value.attributes() & PropertyAttribute::PropertyCallback) && !value.isLazyPropertyEnabled(globalObject))
+            continue;
</ins><span class="cx">         auto key = Identifier::fromString(vm, reinterpret_cast<const LChar*>(value.m_key), strlen(value.m_key));
</span><span class="cx">         reifyStaticProperty(vm, classInfo, key, value, thisObj);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretoolsJSDollarVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp 2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp    2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -862,6 +862,80 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+static inline bool getDirectBoolean(JSGlobalObject* globalObject, ASCIILiteral string)
+{
+    DollarVMAssertScope assertScope;
+    VM& vm = globalObject->vm();
+    JSValue isEnabled = globalObject->getDirect(vm, Identifier::fromString(vm, string));
+    if (!isEnabled || !isEnabled.isBoolean())
+        return false;
+    return isEnabled.asBoolean();
+}
+
+static JSC_DECLARE_HOST_FUNCTION(lazyAccessorGetter);
+JSC_DEFINE_HOST_FUNCTION(lazyAccessorGetter, (JSGlobalObject*, CallFrame* callFrame)) { return JSValue::encode(callFrame->thisValue()); }
+static JSValue createLazyCallbackAccessor(VM& vm, JSObject* thisObject) { return GetterSetter::create(vm, thisObject->globalObject(vm), JSFunction::create(vm, thisObject->globalObject(vm), 0, String(), lazyAccessorGetter), nullptr); }
+static bool isEnabledLazyCallbackAccessor(JSGlobalObject* globalObject) { return getDirectBoolean(globalObject, "isEnabledLazyCallbackAccessor"_s); }
+
+static JSValue createLazyCallbackCustomAccessor(VM& vm, JSObject*) { return CustomGetterSetter::create(vm, testStaticAccessorGetter, testStaticAccessorPutter); }
+static bool isEnabledLazyCallbackCustomAccessor(JSGlobalObject* globalObject) { return getDirectBoolean(globalObject, "isEnabledLazyCallbackCustomAccessor"_s); }
+
+static JSValue createLazyCallbackConstantInteger(VM&, JSObject*) { return jsNumber(42); }
+static bool isEnabledLazyCallbackConstantInteger(JSGlobalObject* globalObject) { return getDirectBoolean(globalObject, "isEnabledLazyCallbackConstantInteger"_s); }
+
+static const struct HashTableValue staticLazyPropertyTableValues[3] = {
+    { "testLazyCallbackAccessor", PropertyAttribute::ReadOnly | PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createLazyCallbackAccessor), (intptr_t)static_cast<IsLazyPropertyEnabledCallback>(isEnabledLazyCallbackAccessor) } },
+    { "testLazyCallbackCustomAccessor", PropertyAttribute::CustomAccessor | PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createLazyCallbackCustomAccessor), (intptr_t)static_cast<IsLazyPropertyEnabledCallback>(isEnabledLazyCallbackCustomAccessor) } },
+    { "testLazyCallbackConstantInteger", PropertyAttribute::ReadOnly | PropertyAttribute::DontDelete | PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createLazyCallbackConstantInteger), (intptr_t)static_cast<IsLazyPropertyEnabledCallback>(isEnabledLazyCallbackConstantInteger) } },
+};
+
+static const struct CompactHashIndex staticLazyPropertyTableIndex[8] = {
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+static const struct HashTable staticLazyPropertyTable =
+    { 3, 7, true, nullptr, staticLazyPropertyTableValues, staticLazyPropertyTableIndex };
+
+class StaticLazyProperty : public JSNonFinalObject {
+    using Base = JSNonFinalObject;
+    static constexpr unsigned StructureFlags = Base::StructureFlags | HasStaticPropertyTable;
+public:
+    StaticLazyProperty(VM& vm, Structure* structure)
+        : Base(vm, structure)
+    {
+        DollarVMAssertScope assertScope;
+    }
+
+    DECLARE_INFO;
+
+    template<typename CellType, SubspaceAccess>
+    static CompleteSubspace* subspaceFor(VM& vm)
+    {
+        return &vm.cellSpace;
+    }
+
+    static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
+    {
+        DollarVMAssertScope assertScope;
+        return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
+    }
+
+    static StaticLazyProperty* create(VM& vm, Structure* structure)
+    {
+        DollarVMAssertScope assertScope;
+        StaticLazyProperty* lazyProperty = new (NotNull, allocateCell<StaticLazyProperty>(vm.heap)) StaticLazyProperty(vm, structure);
+        lazyProperty->finishCreation(vm);
+        return lazyProperty;
+    }
+};
+
</ins><span class="cx"> class ObjectDoingSideEffectPutWithoutCorrectSlotStatus : public JSNonFinalObject {
</span><span class="cx">     using Base = JSNonFinalObject;
</span><span class="cx">     static constexpr unsigned StructureFlags = Base::StructureFlags | OverridesPut;
</span><span class="lines">@@ -1712,6 +1786,7 @@
</span><span class="cx"> 
</span><span class="cx"> const ClassInfo StaticCustomAccessor::s_info = { "StaticCustomAccessor", &Base::s_info, &staticCustomAccessorTable, nullptr, CREATE_METHOD_TABLE(StaticCustomAccessor) };
</span><span class="cx"> const ClassInfo StaticCustomValue::s_info = { "StaticCustomValue", &Base::s_info, &staticCustomValueTable, nullptr, CREATE_METHOD_TABLE(StaticCustomValue) };
</span><ins>+const ClassInfo StaticLazyProperty::s_info = { "StaticLazyProperty", &Base::s_info, &staticLazyPropertyTable, nullptr, CREATE_METHOD_TABLE(StaticLazyProperty) };
</ins><span class="cx"> const ClassInfo ObjectDoingSideEffectPutWithoutCorrectSlotStatus::s_info = { "ObjectDoingSideEffectPutWithoutCorrectSlotStatus", &Base::s_info, &staticCustomAccessorTable, nullptr, CREATE_METHOD_TABLE(ObjectDoingSideEffectPutWithoutCorrectSlotStatus) };
</span><span class="cx"> 
</span><span class="cx"> ElementHandleOwner* Element::handleOwner()
</span><span class="lines">@@ -1977,6 +2052,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> static JSC_DECLARE_HOST_FUNCTION(functionCreateStaticCustomAccessor);
</span><span class="cx"> static JSC_DECLARE_HOST_FUNCTION(functionCreateStaticCustomValue);
</span><ins>+static JSC_DECLARE_HOST_FUNCTION(functionCreateStaticLazyProperty);
</ins><span class="cx"> static JSC_DECLARE_HOST_FUNCTION(functionCreateObjectDoingSideEffectPutWithoutCorrectSlotStatus);
</span><span class="cx"> static JSC_DECLARE_HOST_FUNCTION(functionCreateEmptyFunctionWithName);
</span><span class="cx"> static JSC_DECLARE_HOST_FUNCTION(functionSetImpureGetterDelegate);
</span><span class="lines">@@ -2979,6 +3055,16 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+JSC_DEFINE_HOST_FUNCTION(functionCreateStaticLazyProperty, (JSGlobalObject* globalObject, CallFrame*))
+{
+    DollarVMAssertScope assertScope;
+    VM& vm = globalObject->vm();
+    JSLockHolder lock(vm);
+    Structure* structure = StaticLazyProperty::createStructure(vm, globalObject, jsNull());
+    auto* result = StaticLazyProperty::create(vm, structure);
+    return JSValue::encode(result);
+}
+
</ins><span class="cx"> JSC_DEFINE_HOST_FUNCTION(functionCreateObjectDoingSideEffectPutWithoutCorrectSlotStatus, (JSGlobalObject* globalObject, CallFrame* callFrame))
</span><span class="cx"> {
</span><span class="cx">     DollarVMAssertScope assertScope;
</span><span class="lines">@@ -3771,6 +3857,7 @@
</span><span class="cx"> #endif
</span><span class="cx">     addFunction(vm, "createStaticCustomAccessor", functionCreateStaticCustomAccessor, 0);
</span><span class="cx">     addFunction(vm, "createStaticCustomValue", functionCreateStaticCustomValue, 0);
</span><ins>+    addFunction(vm, "createStaticLazyProperty", functionCreateStaticLazyProperty, 0);
</ins><span class="cx">     addFunction(vm, "createObjectDoingSideEffectPutWithoutCorrectSlotStatus", functionCreateObjectDoingSideEffectPutWithoutCorrectSlotStatus, 0);
</span><span class="cx">     addFunction(vm, "createEmptyFunctionWithName", functionCreateEmptyFunctionWithName, 1);
</span><span class="cx">     addFunction(vm, "getPrivateProperty", functionGetPrivateProperty, 2);
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/ChangeLog      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -1,3 +1,97 @@
</span><ins>+2021-07-03  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        [WebIDL] Rework runtime enabled properties leveraging PropertyCallback
+        https://bugs.webkit.org/show_bug.cgi?id=227275
+
+        Reviewed by Saam Barati.
+
+        This performance-neutral change makes implementation of runtime enabled properties independent
+        of eager property reification, slightly optimizing DOM global objects initialization.
+        A follow-up patch (webkit.org/b/158557) will remove eager property reification of WebIDL
+        constructors / prototypes, further reducing CPU usage and memory cost on page load.
+
+        Provided we reify properties without creating transitions and avoid conversion to a cacheable
+        dictionary, that should not regress performance & memory usage as well. Non-reified custom
+        accessors / values are inline-cached, even through JSProxy. DOM methods are reified on first
+        lookup; the same approach is used for multiple hot JSC built-ins (e.g. StringPrototype).
+
+        A huge refactoring was required to keep generation of lazy property callbacks within a single
+        function. Handling of private identifiers was decoupled from public ones, while hash table
+        generation for constructors / prototypes / instances was merged into GenerateHashTable.
+
+        This approach preserves HashTable's immutability while avoiding addition of extra checks to
+        entry lookup and memory usage increase. Another important advantage: a feature that was
+        enabled after its interface was created, immediately becomes usable (no page reload needed).
+
+        Also, this change removes all usages of DeletePropertyModeScope from WebCore, which was used
+        to disable non-configurable constants at runtime, allowing its complete removal in the future.
+
+        No new tests, no behavior change.
+
+        * bindings/js/JSDOMBuiltinConstructor.h:
+        * bindings/js/JSDOMConstructor.h:
+        * bindings/js/JSDOMConstructorNotCallable.h:
+        * bindings/js/JSDOMConstructorNotConstructable.h:
+        * bindings/scripts/CodeGeneratorJS.pm:
+        Extract IDLInterface::className() to avoid passing $className as an argument.
+
+        (InstanceOperationCount): Deleted.
+        (PrototypeOperationCount): Deleted.
+        (InstancePropertyCount): Deleted.
+        (PrototypePropertyCount): Deleted.
+        (PrototypeHasStaticPropertyTable): Deleted.
+        (ConstructorHasProperties):
+        (PrototypeHasProperties):
+        (InstanceHasProperties):
+        Remove *Count helpers because they were incorrect with constants, overloads, private identifiers,
+        and Symbol.iterator. Instead, do the count in GeneratePropertiesHashTable to avoid duplicate checks.
+
+        (GeneratePropertiesHashTable):
+        (GenerateHashTableValueArray):
+        - Compute $hasSetterOrReadonlyProperties early because it's impossible to detect runtime enabled accessors,
+          which are concealed behind PropertyAttribute::PropertyCallback, in GenerateHashTableValueArray.
+        - Set HashTable.hasSetterOrReadonlyProperties to `true` if a read-only value (constant) was seen.
+
+        (GenerateRuntimeEnableConditionalString):
+        Always use provided $globalObjectPtr parameter.
+
+        (GenerateHashTable):
+        - Simplify name inference for HashTable's values / indices since hash table names never include ":".
+        - Nicely simplify generation of hash table kind comment.
+        - Set HashTable.classForThis to `nullptr` for constructors because they can't have DOMAttribute properties.
+
+        (GenerateImplementation):
+        - Set ReadOnly attribute for runtime read-only accessors that shadow setter from static hash table.
+        - Reify "entries" property of an iterable interface to ensure its identity with Symbol.iterator method.
+
+        (GeneratePrivateIdentifiers):
+        - Add support for accelerated DOM attributes, which are rather common.
+        - Add support for static operations, which we have a use case for (see @whenSignalAborted).
+
+        (GeneratePrototypeDeclaration):
+        Set HasStaticPropertyTable structure flag for global interfaces as well, progressing idlharness.js test.
+
+        (GenerateConstructorHelperMethods):
+        Ensure that HasStaticPropertyTable structure flag is set for constructors as well.
+
+        (StringifyJSCAttributes):
+        (GetJSCAttributesForAttribute):
+        (ShouldBeOnInstance):
+        (GenerateHeader):
+        (GetAttributeGetter):
+        (GetAttributeSetter):
+        (GetAttributeJSValue):
+        (GetOperationJSValue):
+        (GenerateLazyPropertyCallbacks):
+        (GenerateCallbackImplementationContent):
+        (GetRuntimeEnabledStaticProperties): Deleted.
+
+        * bindings/scripts/test/JS/*: Updated.
+        * bindings/scripts/test/DOMWindowConstructors.idl:
+        * bindings/scripts/test/TestEnabledBySetting.idl:
+        * bindings/scripts/test/TestObj.idl:
+        Cover [PrivateIdentifiers] with accelerated DOM attributes, static operations, and constructors.
+
</ins><span class="cx"> 2021-07-03  Alan Bujtas  <zalan@apple.com>
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r278377): incorrect hit-testing with clip-path()
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBuiltinConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBuiltinConstructor.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBuiltinConstructor.h       2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/js/JSDOMBuiltinConstructor.h  2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> template<typename JSClass> class JSDOMBuiltinConstructor final : public JSDOMBuiltinConstructorBase {
</span><span class="cx"> public:
</span><span class="cx">     using Base = JSDOMBuiltinConstructorBase;
</span><ins>+    static const unsigned StructureFlags;
</ins><span class="cx"> 
</span><span class="cx">     static JSDOMBuiltinConstructor* create(JSC::VM&, JSC::Structure*, JSDOMGlobalObject&);
</span><span class="cx">     static JSC::Structure* createStructure(JSC::VM&, JSC::JSGlobalObject&, JSC::JSValue prototype);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMConstructor.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMConstructor.h      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/js/JSDOMConstructor.h 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> template<typename JSClass> class JSDOMConstructor final : public JSDOMConstructorBase {
</span><span class="cx"> public:
</span><span class="cx">     using Base = JSDOMConstructorBase;
</span><ins>+    static const unsigned StructureFlags;
</ins><span class="cx"> 
</span><span class="cx">     static JSDOMConstructor* create(JSC::VM&, JSC::Structure*, JSDOMGlobalObject&);
</span><span class="cx">     static JSC::Structure* createStructure(JSC::VM&, JSC::JSGlobalObject&, JSC::JSValue prototype);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMConstructorNotCallableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMConstructorNotCallable.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMConstructorNotCallable.h   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/js/JSDOMConstructorNotCallable.h      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -33,8 +33,8 @@
</span><span class="cx"> template<typename JSClass> class JSDOMConstructorNotCallable : public JSDOMObject {
</span><span class="cx"> public:
</span><span class="cx">     using Base = JSDOMObject;
</span><ins>+    static const unsigned StructureFlags;
</ins><span class="cx"> 
</span><del>-    static constexpr unsigned StructureFlags = Base::StructureFlags;
</del><span class="cx">     static constexpr bool needsDestruction = false;
</span><span class="cx">     static JSDOMConstructorNotCallable* create(JSC::VM&, JSC::Structure*, JSDOMGlobalObject&);
</span><span class="cx">     static JSC::Structure* createStructure(JSC::VM&, JSC::JSGlobalObject&, JSC::JSValue prototype);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMConstructorNotConstructableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMConstructorNotConstructable.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMConstructorNotConstructable.h      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/js/JSDOMConstructorNotConstructable.h 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> template<typename JSClass> class JSDOMConstructorNotConstructable final : public JSDOMConstructorBase {
</span><span class="cx"> public:
</span><span class="cx">     using Base = JSDOMConstructorBase;
</span><ins>+    static const unsigned StructureFlags;
</ins><span class="cx"> 
</span><span class="cx">     static JSDOMConstructorNotConstructable* create(JSC::VM&, JSC::Structure*, JSDOMGlobalObject&);
</span><span class="cx">     static JSC::Structure* createStructure(JSC::VM&, JSC::JSGlobalObject&, JSC::JSValue prototype);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm    2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -12,6 +12,7 @@
</span><span class="cx"> # Copyright (C) 2007, 2008, 2009, 2012 Google Inc.
</span><span class="cx"> # Copyright (C) 2013 Samsung Electronics. All rights reserved.
</span><span class="cx"> # Copyright (C) 2015, 2016 Canon Inc. All rights reserved.
</span><ins>+# Copyright (C) 2021 Alexey Shvayka <shvaikalesh@gmail.com>
</ins><span class="cx"> #
</span><span class="cx"> # This library is free software; you can redistribute it and/or
</span><span class="cx"> # modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -37,6 +38,12 @@
</span><span class="cx"> use Data::Dumper;
</span><span class="cx"> use Hasher;
</span><span class="cx"> 
</span><ins>+use constant {
+    CONTEXT_NAME_CONSTRUCTOR => "Constructor",
+    CONTEXT_NAME_PROTOTYPE => "Prototype",
+    CONTEXT_NAME_INSTANCE => "Instance",
+};
+
</ins><span class="cx"> my $codeGenerator;
</span><span class="cx"> my $writeDependencies;
</span><span class="cx"> 
</span><span class="lines">@@ -108,6 +115,12 @@
</span><span class="cx"> */
</span><span class="cx"> EOF
</span><span class="cx"> 
</span><ins>+sub IDLInterface::className
+{
+    my $self = shift;
+    return "JS" . $self->type->name;
+}
+
</ins><span class="cx"> sub assert
</span><span class="cx"> {
</span><span class="cx">     my $message = shift;
</span><span class="lines">@@ -2042,6 +2055,16 @@
</span><span class="cx">     return 1;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub StringifyJSCAttributes
+{
+    my $specials = shift;
+    my $length = scalar(@$specials);
+
+    return "0" if $length == 0;
+    return "static_cast<unsigned>(@${specials})" if $length == 1;
+    return join(" | ", @$specials);
+}
+
</ins><span class="cx"> sub GetJSCAttributesForAttribute
</span><span class="cx"> {
</span><span class="cx">     my $interface = shift;
</span><span class="lines">@@ -2055,10 +2078,16 @@
</span><span class="cx">     push(@specials, "JSC::PropertyAttribute::DontEnum") if ($attribute->extendedAttributes->{NotEnumerable} || $isGlobalConstructor);
</span><span class="cx">     push(@specials, "JSC::PropertyAttribute::ReadOnly") if IsReadonly($attribute);
</span><span class="cx">     push(@specials, "JSC::PropertyAttribute::CustomAccessor") unless $isGlobalConstructor or IsJSBuiltin($interface, $attribute);
</span><ins>+
+    if (NeedsRuntimeCheck($interface, $attribute)) {
+        push(@specials, "JSC::PropertyAttribute::PropertyCallback");
+        return \@specials;
+    }
+
</ins><span class="cx">     push(@specials, "JSC::PropertyAttribute::DOMAttribute") if IsAcceleratedDOMAttribute($interface, $attribute);
</span><span class="cx">     push(@specials, "JSC::PropertyAttribute::DOMJITAttribute") if $attribute->extendedAttributes->{DOMJIT};
</span><span class="cx">     push(@specials, "JSC::PropertyAttribute::Accessor | JSC::PropertyAttribute::Builtin") if  IsJSBuiltin($interface, $attribute);
</span><del>-    return "static_cast<unsigned>(" . ((@specials > 0) ? join(" | ", @specials) : "0") . ")";
</del><ins>+    return \@specials;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub GetIndexedGetterOperation
</span><span class="lines">@@ -2091,53 +2120,6 @@
</span><span class="cx">     return GetSpecialAccessorOperationForType($interface, "deleter", "DOMString", 1);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub InstanceOperationCount
-{
-    my $interface = shift;
-    my $count = 0;
-
-    foreach my $operation (@{$interface->operations}) {
-        $count++ if OperationShouldBeOnInstance($interface, $operation);
-    }
-
-    return $count;
-}
-
-sub PrototypeOperationCount
-{
-    my $interface = shift;
-    my $count = 0;
-
-    foreach my $operation (@{$interface->operations}) {
-        $count++ if !$operation->isStatic && !OperationShouldBeOnInstance($interface, $operation);
-    }
-
-    return $count;
-}
-
-sub InstancePropertyCount
-{
-    my $interface = shift;
-    my $count = 0;
-    foreach my $attribute (@{$interface->attributes}) {
-        $count++ if AttributeShouldBeOnInstance($interface, $attribute);
-    }
-    $count += InstanceOperationCount($interface);
-    return $count;
-}
-
-sub PrototypePropertyCount
-{
-    my $interface = shift;
-    my $count = 0;
-    foreach my $attribute (@{$interface->attributes}) {
-        $count++ if !AttributeShouldBeOnInstance($interface, $attribute);
-    }
-    $count += PrototypeOperationCount($interface);
-    $count++ if NeedsConstructorProperty($interface);
-    return $count;
-}
-
</del><span class="cx"> sub InstanceOverridesGetOwnPropertySlot
</span><span class="cx"> {
</span><span class="cx">     my $interface = shift;
</span><span class="lines">@@ -2179,13 +2161,6 @@
</span><span class="cx">         || GetNamedDeleterOperation($interface);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub PrototypeHasStaticPropertyTable
-{
-    my $interface = shift;
-    my $numConstants = @{$interface->constants};
-    return $numConstants > 0 || PrototypePropertyCount($interface) > 0;
-}
-
</del><span class="cx"> sub InstanceNeedsVisitChildren
</span><span class="cx"> {
</span><span class="cx">     my $interface = shift;
</span><span class="lines">@@ -2910,7 +2885,7 @@
</span><span class="cx">         push(@headerContent, "    }\n\n");
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    $structureFlags{"JSC::HasStaticPropertyTable"} = 1 if InstancePropertyCount($interface) > 0;
</del><ins>+    $structureFlags{"JSC::HasStaticPropertyTable"} = 1 if InstanceHasProperties($interface);
</ins><span class="cx">     $structureFlags{"JSC::NewImpurePropertyFiresWatchpoints"} = 1 if $interface->extendedAttributes->{NewImpurePropertyFiresWatchpoints};
</span><span class="cx">     $structureFlags{"JSC::IsImmutablePrototypeExoticObject"} = 1 if $interface->extendedAttributes->{IsImmutablePrototypeExoticObject};
</span><span class="cx">     $structureFlags{"JSC::MasqueradesAsUndefined"} = 1 if $interface->extendedAttributes->{MasqueradesAsUndefined};
</span><span class="lines">@@ -3311,19 +3286,128 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub ShouldBeOnInstance
+{
+    my ($interface, $context) = @_;
+
+    return OperationShouldBeOnInstance($interface, $context) if ref($context) eq "IDLOperation";
+    return AttributeShouldBeOnInstance($interface, $context) if ref($context) eq "IDLAttribute";
+
+    assert("Unsupported argument: " . ref($context));
+}
+
+sub ConstructorHasProperties
+{
+    my $interface = shift;
+    return 1 if @{$interface->constants};
+    foreach my $operationOrAttribute (@{$interface->operations}, @{$interface->attributes}) {
+        return 1 if $operationOrAttribute->isStatic;
+    }
+    return 0;
+}
+
+sub PrototypeHasProperties
+{
+    my $interface = shift;
+    return 1 if @{$interface->constants};
+    return 1 if NeedsConstructorProperty($interface);
+    foreach my $operationOrAttribute (@{$interface->operations}, @{$interface->attributes}) {
+        return 1 unless ShouldBeOnInstance($interface, $operationOrAttribute);
+    }
+    return 0;
+}
+
+sub InstanceHasProperties
+{
+    my $interface = shift;
+    foreach my $operationOrAttribute (@{$interface->operations}, @{$interface->attributes}) {
+        return 1 if ShouldBeOnInstance($interface, $operationOrAttribute);
+    }
+    return 0;
+}
+
+sub GetAttributeGetter
+{
+    my ($interface, $attribute) = @_;
+    return $attribute->extendedAttributes->{DOMJIT}
+        ? "&DOMJITAttributeFor" . $interface->type->name . $codeGenerator->WK_ucfirst($attribute->name)
+        : GetAttributeGetterName($interface, $interface->className, $attribute);
+}
+
+sub GetAttributeSetter
+{
+    my ($interface, $attribute) = @_;
+    # FIXME: Remove IsConstructorType check by utilizing LazyProperty for window.%Interface% constructors.
+    return IsReadonly($attribute) || $codeGenerator->IsConstructorType($attribute->type) ? "nullptr" : GetAttributeSetterName($interface, $interface->className, $attribute);
+}
+
+sub GetAttributeJSValue
+{
+    my ($interface, $attribute) = @_;
+    my $getter = GetAttributeGetter($interface, $attribute);
+    my $setter = GetAttributeSetter($interface, $attribute);
+    return IsAcceleratedDOMAttribute($interface, $attribute)
+        ? "DOMAttributeGetterSetter::create(vm, ${getter}, ${setter}, DOMAttributeAnnotation { " . $interface->className . "::info(), nullptr })"
+        : "CustomGetterSetter::create(vm, ${getter}, ${setter})";
+}
+
+sub GetOperationJSValue
+{
+    my ($interface, $operation, $globalObjectPtr) = @_;
+    my $functionName = GetFunctionName($interface, $interface->className, $operation);
+    return IsJSBuiltin($interface, $operation)
+        ? "JSFunction::create(vm, ${functionName}(vm), ${globalObjectPtr})"
+        : "JSFunction::create(vm, ${globalObjectPtr}, " . GetFunctionLength($operation) . ", \"" . $operation->name . "\"_s, ${functionName})";
+}
+
+sub GenerateLazyPropertyCallbacks
+{
+    my ($interface, $context, $jsValue, $contextNamePrefix, $conditional) = @_;
+
+    if ($conditional) {
+        my $conditionalString = $codeGenerator->GenerateConditionalStringFromAttributeValue($conditional);
+        push(@implContent, "#if ${conditionalString}\n");
+    }
+
+    my $contextName = $context->name;
+    $contextName =~ s/-/_/g; # For CSS property names
+    my $nameSuffix = $interface->className . "${contextNamePrefix}_${contextName}";
+
+    my $valueCallbackName = "create${nameSuffix}";
+    my $vm = ref($context) eq "IDLConstant" ? "" : " vm";
+    my $thisObject = ref($context) eq "IDLOperation" ? " thisObject" : "";
+    push(@implContent, "static JSValue ${valueCallbackName}(VM&${vm}, JSObject*${thisObject})\n");
+    push(@implContent, "{\n");
+    push(@implContent, "    return ${jsValue};\n");
+    push(@implContent, "}\n\n");
+
+    # FIXME: Share this callbacks between all interfaces to reduce WebCore binary size.
+    my $isEnabledCallbackName = "isEnabled${nameSuffix}";
+    push(@implContent, "static bool ${isEnabledCallbackName}(JSGlobalObject* globalObject)\n");
+    push(@implContent, "{\n");
+    push(@implContent, "    UNUSED_PARAM(globalObject);\n");
+    push(@implContent, "    return " . GenerateRuntimeEnableConditionalString($interface, $context, "globalObject") . ";\n");
+    push(@implContent, "}\n");
+
+    push(@implContent, "#endif\n") if $conditional;
+    push(@implContent, "\n");
+
+    return ($valueCallbackName, $isEnabledCallbackName);
+}
+
</ins><span class="cx"> sub GeneratePropertiesHashTable
</span><span class="cx"> {
</span><del>-    my ($object, $interface, $isInstance, $hashKeys, $hashSpecials, $hashValue1, $hashValue2, $conditionals, $readWriteConditionals, $runtimeEnabledOperations, $runtimeEnabledAttributes) = @_;
</del><ins>+    my ($interface, $contextName, $hashKeys, $hashSpecials, $hashValue1, $hashValue2, $conditionals, $readWriteConditionals) = @_;
</ins><span class="cx"> 
</span><del>-    # FIXME: These should be functions on $interface.
</del><span class="cx">     my $interfaceName = $interface->type->name;
</span><del>-    my $className = "JS$interfaceName";
-    
-    # - Add all properties in a hashtable definition
-    my $propertyCount = $isInstance ? InstancePropertyCount($interface) : PrototypePropertyCount($interface);
</del><ins>+    my $propertyCount = 0;
+    my $hasSetterOrReadonlyProperties = "false";
</ins><span class="cx"> 
</span><del>-    if (!$isInstance && NeedsConstructorProperty($interface)) {
-        die if !$propertyCount;
</del><ins>+    my $isConstructor = $contextName eq CONTEXT_NAME_CONSTRUCTOR;
+    my $isPrototype = $contextName eq CONTEXT_NAME_PROTOTYPE;
+    my $isInstance = $contextName eq CONTEXT_NAME_INSTANCE;
+
+    if ($isPrototype && NeedsConstructorProperty($interface)) {
</ins><span class="cx">         push(@$hashKeys, "constructor");
</span><span class="cx">         my $getter = "js" . $interfaceName . "Constructor";
</span><span class="cx">         push(@$hashValue1, $getter);
</span><span class="lines">@@ -3330,96 +3414,101 @@
</span><span class="cx"> 
</span><span class="cx">         push(@$hashValue2, "0");
</span><span class="cx">         push(@$hashSpecials, "static_cast<unsigned>(JSC::PropertyAttribute::DontEnum)");
</span><ins>+        $propertyCount++;
+        $hasSetterOrReadonlyProperties = "true";
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return 0 if !$propertyCount;
-
</del><span class="cx">     foreach my $attribute (@{$interface->attributes}) {
</span><del>-        next if ($attribute->isStatic);
</del><span class="cx">         next if AttributeShouldBeOnInstance($interface, $attribute) != $isInstance;
</span><ins>+        next if ($attribute->isStatic || 0) != $isConstructor;
</ins><span class="cx">         next if ($attribute->extendedAttributes->{PrivateIdentifier} and not $attribute->extendedAttributes->{PublicIdentifier});
</span><span class="cx"> 
</span><del>-        # Global objects add RuntimeEnabled attributes after creation so do not add them to the static table.
-        if ($isInstance && NeedsRuntimeCheck($interface, $attribute)) {
-            $propertyCount -= 1;
-            next;
-        }
-
</del><span class="cx">         my $name = $attribute->name;
</span><span class="cx">         push(@$hashKeys, $name);
</span><span class="cx"> 
</span><del>-        my $special = GetJSCAttributesForAttribute($interface, $attribute);
-        push(@$hashSpecials, $special);
-
-        if ($attribute->extendedAttributes->{DOMJIT}) {
-            push(@$hashValue1, "&DOMJITAttributeFor" . $interface->type->name . $codeGenerator->WK_ucfirst($attribute->name));
-        } else {
-            my $getter = GetAttributeGetterName($interface, $className, $attribute);
-            push(@$hashValue1, $getter);
-        }
-
-        if (IsReadonly($attribute) || $codeGenerator->IsConstructorType($attribute->type)) {
-            push(@$hashValue2, "0");
-        } else {
-            my $setter = GetAttributeSetterName($interface, $className, $attribute);
-            push(@$hashValue2, $setter);
-        }
-
</del><span class="cx">         my $conditional = $attribute->extendedAttributes->{Conditional};
</span><span class="cx">         $conditionals->{$name} = $conditional if $conditional;
</span><span class="cx">         my $readWriteConditional = $attribute->extendedAttributes->{ConditionallyReadWrite};
</span><span class="cx">         $readWriteConditionals->{$name} = $readWriteConditional if $readWriteConditional;
</span><span class="cx"> 
</span><del>-        my $needsRuntimeCheck = NeedsRuntimeCheck($interface, $attribute);
-        my $needsRuntimeReadWriteCheck = NeedsRuntimeReadWriteCheck($interface, $attribute);
-        
-        if ($needsRuntimeCheck && $needsRuntimeReadWriteCheck) {
-            die "Being both runtime enabled and runtime conditionally read-write is not yet supported (used on the '${name}' attribute of '${interfaceName}').\n";
</del><ins>+        if (NeedsRuntimeCheck($interface, $attribute)) {
+            assert("Using DOMJIT with runtime enabled attributes is not yet supported (used on the '${name}' attribute of '${interfaceName}').") if $attribute->extendedAttributes->{DOMJIT};
+            assert("Using ConditionallyReadWrite with runtime enabled attributes is not yet supported (used on the '${name}' attribute of '${interfaceName}').") if $readWriteConditional;
+
+            my $jsValue = GetAttributeJSValue($interface, $attribute);
+            my ($valueCallbackName, $isEnabledCallbackName) = GenerateLazyPropertyCallbacks($interface, $attribute, $jsValue, $contextName, $conditional);
+            push(@$hashValue1, $valueCallbackName);
+            push(@$hashValue2, $isEnabledCallbackName);
+        } else {
+            push(@$hashValue1, GetAttributeGetter($interface, $attribute));
+            push(@$hashValue2, GetAttributeSetter($interface, $attribute));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if ($needsRuntimeCheck || $needsRuntimeReadWriteCheck) {
-            push(@$runtimeEnabledAttributes, $attribute);
-        }
</del><ins>+        push(@$hashSpecials, StringifyJSCAttributes(GetJSCAttributesForAttribute($interface, $attribute)));
+        $propertyCount++;
+        $hasSetterOrReadonlyProperties = "true";
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     foreach my $operation (@{$interface->operations}) {
</span><ins>+        next if $interface->isCallback;
+        next if ($operation->isStatic || 0) != $isConstructor;
</ins><span class="cx">         next if ($operation->extendedAttributes->{PrivateIdentifier} and not $operation->extendedAttributes->{PublicIdentifier});
</span><del>-        next if ($operation->isStatic);
</del><span class="cx">         next if $operation->{overloadIndex} && $operation->{overloadIndex} > 1;
</span><span class="cx">         next if OperationShouldBeOnInstance($interface, $operation) != $isInstance;
</span><span class="cx">         next if $operation->name eq "[Symbol.Iterator]";
</span><span class="cx"> 
</span><del>-        # Global objects add RuntimeEnabled operations after creation so do not add them to the static table.
-        if ($isInstance && NeedsRuntimeCheck($interface, $operation)) {
-            $propertyCount -= 1;
-            next;
-        }
-
</del><span class="cx">         my $name = $operation->name;
</span><span class="cx">         push(@$hashKeys, $name);
</span><span class="cx"> 
</span><del>-        my $functionName = GetFunctionName($interface, $className, $operation);
-        push(@$hashValue1, $functionName);
</del><ins>+        my $conditional = GetConditionalForOperationConsideringOverloads($operation);
+        $conditionals->{$name} = $conditional if $conditional;
</ins><span class="cx"> 
</span><del>-        my $functionLength = GetFunctionLength($operation);
</del><ins>+        if (NeedsRuntimeCheck($interface, $operation)) {
+            assert("Using DOMJIT with runtime enabled operations is not yet supported (used on the '${name}' operation of '${interfaceName}').") if $operation->extendedAttributes->{DOMJIT};
</ins><span class="cx"> 
</span><del>-        if ($operation->extendedAttributes->{DOMJIT}) {
-            push(@$hashValue2, "&DOMJITSignatureFor" . $interface->type->name . $codeGenerator->WK_ucfirst($operation->name));
</del><ins>+            my $jsValue = GetOperationJSValue($interface, $operation, "thisObject->globalObject()");
+            my ($valueCallbackName, $isEnabledCallbackName) = GenerateLazyPropertyCallbacks($interface, $operation, $jsValue, $contextName, $conditional);
+            push(@$hashValue1, $valueCallbackName);
+            push(@$hashValue2, $isEnabledCallbackName);
</ins><span class="cx">         } else {
</span><del>-            push(@$hashValue2, $functionLength);
</del><ins>+            push(@$hashValue1, GetFunctionName($interface, $interface->className, $operation));
+            my $functionSignature = "&DOMJITSignatureFor" . $interface->type->name . $codeGenerator->WK_ucfirst($name);
+            push(@$hashValue2, $operation->extendedAttributes->{DOMJIT} ? $functionSignature : GetFunctionLength($operation));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        push(@$hashSpecials, ComputeFunctionSpecial($interface, $operation));
</del><ins>+        push(@$hashSpecials, StringifyJSCAttributes(ComputeFunctionSpecial($interface, $operation)));
+        $propertyCount++;
+    }
</ins><span class="cx"> 
</span><del>-        my $conditional = GetConditionalForOperationConsideringOverloads($operation);
</del><ins>+    foreach my $constant (@{$interface->constants}) {
+        next if $isInstance;
+
+        my $name = $constant->name;
+        push(@$hashKeys, $name);
+
+        my $implementedBy = $constant->extendedAttributes->{ImplementedBy};
+        $implIncludes{"${implementedBy}.h"} = 1 if $implementedBy;
+        my $conditional = $constant->extendedAttributes->{Conditional};
</ins><span class="cx">         $conditionals->{$name} = $conditional if $conditional;
</span><span class="cx"> 
</span><del>-        if (NeedsRuntimeCheck($interface, $operation)) {
-            push(@$runtimeEnabledOperations, $operation);
</del><ins>+        my $special = "";
+        if (NeedsRuntimeCheck($interface, $constant)) {
+            my $jsValue = "jsNumber(" . $constant->value . ")";
+            my ($valueCallbackName, $isEnabledCallbackName) = GenerateLazyPropertyCallbacks($interface, $constant, $jsValue, $contextName, $conditional);
+            push(@$hashValue1, $valueCallbackName);
+            push(@$hashValue2, $isEnabledCallbackName);
+            push(@$hashSpecials, "JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback");
+        } else {
+            push(@$hashValue1, $constant->value);
+            push(@$hashValue2, "0");
+            push(@$hashSpecials, "JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger");
</ins><span class="cx">         }
</span><ins>+
+        $propertyCount++;
+        $hasSetterOrReadonlyProperties = "true";
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return $propertyCount;
</del><ins>+    return ($propertyCount, $hasSetterOrReadonlyProperties);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> # This computes an effective overload set for a given operation / constructor,
</span><span class="lines">@@ -3987,7 +4076,7 @@
</span><span class="cx">             push(@conjuncts, "(jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext()->isSecureContext()"
</span><span class="cx">                 . "|| jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext()->allowsMediaDevices())");
</span><span class="cx">         } else {
</span><del>-            push(@conjuncts, "jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isSecureContext()");
</del><ins>+            push(@conjuncts, "jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext()->isSecureContext()");
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4000,7 +4089,7 @@
</span><span class="cx"> 
</span><span class="cx">         AddToImplIncludes("DOMWrapperWorld.h");
</span><span class="cx"> 
</span><del>-        push(@conjuncts, "worldForDOMObject(*this)." . ToMethodName($context->extendedAttributes->{EnabledForWorld}) . "()");
</del><ins>+        push(@conjuncts, "jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->world()." . ToMethodName($context->extendedAttributes->{EnabledForWorld}) . "()");
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if ($context->extendedAttributes->{EnabledBySetting}) {
</span><span class="lines">@@ -4346,115 +4435,11 @@
</span><span class="cx"> 
</span><span class="cx">     GenerateConstructorDeclaration(\@implContent, $className, $interface) if !$interface->extendedAttributes->{LegacyNoInterfaceObject};
</span><span class="cx"> 
</span><del>-    my @hashKeys = ();
-    my @hashValue1 = ();
-    my @hashValue2 = ();
-    my @hashSpecials = ();
-    my %conditionals = ();
-    my %readWriteConditionals = ();
-    my $hashName = $className . "Table";
-    my @runtimeEnabledOperations = ();
-    my @runtimeEnabledAttributes = ();
-    my @runtimeEnabledConstants = ();
-
-    # Generate hash table for properties on the instance.
-    my $numInstanceProperties = GeneratePropertiesHashTable($object, $interface, 1, \@hashKeys, \@hashSpecials, \@hashValue1, \@hashValue2, \%conditionals, \%readWriteConditionals, \@runtimeEnabledOperations, \@runtimeEnabledAttributes);
-    $object->GenerateHashTable($className, $hashName, $numInstanceProperties, \@hashKeys, \@hashSpecials, \@hashValue1, \@hashValue2, \%conditionals, \%readWriteConditionals, 0) if $numInstanceProperties > 0;
-
</del><span class="cx">     # - Add all interface object (aka constructor) properties (constants, static attributes, static operations).
</span><span class="cx">     if (!$interface->extendedAttributes->{LegacyNoInterfaceObject}) {
</span><del>-        my $hashSize = 0;
-        my $hashName = $className . "ConstructorTable";
</del><ins>+        # FIXME: Generate constructor's hash table in GenerateConstructorHelperMethods, removing ConstructorHasProperties and unused $protoClassName.
+        GenerateHashTable($interface, CONTEXT_NAME_CONSTRUCTOR);
</ins><span class="cx"> 
</span><del>-        my @hashKeys = ();
-        my @hashValue1 = ();
-        my @hashValue2 = ();
-        my @hashSpecials = ();
-        my %conditionals = ();
-        my %readWriteConditionals = ();
-
-        foreach my $constant (@{$interface->constants}) {
-            my $name = $constant->name;
-            push(@hashKeys, $name);
-            push(@hashValue1, $constant->value);
-            push(@hashValue2, "0");
-            push(@hashSpecials, "JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger");
-
-            my $implementedBy = $constant->extendedAttributes->{ImplementedBy};
-            $implIncludes{"${implementedBy}.h"} = 1 if $implementedBy;
-
-            my $conditional = $constant->extendedAttributes->{Conditional};
-            $conditionals{$name} = $conditional if $conditional;
-
-            if (NeedsRuntimeCheck($interface, $constant)) {
-                push(@runtimeEnabledConstants, $constant);
-            }
-
-            $hashSize++;
-        }
-
-        foreach my $attribute (@{$interface->attributes}) {
-            next unless ($attribute->isStatic);
-            my $name = $attribute->name;
-            push(@hashKeys, $name);
-
-            my @specials = ();
-            push(@specials, "JSC::PropertyAttribute::DontDelete") if IsLegacyUnforgeable($interface, $attribute);
-            push(@specials, "JSC::PropertyAttribute::ReadOnly") if IsReadonly($attribute);
-            push(@specials, "JSC::PropertyAttribute::DOMAttribute") if IsAcceleratedDOMAttribute($interface, $attribute);
-            push(@specials, "JSC::PropertyAttribute::DOMJITAttribute") if $attribute->extendedAttributes->{DOMJIT};
-            my $special = "static_cast<unsigned>(" . ((@specials > 0) ? join(" | ", @specials) : "0") . ")";
-            push(@hashSpecials, $special);
-
-            if ($attribute->extendedAttributes->{DOMJIT}) {
-                push(@hashValue1, "&DOMJITAttributeFor" . $interface->type->name . $codeGenerator->WK_ucfirst($attribute->name));
-            } else {
-                my $getter = GetAttributeGetterName($interface, $className, $attribute);
-                push(@hashValue1, $getter);
-            }
-
-            if (IsReadonly($attribute)) {
-                push(@hashValue2, "0");
-            } else {
-                my $setter = GetAttributeSetterName($interface, $className, $attribute);
-                push(@hashValue2, $setter);
-            }
-
-            my $conditional = $attribute->extendedAttributes->{Conditional};
-            $conditionals{$name} = $conditional if $conditional;
-
-            my $readWriteConditional = $attribute->extendedAttributes->{ConditionallyReadWrite};
-            $readWriteConditionals{$name} = $readWriteConditional if $readWriteConditional;
-
-            $hashSize++;
-        }
-
-        foreach my $operation (@{$interface->operations}) {
-            next unless ($operation->isStatic);
-            next if $operation->{overloadIndex} && $operation->{overloadIndex} > 1;
-            my $name = $operation->name;
-            push(@hashKeys, $name);
-
-            my $functionName = GetFunctionName($interface, $className, $operation);
-            push(@hashValue1, $functionName);
-
-            my $functionLength = GetFunctionLength($operation);
-            if ($operation->extendedAttributes->{DOMJIT}) {
-                push(@hashValue2, "DOMJITFunctionFor" . $interface->type->name . $codeGenerator->WK_ucfirst($operation->name));
-            } else {
-                push(@hashValue2, $functionLength);
-            }
-
-            push(@hashSpecials, ComputeFunctionSpecial($interface, $operation));
-
-            my $conditional = $operation->extendedAttributes->{Conditional};
-            $conditionals{$name} = $conditional if $conditional;
-
-            $hashSize++;
-        }
-
-        $object->GenerateHashTable($className, $hashName, $hashSize, \@hashKeys, \@hashSpecials, \@hashValue1, \@hashValue2, \%conditionals, \%readWriteConditionals, 1) if $hashSize > 0;
-
</del><span class="cx">         push(@implContent, $codeGenerator->GenerateCompileTimeCheckForEnumsIfNeeded($interface));
</span><span class="cx"> 
</span><span class="cx">         my $protoClassName = "${className}Prototype";
</span><span class="lines">@@ -4464,94 +4449,33 @@
</span><span class="cx">         GenerateConstructorDefinitions(\@implContent, $className, $protoClassName, $legacyFactoryFunction, $interface, "GeneratingLegacyFactoryFunction") if $legacyFactoryFunction;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    # - Add functions and constants to a hashtable definition
-
-    $hashName = $className . "PrototypeTable";
-
-    @hashKeys = ();
-    @hashValue1 = ();
-    @hashValue2 = ();
-    @hashSpecials = ();
-    %conditionals = ();
-    %readWriteConditionals = ();
-    @runtimeEnabledOperations = ();
-    @runtimeEnabledAttributes = ();
-
-    # Generate hash table for properties on the prototype.
-    my $numPrototypeProperties = GeneratePropertiesHashTable($object, $interface, 0,
-        \@hashKeys, \@hashSpecials,
-        \@hashValue1, \@hashValue2,
-        \%conditionals, \%readWriteConditionals,
-        \@runtimeEnabledOperations, \@runtimeEnabledAttributes);
-
-    my $hashSize = $numPrototypeProperties;
-
-    foreach my $constant (@{$interface->constants}) {
-        my $name = $constant->name;
-
-        push(@hashKeys, $name);
-        push(@hashValue1, $constant->value);
-        push(@hashValue2, "0");
-        push(@hashSpecials, "JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger");
-
-        my $conditional = $constant->extendedAttributes->{Conditional};
-        $conditionals{$name} = $conditional if $conditional;
-
-        $hashSize++;
-    }
-
</del><span class="cx">     if (!$interface->isNamespaceObject) {
</span><del>-        my $justGenerateValueArray = !IsDOMGlobalObject($interface);
-
-        $object->GenerateHashTable($className, $hashName, $hashSize, \@hashKeys, \@hashSpecials, \@hashValue1, \@hashValue2, \%conditionals, \%readWriteConditionals, $justGenerateValueArray);
-
-        my $prototypeHashTable = $justGenerateValueArray ? "nullptr" : "&${className}PrototypeTable";
</del><ins>+        my $prototypeHashTable = GenerateHashTable($interface, CONTEXT_NAME_PROTOTYPE);
</ins><span class="cx">         push(@implContent, "const ClassInfo ${className}Prototype::s_info = { \"${visibleInterfaceName}\", &Base::s_info, ${prototypeHashTable}, nullptr, CREATE_METHOD_TABLE(${className}Prototype) };\n\n");
</span><span class="cx"> 
</span><span class="cx">         push(@implContent, "void ${className}Prototype::finishCreation(VM& vm)\n");
</span><span class="cx">         push(@implContent, "{\n");
</span><span class="cx">         push(@implContent, "    Base::finishCreation(vm);\n");
</span><del>-    }
</del><span class="cx"> 
</span><del>-    if (PrototypeHasStaticPropertyTable($interface) && !IsGlobalInterface($interface) && !$interface->isNamespaceObject) {
-        push(@implContent, "    reifyStaticProperties(vm, ${className}::info(), ${className}PrototypeTableValues, *this);\n");
-
-        my @runtimeEnabledProperties = @runtimeEnabledOperations;
-        push(@runtimeEnabledProperties, @runtimeEnabledAttributes);
-        push(@runtimeEnabledProperties, @runtimeEnabledConstants);
-
-        if (@runtimeEnabledProperties) {
-            push(@implContent, "    bool hasDisabledRuntimeProperties = false;\n");
</del><ins>+        if ($prototypeHashTable ne "nullptr" && !IsGlobalInterface($interface)) {
+            push(@implContent, "    reifyStaticProperties(vm, ${className}::info(), ${className}PrototypeTableValues, *this);\n");
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        foreach my $operationOrAttribute (@runtimeEnabledProperties) {
-            my $conditionalString = $codeGenerator->GenerateConditionalString($operationOrAttribute);
-            push(@implContent, "#if ${conditionalString}\n") if $conditionalString;
-            my $runtimeEnableConditionalString = GenerateRuntimeEnableConditionalString($interface, $operationOrAttribute, "globalObject()");
-            my $name = $operationOrAttribute->name;
-            push(@implContent, "    if (!${runtimeEnableConditionalString}) {\n");
-            push(@implContent, "        hasDisabledRuntimeProperties = true;\n");
-            push(@implContent, "        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>(\"$name\"), strlen(\"$name\"));\n");
-            push(@implContent, "        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);\n");
-            push(@implContent, "        DeletePropertySlot slot;\n");
-            push(@implContent, "        JSObject::deleteProperty(this, globalObject(), propertyName, slot);\n");
-            push(@implContent, "    }\n");
-            push(@implContent, "#endif\n") if $conditionalString;
-        }
-
-        foreach my $attribute (@runtimeEnabledAttributes) {
</del><ins>+        foreach my $attribute (@{$interface->attributes}) {
</ins><span class="cx">             if (NeedsRuntimeReadWriteCheck($interface, $attribute)) {
</span><span class="cx">                 AddToImplIncludes("WebCoreJSClientData.h");
</span><span class="cx">                 my $runtimeEnableConditionalString = GenerateRuntimeEnableConditionalString($interface, $attribute, "globalObject()");
</span><span class="cx"> 
</span><span class="cx">                 my $attributeName = $attribute->name;
</span><ins>+                # FIXME: Simplify this by calling reifyStaticProperty() on a HashTableValue that has been transformed to read-only.
</ins><span class="cx">                 my $getter = GetAttributeGetterName($interface, $className, $attribute);
</span><span class="cx">                 my $setter = "nullptr";
</span><del>-                my $jscAttributes = GetJSCAttributesForAttribute($interface, $attribute);
</del><ins>+                my $jscAttributes = StringifyJSCAttributes(GetJSCAttributesForAttribute($interface, $attribute)) . " | JSC::PropertyAttribute::ReadOnly";
+                assert("Being both runtime enabled and runtime conditionally read-write is not yet supported (used on the '${attributeName}' attribute of '${visibleInterfaceName}').") if NeedsRuntimeCheck($interface, $attribute);
</ins><span class="cx"> 
</span><span class="cx">                 my $conditionalString = $codeGenerator->GenerateConditionalString($attribute);
</span><span class="cx">                 push(@implContent, "#if ${conditionalString}\n") if $conditionalString;
</span><del>-                push(@implContent, "    // Adding back attribute, but as readonly, after removing the read-write variant above. \n");
</del><ins>+                push(@implContent, "    // Shadow read-write variant from the static hash table.\n");
</ins><span class="cx">                 push(@implContent, "    if (!${runtimeEnableConditionalString})\n");
</span><span class="cx">                 if (IsAcceleratedDOMAttribute($interface, $attribute)) {
</span><span class="cx">                     my $classForThis = "${className}::info()";
</span><span class="lines">@@ -4564,49 +4488,31 @@
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (@runtimeEnabledProperties) {
-            push(@implContent, "    if (hasDisabledRuntimeProperties && structure()->isDictionary())\n");
-            push(@implContent, "        flattenDictionaryObject(vm);\n");
-        }
-
-        foreach my $operation (@{$interface->operations}) {
-            next unless ($operation->extendedAttributes->{PrivateIdentifier});
-            AddToImplIncludes("WebCoreJSClientData.h");
-            my $conditionalString = $codeGenerator->GenerateConditionalString($operation);
-            push(@implContent, "#if ${conditionalString}\n") if $conditionalString;
-            push(@implContent, "    putDirect(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames()." . $operation->name . "PrivateName(), JSFunction::create(vm, globalObject(), 0, String(), " . GetFunctionName($interface, $className, $operation) . "), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);\n");
-            push(@implContent, "#endif\n") if $conditionalString;
-        }
-
</del><span class="cx">         if (InterfaceNeedsIterator($interface)) {
</span><span class="cx">             AddToImplIncludes("<JavaScriptCore/BuiltinNames.h>");
</span><span class="cx">             if (IsKeyValueIterableInterface($interface) or $interface->mapLike or $interface->setLike) {
</span><del>-                push(@implContent, "    putDirect(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, vm.propertyNames->builtinNames().entriesPublicName()), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));\n");
</del><ins>+                push(@implContent, "    auto& entries = vm.propertyNames->builtinNames().entriesPublicName();\n");
+                push(@implContent, "    reifyStaticProperty(vm, info(), entries, *info()->staticPropHashTable->entry(entries), *this);\n");
+                push(@implContent, "    putDirectWithoutTransition(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, entries), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));\n");
</ins><span class="cx">             } else {
</span><del>-                AddToImplIncludes("<JavaScriptCore/ArrayPrototype.h>");
-                push(@implContent, "    putDirect(vm, vm.propertyNames->iteratorSymbol, globalObject()->arrayPrototype()->getDirect(vm, vm.propertyNames->builtinNames().valuesPrivateName()), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));\n");
</del><ins>+                push(@implContent, "    putDirectWithoutTransition(vm, vm.propertyNames->iteratorSymbol, globalObject()->arrayProtoValuesFunction(), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));\n");
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">         push(@implContent, "    addValueIterableMethods(*globalObject(), *this);\n") if $interface->iterable and !IsKeyValueIterableInterface($interface);
</span><span class="cx"> 
</span><span class="cx">         addUnscopableProperties($interface);
</span><del>-    }
</del><span class="cx"> 
</span><del>-    assert("JSC_TO_STRING_TAG_WITHOUT_TRANSITION() requires strings two or more characters long") if length($visibleInterfaceName) < 2;
</del><ins>+        assert("JSC_TO_STRING_TAG_WITHOUT_TRANSITION() requires strings two or more characters long.") if length($visibleInterfaceName) < 2;
+        push(@implContent, "    JSC_TO_STRING_TAG_WITHOUT_TRANSITION();\n");
</ins><span class="cx"> 
</span><del>-    if (!$interface->isNamespaceObject) {
-        push(@implContent, "    JSC_TO_STRING_TAG_WITHOUT_TRANSITION();\n");
</del><ins>+        GeneratePrivateIdentifiers($interface, CONTEXT_NAME_PROTOTYPE);
+
</ins><span class="cx">         push(@implContent, "}\n\n");
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    # - Initialize static ClassInfo object
-    push(@implContent, "const ClassInfo $className" . "::s_info = { \"${visibleInterfaceName}\", &Base::s_info, ");
</del><ins>+    my $instanceHashTable = GenerateHashTable($interface, CONTEXT_NAME_INSTANCE);
+    push(@implContent, "const ClassInfo ${className}::s_info = { \"${visibleInterfaceName}\", &Base::s_info, ${instanceHashTable}");
</ins><span class="cx"> 
</span><del>-    if ($numInstanceProperties > 0) {
-        push(@implContent, "&${className}Table");
-    } else {
-        push(@implContent, "nullptr");
-    }
</del><span class="cx">     if ($interface->extendedAttributes->{DOMJIT}) {
</span><span class="cx">         push(@implContent, "\n");
</span><span class="cx">         push(@implContent, "#if ENABLE(JIT)\n");
</span><span class="lines">@@ -4672,78 +4578,8 @@
</span><span class="cx">         push(@implContent, "    putDirect(vm, vm.propertyNames->toPrimitiveSymbol, jsUndefined(), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);\n");
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    # Support for RuntimeEnabled attributes on instances.
-    foreach my $attribute (@{$interface->attributes}) {
-        next unless NeedsRuntimeCheck($interface, $attribute);
-        next unless AttributeShouldBeOnInstance($interface, $attribute);
</del><ins>+    GeneratePrivateIdentifiers($interface, CONTEXT_NAME_INSTANCE);
</ins><span class="cx"> 
</span><del>-        AddToImplIncludes("WebCoreJSClientData.h");
-        my $runtimeEnableConditionalString = GenerateRuntimeEnableConditionalString($interface, $attribute, "globalObject()");
-        my $attributeName = $attribute->name;
-        my $getter = GetAttributeGetterName($interface, $className, $attribute);
-        my $setter = IsReadonly($attribute) || $codeGenerator->IsConstructorType($attribute->type) ? "nullptr" : GetAttributeSetterName($interface, $className, $attribute);
-        my $jscAttributes = GetJSCAttributesForAttribute($interface, $attribute);
-        my $isPrivateAndPublic = $attribute->extendedAttributes->{PublicIdentifier} && $attribute->extendedAttributes->{PrivateIdentifier};
-
-        my $conditionalString = $codeGenerator->GenerateConditionalString($attribute);
-        push(@implContent, "#if ${conditionalString}\n") if $conditionalString;
-        push(@implContent, "    if (${runtimeEnableConditionalString})");
-        push(@implContent, " {") if $isPrivateAndPublic;
-        push(@implContent, "\n");
-        assert("CustomGetterSetter is not allowed for DOMAttribute. DOMAttributeGetterSetter must be used.") if IsAcceleratedDOMAttribute($interface, $attribute);
-
-        if ($attribute->extendedAttributes->{PublicIdentifier} || !$attribute->extendedAttributes->{PrivateIdentifier}) {
-            push(@implContent, "        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames()." . $attributeName . "PublicName(), CustomGetterSetter::create(vm, $getter, $setter), attributesForStructure($jscAttributes));\n");
-        }
-        if ($attribute->extendedAttributes->{PrivateIdentifier}) {
-            push(@implContent, "        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames()." . $attributeName . "PrivateName(), CustomGetterSetter::create(vm, $getter, $setter), attributesForStructure($jscAttributes));\n");
-        }
-
-        push(@implContent, "    }\n") if $isPrivateAndPublic;
-        push(@implContent, "#endif\n") if $conditionalString;
-    }
-
-    # Support PrivateIdentifier attributes on instances.
-    foreach my $attribute (@{$interface->attributes}) {
-        next if NeedsRuntimeCheck($interface, $attribute);
-        next unless $attribute->extendedAttributes->{PrivateIdentifier};
-        next unless AttributeShouldBeOnInstance($interface, $attribute);
-
-        AddToImplIncludes("WebCoreJSClientData.h");
-        my $conditionalString = $codeGenerator->GenerateConditionalString($attribute);
-        my $attributeName = $attribute->name;
-        my $getter = GetAttributeGetterName($interface, $className, $attribute);
-
-        push(@implContent, "#if ${conditionalString}\n") if $conditionalString;
-        assert("CustomGetterSetter is not allowed for DOMAttribute. DOMAttributeGetterSetter must be used.") if IsAcceleratedDOMAttribute($interface, $attribute);
-        push(@implContent, "    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames()." . $attributeName . "PrivateName(), CustomGetterSetter::create(vm, $getter, nullptr), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly));\n");
-        push(@implContent, "#endif\n") if $conditionalString;
-    }
-
-    # Support for RuntimeEnabled operations on instances.
-    foreach my $operation (@{$interface->operations}) {
-        next unless NeedsRuntimeCheck($interface, $operation);
-        next unless OperationShouldBeOnInstance($interface, $operation);
-        next if $operation->{overloadIndex} && $operation->{overloadIndex} > 1;
-
-        AddToImplIncludes("WebCoreJSClientData.h");
-        my $runtimeEnableConditionalString = GenerateRuntimeEnableConditionalString($interface, $operation, "globalObject()");
-        my $functionName = $operation->name;
-        my $implementationFunction = GetFunctionName($interface, $className, $operation);
-        my $functionLength = GetFunctionLength($operation);
-        my $jsAttributes = ComputeFunctionSpecial($interface, $operation);
-
-        my $conditionalString = $codeGenerator->GenerateConditionalString($operation);
-        push(@implContent, "#if ${conditionalString}\n") if $conditionalString;
-        push(@implContent, "    if (${runtimeEnableConditionalString})\n");
-        my $propertyName = "static_cast<JSVMClientData*>(vm.clientData)->builtinNames()." . $functionName . ($operation->extendedAttributes->{PrivateIdentifier} ? "PrivateName()" : "PublicName()");
-        if (IsJSBuiltin($interface, $operation)) {
-            push(@implContent, "        putDirectBuiltinFunction(vm, this, $propertyName, $implementationFunction(vm), attributesForStructure($jsAttributes));\n");
-        } else {
-            push(@implContent, "        putDirectNativeFunction(vm, this, $propertyName, $functionLength, $implementationFunction, NoIntrinsic, attributesForStructure($jsAttributes));\n");
-        }
-        push(@implContent, "#endif\n") if $conditionalString;
-    }
</del><span class="cx">     push(@implContent, "    vm.heap.reportExtraMemoryAllocated(wrapped().memoryCost());\n") if $interface->extendedAttributes->{ReportExtraMemoryCost};
</span><span class="cx">     push(@implContent, "}\n\n");
</span><span class="cx"> 
</span><span class="lines">@@ -6434,33 +6270,8 @@
</span><span class="cx">     if ($numConstants > 0) {
</span><span class="cx">         GenerateConstructorDeclaration($contentRef, $className, $interfaceOrCallback, $name);
</span><span class="cx"> 
</span><del>-        my $hashSize = 0;
-        my $hashName = $className . "ConstructorTable";
</del><ins>+        GenerateHashTable($interfaceOrCallback, CONTEXT_NAME_CONSTRUCTOR);
</ins><span class="cx"> 
</span><del>-        my @hashKeys = ();
-        my @hashValue1 = ();
-        my @hashValue2 = ();
-        my @hashSpecials = ();
-        my %conditionals = ();
-        my %readWriteConditionals = ();
-
-        foreach my $constant (@{$constants}) {
-            my $name = $constant->name;
-            push(@hashKeys, $name);
-            push(@hashValue1, $constant->value);
-            push(@hashValue2, "0");
-            push(@hashSpecials, "JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger");
-
-            my $implementedBy = $constant->extendedAttributes->{ImplementedBy};
-            $implIncludes{"${implementedBy}.h"} = 1 if $implementedBy;
-
-            my $conditional = $constant->extendedAttributes->{Conditional};
-            $conditionals{$name} = $conditional if $conditional;
-
-            $hashSize++;
-        }
-        $object->GenerateHashTable($className, $hashName, $hashSize, \@hashKeys, \@hashSpecials, \@hashValue1, \@hashValue2, \%conditionals, \%readWriteConditionals, 1) if $hashSize > 0;
-
</del><span class="cx">         push(@$contentRef, $codeGenerator->GenerateCompileTimeCheckForEnumsIfNeeded($interfaceOrCallback));
</span><span class="cx"> 
</span><span class="cx">         GenerateConstructorDefinitions($contentRef, $className, "", $visibleName, $interfaceOrCallback);
</span><span class="lines">@@ -7221,8 +7032,6 @@
</span><span class="cx">     my $packedSize = scalar @{$keys};
</span><span class="cx">     push(@implContent, "\nstatic const HashTableValue $nameEntries\[\] =\n\{\n");
</span><span class="cx"> 
</span><del>-    my $hasSetter = "false";
-
</del><span class="cx">     my $i = 0;
</span><span class="cx">     foreach my $key (@{$keys}) {
</span><span class="cx">         my $firstTargetType;
</span><span class="lines">@@ -7248,10 +7057,12 @@
</span><span class="cx">             $firstTargetType = "";
</span><span class="cx">         } elsif ("@$specials[$i]" =~ m/DOMJITAttribute/) {
</span><span class="cx">             $firstTargetType = "static_cast<const JSC::DOMJIT::GetterSetter*>";
</span><ins>+        } elsif ("@$specials[$i]" =~ m/PropertyCallback/) {
+            $firstTargetType = "static_cast<LazyPropertyCallback>";
+            $secondTargetType = "static_cast<IsLazyPropertyEnabledCallback>";
</ins><span class="cx">         } else {
</span><span class="cx">             $firstTargetType = "static_cast<PropertySlot::GetValueFunc>";
</span><span class="cx">             $secondTargetType = "static_cast<PutPropertySlot::PutValueFunc>";
</span><del>-            $hasSetter = "true";
</del><span class="cx">         }
</span><span class="cx">         if ("@$specials[$i]" =~ m/ConstantInteger/) {
</span><span class="cx">             push(@implContent, "    { \"$key\", @$specials[$i], NoIntrinsic, { (long long)" . $firstTargetType . "(@$value1[$i]) } },\n");
</span><span class="lines">@@ -7280,52 +7091,28 @@
</span><span class="cx"> 
</span><span class="cx">     push(@implContent, "    { 0, 0, NoIntrinsic, { 0, 0 } }\n") if (!$packedSize);
</span><span class="cx">     push(@implContent, "};\n\n");
</span><del>-
-    return $hasSetter;
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub GenerateHashTable
</span><span class="cx"> {
</span><del>-    my $object = shift;
</del><ins>+    my ($interface, $contextName) = @_;
</ins><span class="cx"> 
</span><del>-    my $className = shift;
-    my $name = shift;
-    my $size = shift;
-    my $keys = shift;
-    my $specials = shift;
-    my $value1 = shift;
-    my $value2 = shift;
-    my $conditionals = shift;
-    my $readWriteConditionals = shift;
-    my $justGenerateValueArray = shift;
</del><ins>+    my @keys = ();
+    my @specials = ();
+    my @value1 = ();
+    my @value2 = ();
+    my %conditionals = ();
+    my %readWriteConditionals = ();
</ins><span class="cx"> 
</span><ins>+    my ($size, $hasSetterOrReadonlyProperties) = GeneratePropertiesHashTable($interface, $contextName, \@keys, \@specials, \@value1, \@value2, \%conditionals, \%readWriteConditionals);
+    return "nullptr" if $size == 0;
+
+    push(@implContent, "/* Hash table for ${contextName} */\n");
+
+    my $name = $interface->className . "${contextName}Table";
</ins><span class="cx">     my $nameEntries = "${name}Values";
</span><del>-    $nameEntries =~ s/:/_/g;
</del><span class="cx">     my $nameIndex = "${name}Index";
</span><del>-    $nameIndex =~ s/:/_/g;
</del><span class="cx"> 
</span><del>-    if (($name =~ /Prototype/) or ($name =~ /Constructor/)) {
-        my $type = $name;
-        my $implClass;
-
-        if ($name =~ /Prototype/) {
-            $type =~ s/Prototype.*//;
-            $implClass = $type; $implClass =~ s/Wrapper$//;
-            push(@implContent, "/* Hash table for prototype */\n");
-        } else {
-            $type =~ s/Constructor.*//;
-            $implClass = $type; $implClass =~ s/Constructor$//;
-            push(@implContent, "/* Hash table for constructor */\n");
-        }
-    } else {
-        push(@implContent, "/* Hash table */\n");
-    }
-
-    if ($justGenerateValueArray) {
-        GenerateHashTableValueArray($keys, $specials, $value1, $value2, $conditionals, $readWriteConditionals, $nameEntries) if $size;
-        return;
-    }
-
</del><span class="cx">     # Generate size data for compact' size hash table
</span><span class="cx"> 
</span><span class="cx">     my @table = ();
</span><span class="lines">@@ -7338,7 +7125,7 @@
</span><span class="cx">     my $numEntries = $compactSize;
</span><span class="cx"> 
</span><span class="cx">     my $i = 0;
</span><del>-    foreach (@{$keys}) {
</del><ins>+    foreach (@keys) {
</ins><span class="cx">         my $depth = 0;
</span><span class="cx">         my $h = Hasher::GenerateHashValue($_) % $numEntries;
</span><span class="cx"> 
</span><span class="lines">@@ -7370,14 +7157,55 @@
</span><span class="cx">     }
</span><span class="cx">     push(@implContent, "};\n\n");
</span><span class="cx"> 
</span><del>-    # Dump the hash table
-    my $hasSetter = GenerateHashTableValueArray($keys, $specials, $value1, $value2, $conditionals, $readWriteConditionals, $nameEntries);
-    my $packedSize = scalar @{$keys};
</del><ins>+    GenerateHashTableValueArray(\@keys, \@specials, \@value1, \@value2, \%conditionals, \%readWriteConditionals, $nameEntries);
</ins><span class="cx"> 
</span><ins>+    my $packedSize = scalar(@keys);
</ins><span class="cx">     my $compactSizeMask = $numEntries - 1;
</span><del>-    push(@implContent, "static const HashTable $name = { $packedSize, $compactSizeMask, $hasSetter, ${className}::info(), $nameEntries, $nameIndex };\n");
</del><ins>+    my $classForThis = $contextName eq CONTEXT_NAME_CONSTRUCTOR ? "nullptr" : $interface->className . "::info()";
+    push(@implContent, "static const HashTable $name = { $packedSize, $compactSizeMask, $hasSetterOrReadonlyProperties, $classForThis, $nameEntries, $nameIndex };\n");
+
+    return "&${name}";
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub GeneratePrivateIdentifiers
+{
+    my ($interface, $contextName) = @_;
+
+    my $isConstructor = $contextName eq CONTEXT_NAME_CONSTRUCTOR;
+    my $isInstance = $contextName eq CONTEXT_NAME_INSTANCE;
+
+    foreach my $operationOrAttribute (@{$interface->operations}, @{$interface->attributes}) {
+        next if !$operationOrAttribute->extendedAttributes->{PrivateIdentifier};
+        next if ($operationOrAttribute->isStatic || 0) != $isConstructor;
+        next if ShouldBeOnInstance($interface, $operationOrAttribute) != $isInstance;
+
+        assert("Using DOMJIT with private identifiers is not yet supported.") if $operationOrAttribute->extendedAttributes->{DOMJIT};
+
+        my $conditional = $operationOrAttribute->extendedAttributes->{Conditional};
+        if ($conditional) {
+            my $conditionalString = $codeGenerator->GenerateConditionalStringFromAttributeValue($conditional);
+            push(@implContent, "#if ${conditionalString}\n");
+        }
+
+        if (NeedsRuntimeCheck($interface, $operationOrAttribute)) {
+            my $runtimeEnableConditionalString = GenerateRuntimeEnableConditionalString($interface, $operationOrAttribute, "globalObject()");
+            push(@implContent, "    if (${runtimeEnableConditionalString})\n");
+            push(@implContent, "    ");
+        }
+
+        AddToImplIncludes("WebCoreJSClientData.h");
+        my $propertyName = "static_cast<JSVMClientData*>(vm.clientData)->builtinNames()." . $operationOrAttribute->name . "PrivateName()";
+        if (ref($operationOrAttribute) eq "IDLAttribute") {
+            my $jscAttribute = $codeGenerator->IsConstructorType($operationOrAttribute->type) ? "JSC::PropertyAttribute::CustomValue" : "JSC::PropertyAttribute::CustomAccessor";
+            push(@implContent, "    putDirectCustomAccessor(vm, ${propertyName}, " . GetAttributeJSValue($interface, $operationOrAttribute) . ", static_cast<unsigned>(${jscAttribute}));\n");
+        } else {
+            push(@implContent, "    putDirect(vm, ${propertyName}, " . GetOperationJSValue($interface, $operationOrAttribute, "this->globalObject()") . ");\n");
+        }
+
+        push(@implContent, "#endif\n") if $conditional;
+    }
+}
+
</ins><span class="cx"> sub SubstituteHeader
</span><span class="cx"> {
</span><span class="cx">     # Internal macOS SDKs up to 10.15 have non-suffixed headers in their WebKitAdditions, requiring the addition of the suffix to build successfully.
</span><span class="lines">@@ -7536,7 +7364,7 @@
</span><span class="cx">     push(@$outputArray, "\n");
</span><span class="cx">     push(@$outputArray, "    void finishCreation(JSC::VM&);\n");
</span><span class="cx"> 
</span><del>-    $structureFlags{"JSC::HasStaticPropertyTable"} = 1 if PrototypeHasStaticPropertyTable($interface) && IsGlobalInterface($interface);
</del><ins>+    $structureFlags{"JSC::HasStaticPropertyTable"} = 1 if PrototypeHasProperties($interface);
</ins><span class="cx">     $structureFlags{"JSC::IsImmutablePrototypeExoticObject"} = 1 if $interface->extendedAttributes->{IsImmutablePrototypeExoticObjectOnPrototype};
</span><span class="cx"> 
</span><span class="cx">     # structure flags
</span><span class="lines">@@ -7688,63 +7516,6 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub ConstructorHasProperties
-{
-    my $interface = shift;
-
-    foreach my $constant (@{$interface->constants}) {
-        return 1;
-    }
-
-    foreach my $attribute (@{$interface->attributes}) {
-        next unless ($attribute->isStatic);
-        return 1;
-    }
-
-    foreach my $operation (@{$interface->operations}) {
-        next unless ($operation->isStatic);
-        return 1;
-    }
-
-    return 0;
-}
-
-sub GetRuntimeEnabledStaticProperties
-{
-    my ($interface) = @_;
-
-    my @runtimeEnabledProperties = ();
-
-    foreach my $attribute (@{$interface->attributes}) {
-        next if AttributeShouldBeOnInstance($interface, $attribute) != 0;
-        next if not $attribute->isStatic;
-
-        if (NeedsRuntimeCheck($interface, $attribute)) {
-            push(@runtimeEnabledProperties, $attribute);
-        }
-    }
-
-    foreach my $constant (@{$interface->constants}) {
-        if (NeedsRuntimeCheck($interface, $constant)) {
-            push(@runtimeEnabledProperties, $constant);
-        }
-    }
-
-    foreach my $operation (@{$interface->operations}) {
-        next if ($operation->extendedAttributes->{PrivateIdentifier} and not $operation->extendedAttributes->{PublicIdentifier});
-        next if $operation->{overloadIndex} && $operation->{overloadIndex} > 1;
-        next if OperationShouldBeOnInstance($interface, $operation) != 0;
-        next if $operation->name eq "[Symbol.Iterator]";
-        next if not $operation->isStatic;
-
-        if (NeedsRuntimeCheck($interface, $operation)) {
-            push(@runtimeEnabledProperties, $operation);
-        }
-    }
-
-    return @runtimeEnabledProperties;
-}
-
</del><span class="cx"> sub GenerateConstructorHelperMethods
</span><span class="cx"> {
</span><span class="cx">     my ($outputArray, $className, $protoClassName, $visibleInterfaceName, $interface, $generatingLegacyFactoryFunction) = @_;
</span><span class="lines">@@ -7761,8 +7532,19 @@
</span><span class="cx">         $leastConstructorLength = 0;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    push(@$outputArray, "template<> const ClassInfo ${constructorClassName}::s_info = { \"${visibleInterfaceName}\", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(${constructorClassName}) };\n\n");
</del><ins>+    my $constructorHashTable = "nullptr";
+    unless ($generatingLegacyFactoryFunction) {
+        my $structureFlags = "Base::StructureFlags";
+        if (ConstructorHasProperties($interface)) {
+            $constructorHashTable = "&${className}ConstructorTable";
+            $structureFlags .= " | JSC::HasStaticPropertyTable";
+        }
</ins><span class="cx"> 
</span><ins>+        push(@$outputArray, "template<> const unsigned ${constructorClassName}::StructureFlags = ${structureFlags};\n");
+    }
+
+    push(@$outputArray, "template<> const ClassInfo ${constructorClassName}::s_info = { \"${visibleInterfaceName}\", &Base::s_info, ${constructorHashTable}, nullptr, CREATE_METHOD_TABLE(${constructorClassName}) };\n\n");
+
</ins><span class="cx">     # If the interface has a parent interface which does not have [LegacyNoInterfaceObject], then use its interface object as prototype,
</span><span class="cx">     # otherwise use FunctionPrototype: http://heycam.github.io/webidl/#interface-object
</span><span class="cx">     push(@$outputArray, "template<> JSValue ${constructorClassName}::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)\n");
</span><span class="lines">@@ -7796,6 +7578,7 @@
</span><span class="cx">     } elsif ($interface->isCallback) {
</span><span class="cx">         push(@$outputArray, "    UNUSED_PARAM(globalObject);\n");
</span><span class="cx">     } elsif ($interface->isNamespaceObject) {
</span><ins>+        push(@$outputArray, "    UNUSED_PARAM(globalObject);\n");
</ins><span class="cx">         push(@$outputArray, "    JSC_TO_STRING_TAG_WITHOUT_TRANSITION();\n");
</span><span class="cx">     } else {
</span><span class="cx">         push(@$outputArray, "    putDirect(vm, vm.propertyNames->prototype, ${className}::prototype(vm, globalObject), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);\n");
</span><span class="lines">@@ -7814,26 +7597,10 @@
</span><span class="cx">         push(@$outputArray, "    putDirect(vm, vm.propertyNames->length, jsNumber(${leastConstructorLength}), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);\n");
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    my $classForThis = "${className}::info()";
-    if ($interface->isCallback) {
-        $classForThis = "nullptr";
-    }
-    push(@$outputArray, "    reifyStaticProperties(vm, ${classForThis}, ${className}ConstructorTableValues, *this);\n") if ConstructorHasProperties($interface);
</del><ins>+    GeneratePrivateIdentifiers($interface, CONTEXT_NAME_CONSTRUCTOR);
</ins><span class="cx"> 
</span><del>-    my @runtimeEnabledProperties = GetRuntimeEnabledStaticProperties($interface);
-
-    foreach my $operationOrAttribute (@runtimeEnabledProperties) {
-        my $conditionalString = $codeGenerator->GenerateConditionalString($operationOrAttribute);
-        push(@$outputArray, "#if ${conditionalString}\n") if $conditionalString;
-        my $runtimeEnableConditionalString = GenerateRuntimeEnableConditionalString($interface, $operationOrAttribute, "&globalObject");
-        my $name = $operationOrAttribute->name;
-        push(@$outputArray, "    if (!${runtimeEnableConditionalString}) {\n");
-        push(@$outputArray, "        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>(\"$name\"), strlen(\"$name\"));\n");
-        push(@$outputArray, "        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);\n");
-        push(@$outputArray, "        DeletePropertySlot slot;\n");
-        push(@$outputArray, "        JSObject::deleteProperty(this, &globalObject, propertyName, slot);\n");
-        push(@$outputArray, "    }\n");
-        push(@$outputArray, "#endif\n") if $conditionalString;
</del><ins>+    if ($constructorHashTable ne "nullptr") {
+        push(@$outputArray, "    reifyStaticProperties(vm, nullptr, ${className}ConstructorTableValues, *this);\n");
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     push(@$outputArray, "}\n\n");
</span><span class="lines">@@ -7925,6 +7692,12 @@
</span><span class="cx">     my @specials = ();
</span><span class="cx">     push(@specials, ("JSC::PropertyAttribute::DontDelete", "JSC::PropertyAttribute::ReadOnly")) if IsLegacyUnforgeable($interface, $operation);
</span><span class="cx">     push(@specials, "JSC::PropertyAttribute::DontEnum") if $operation->extendedAttributes->{NotEnumerable};
</span><ins>+
+    if (NeedsRuntimeCheck($interface, $operation)) {
+        push(@specials, "JSC::PropertyAttribute::PropertyCallback");
+        return \@specials;
+    }
+
</ins><span class="cx">     if (IsJSBuiltin($interface, $operation)) {
</span><span class="cx">         push(@specials, "JSC::PropertyAttribute::Builtin");
</span><span class="cx">     } else {
</span><span class="lines">@@ -7933,7 +7706,7 @@
</span><span class="cx">     if ($operation->extendedAttributes->{DOMJIT}) {
</span><span class="cx">         push(@specials, "JSC::PropertyAttribute::DOMJITFunction") if $operation->extendedAttributes->{DOMJIT};
</span><span class="cx">     }
</span><del>-    return "static_cast<unsigned>(" . ((@specials > 0) ? join(" | ", @specials) : "0") . ")";
</del><ins>+    return \@specials;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub IsJSBuiltin
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestDOMWindowConstructorsidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/DOMWindowConstructors.idl (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/DOMWindowConstructors.idl     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/DOMWindowConstructors.idl        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -5,7 +5,7 @@
</span><span class="cx">     attribute TestConditionallyReadWriteConstructor TestConditionallyReadWrite;
</span><span class="cx">     attribute TestDefaultToJSONConstructor TestDefaultToJSON;
</span><span class="cx">     attribute TestDefaultToJSONFilteredByExposedConstructor TestDefaultToJSONFilteredByExposed;
</span><del>-    attribute TestEnabledBySettingConstructor TestEnabledBySetting;
</del><ins>+    [PrivateIdentifier, PublicIdentifier] attribute TestEnabledBySettingConstructor TestEnabledBySetting;
</ins><span class="cx">     [EnabledForContext, SecureContext] attribute TestEnabledForContextConstructor TestEnabledForContext;
</span><span class="cx">     [Conditional=Condition1|Condition2] attribute TestInterfaceConstructor TestInterface;
</span><span class="cx">     attribute TestNodeConstructor TestNode;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSDOMWindowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.cpp    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.cpp       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -80,10 +80,59 @@
</span><span class="cx"> 
</span><span class="cx"> using JSDOMWindowDOMConstructor = JSDOMConstructorNotConstructable<JSDOMWindow>;
</span><span class="cx"> 
</span><del>-/* Hash table */
</del><ins>+template<> const unsigned JSDOMWindowDOMConstructor::StructureFlags = Base::StructureFlags;
+template<> const ClassInfo JSDOMWindowDOMConstructor::s_info = { "DOMWindow", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSDOMWindowDOMConstructor) };
</ins><span class="cx"> 
</span><del>-static const struct CompactHashIndex JSDOMWindowTableIndex[37] = {
</del><ins>+template<> JSValue JSDOMWindowDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
+{
+    return JSEventTarget::getConstructor(vm, &globalObject);
+}
+
+template<> void JSDOMWindowDOMConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
+{
+    putDirect(vm, vm.propertyNames->prototype, globalObject.getPrototypeDirect(vm), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
+    putDirect(vm, vm.propertyNames->name, jsNontrivialString(vm, "DOMWindow"_s), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
+    putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
+}
+
+/* Hash table for Prototype */
+
+static const struct CompactHashIndex JSDOMWindowPrototypeTableIndex[2] = {
</ins><span class="cx">     { -1, -1 },
</span><ins>+    { 0, -1 },
+};
+
+
+static const HashTableValue JSDOMWindowPrototypeTableValues[] =
+{
+    { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindowConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
+};
+
+static const HashTable JSDOMWindowPrototypeTable = { 1, 1, true, JSDOMWindow::info(), JSDOMWindowPrototypeTableValues, JSDOMWindowPrototypeTableIndex };
+const ClassInfo JSDOMWindowPrototype::s_info = { "DOMWindow", &Base::s_info, &JSDOMWindowPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSDOMWindowPrototype) };
+
+void JSDOMWindowPrototype::finishCreation(VM& vm)
+{
+    Base::finishCreation(vm);
+    reifyStaticProperties(vm, JSDOMWindow::info(), JSDOMWindowPrototypeTableValues, *this);
+    JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
+}
+
+static JSValue createJSDOMWindowInstance_TestEnabledForContext(VM& vm, JSObject*)
+{
+    return CustomGetterSetter::create(vm, jsDOMWindow_TestEnabledForContextConstructor, nullptr);
+}
+
+static bool isEnabledJSDOMWindowInstance_TestEnabledForContext(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return (jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->isSecureContext() && TestEnabledForContext::enabledForContext(*jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()));
+}
+
+/* Hash table for Instance */
+
+static const struct CompactHashIndex JSDOMWindowInstanceTableIndex[37] = {
+    { -1, -1 },
</ins><span class="cx">     { 5, 35 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -107,81 +156,45 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 7, -1 },
+    { 10, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 9, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { -1, -1 },
</del><span class="cx">     { 3, 34 },
</span><span class="cx">     { 6, 36 },
</span><del>-    { 7, -1 },
</del><span class="cx">     { 8, -1 },
</span><del>-    { 10, -1 },
</del><ins>+    { 9, -1 },
+    { 11, -1 },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-static const HashTableValue JSDOMWindowTableValues[] =
</del><ins>+static const HashTableValue JSDOMWindowInstanceTableValues[] =
</ins><span class="cx"> {
</span><del>-    { "DOMWindow", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_DOMWindowConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "ExposedToWorkerAndWindow", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_ExposedToWorkerAndWindowConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestConditionalIncludes", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestConditionalIncludesConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestConditionallyReadWrite", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestConditionallyReadWriteConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestDefaultToJSON", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestDefaultToJSONConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestDefaultToJSONFilteredByExposed", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestDefaultToJSONFilteredByExposedConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestEnabledBySetting", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestEnabledBySettingConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "DOMWindow", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_DOMWindowConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "ExposedToWorkerAndWindow", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_ExposedToWorkerAndWindowConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestConditionalIncludes", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestConditionalIncludesConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestConditionallyReadWrite", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestConditionallyReadWriteConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestDefaultToJSON", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestDefaultToJSONConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestDefaultToJSONFilteredByExposed", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestDefaultToJSONFilteredByExposedConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestEnabledBySetting", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestEnabledBySettingConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestEnabledForContext", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSDOMWindowInstance_TestEnabledForContext), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSDOMWindowInstance_TestEnabledForContext) } },
</ins><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><del>-    { "TestInterface", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "TestInterface", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "TestNode", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestNodeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestObject", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestPromiseRejectionEvent", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestPromiseRejectionEventConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "TestNode", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestNodeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestObject", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestPromiseRejectionEvent", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindow_TestPromiseRejectionEventConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSDOMWindowTable = { 11, 31, true, JSDOMWindow::info(), JSDOMWindowTableValues, JSDOMWindowTableIndex };
-template<> const ClassInfo JSDOMWindowDOMConstructor::s_info = { "DOMWindow", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSDOMWindowDOMConstructor) };
</del><ins>+static const HashTable JSDOMWindowInstanceTable = { 12, 31, true, JSDOMWindow::info(), JSDOMWindowInstanceTableValues, JSDOMWindowInstanceTableIndex };
+const ClassInfo JSDOMWindow::s_info = { "DOMWindow", &Base::s_info, &JSDOMWindowInstanceTable, nullptr, CREATE_METHOD_TABLE(JSDOMWindow) };
</ins><span class="cx"> 
</span><del>-template<> JSValue JSDOMWindowDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
-{
-    return JSEventTarget::getConstructor(vm, &globalObject);
-}
-
-template<> void JSDOMWindowDOMConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
-{
-    putDirect(vm, vm.propertyNames->prototype, globalObject.getPrototypeDirect(vm), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
-    putDirect(vm, vm.propertyNames->name, jsNontrivialString(vm, "DOMWindow"_s), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
-    putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
-}
-
-/* Hash table for prototype */
-
-static const struct CompactHashIndex JSDOMWindowPrototypeTableIndex[2] = {
-    { -1, -1 },
-    { 0, -1 },
-};
-
-
-static const HashTableValue JSDOMWindowPrototypeTableValues[] =
-{
-    { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMWindowConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-};
-
-static const HashTable JSDOMWindowPrototypeTable = { 1, 1, true, JSDOMWindow::info(), JSDOMWindowPrototypeTableValues, JSDOMWindowPrototypeTableIndex };
-const ClassInfo JSDOMWindowPrototype::s_info = { "DOMWindow", &Base::s_info, &JSDOMWindowPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSDOMWindowPrototype) };
-
-void JSDOMWindowPrototype::finishCreation(VM& vm)
-{
-    Base::finishCreation(vm);
-    reifyStaticProperties(vm, JSDOMWindow::info(), JSDOMWindowPrototypeTableValues, *this);
-    JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
-}
-
-const ClassInfo JSDOMWindow::s_info = { "DOMWindow", &Base::s_info, &JSDOMWindowTable, nullptr, CREATE_METHOD_TABLE(JSDOMWindow) };
-
</del><span class="cx"> JSDOMWindow::JSDOMWindow(VM& vm, Structure* structure, Ref<DOMWindow>&& impl, JSWindowProxy* proxy)
</span><span class="cx">     : JSEventTarget(vm, structure, WTFMove(impl), proxy)
</span><span class="cx"> {
</span><span class="lines">@@ -193,8 +206,7 @@
</span><span class="cx"> 
</span><span class="cx">     static_assert(!std::is_base_of<ActiveDOMObject, DOMWindow>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
</span><span class="cx"> 
</span><del>-    if ((jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isSecureContext() && TestEnabledForContext::enabledForContext(*jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())))
-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestEnabledForContextPublicName(), CustomGetterSetter::create(vm, jsDOMWindow_TestEnabledForContextConstructor, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::DontEnum)));
</del><ins>+    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestEnabledBySettingPrivateName(), CustomGetterSetter::create(vm, jsDOMWindow_TestEnabledBySettingConstructor, nullptr), static_cast<unsigned>(JSC::PropertyAttribute::CustomValue));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue JSDOMWindow::getConstructor(VM& vm, const JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSDOMWindowh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.h      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.h 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -99,6 +99,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSDOMWindowPrototype, JSDOMWindowPrototype::Base);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSDedicatedWorkerGlobalScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -53,20 +53,7 @@
</span><span class="cx"> 
</span><span class="cx"> using JSDedicatedWorkerGlobalScopeDOMConstructor = JSDOMConstructorNotConstructable<JSDedicatedWorkerGlobalScope>;
</span><span class="cx"> 
</span><del>-/* Hash table */
-
-static const struct CompactHashIndex JSDedicatedWorkerGlobalScopeTableIndex[2] = {
-    { -1, -1 },
-    { 0, -1 },
-};
-
-
-static const HashTableValue JSDedicatedWorkerGlobalScopeTableValues[] =
-{
-    { "DedicatedWorkerGlobalScope", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDedicatedWorkerGlobalScope_DedicatedWorkerGlobalScopeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-};
-
-static const HashTable JSDedicatedWorkerGlobalScopeTable = { 1, 1, true, JSDedicatedWorkerGlobalScope::info(), JSDedicatedWorkerGlobalScopeTableValues, JSDedicatedWorkerGlobalScopeTableIndex };
</del><ins>+template<> const unsigned JSDedicatedWorkerGlobalScopeDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSDedicatedWorkerGlobalScopeDOMConstructor::s_info = { "DedicatedWorkerGlobalScope", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSDedicatedWorkerGlobalScopeDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSDedicatedWorkerGlobalScopeDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -81,7 +68,7 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSDedicatedWorkerGlobalScopePrototypeTableIndex[2] = {
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -104,8 +91,22 @@
</span><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSDedicatedWorkerGlobalScope::s_info = { "DedicatedWorkerGlobalScope", &Base::s_info, &JSDedicatedWorkerGlobalScopeTable, nullptr, CREATE_METHOD_TABLE(JSDedicatedWorkerGlobalScope) };
</del><ins>+/* Hash table for Instance */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSDedicatedWorkerGlobalScopeInstanceTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSDedicatedWorkerGlobalScopeInstanceTableValues[] =
+{
+    { "DedicatedWorkerGlobalScope", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDedicatedWorkerGlobalScope_DedicatedWorkerGlobalScopeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+};
+
+static const HashTable JSDedicatedWorkerGlobalScopeInstanceTable = { 1, 1, true, JSDedicatedWorkerGlobalScope::info(), JSDedicatedWorkerGlobalScopeInstanceTableValues, JSDedicatedWorkerGlobalScopeInstanceTableIndex };
+const ClassInfo JSDedicatedWorkerGlobalScope::s_info = { "DedicatedWorkerGlobalScope", &Base::s_info, &JSDedicatedWorkerGlobalScopeInstanceTable, nullptr, CREATE_METHOD_TABLE(JSDedicatedWorkerGlobalScope) };
+
</ins><span class="cx"> JSDedicatedWorkerGlobalScope::JSDedicatedWorkerGlobalScope(VM& vm, Structure* structure, Ref<DedicatedWorkerGlobalScope>&& impl)
</span><span class="cx">     : JSWorkerGlobalScope(vm, structure, WTFMove(impl))
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSDedicatedWorkerGlobalScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -96,6 +96,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSDedicatedWorkerGlobalScopePrototype, JSDedicatedWorkerGlobalScopePrototype::Base);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSExposedToWorkerAndWindowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -126,6 +126,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSExposedToWorkerAndWindowPrototype, JSExposedToWorkerAndWindowPrototype::Base);
</span><span class="cx"> 
</span><span class="lines">@@ -148,6 +150,7 @@
</span><span class="cx"> }
</span><span class="cx"> JSC_ANNOTATE_HOST_FUNCTION(JSExposedToWorkerAndWindowDOMConstructorConstruct, JSExposedToWorkerAndWindowDOMConstructor::construct);
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSExposedToWorkerAndWindowDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSExposedToWorkerAndWindowDOMConstructor::s_info = { "ExposedToWorkerAndWindow", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSExposedToWorkerAndWindowDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSExposedToWorkerAndWindowDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -163,8 +166,16 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSExposedToWorkerAndWindowPrototypeTableIndex[4] = {
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSExposedToWorkerAndWindowPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsExposedToWorkerAndWindowConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="lines">@@ -171,7 +182,8 @@
</span><span class="cx">     { "doSomething", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsExposedToWorkerAndWindowPrototypeFunction_doSomething), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSExposedToWorkerAndWindowPrototype::s_info = { "ExposedToWorkerAndWindow", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSExposedToWorkerAndWindowPrototype) };
</del><ins>+static const HashTable JSExposedToWorkerAndWindowPrototypeTable = { 2, 3, true, JSExposedToWorkerAndWindow::info(), JSExposedToWorkerAndWindowPrototypeTableValues, JSExposedToWorkerAndWindowPrototypeTableIndex };
+const ClassInfo JSExposedToWorkerAndWindowPrototype::s_info = { "ExposedToWorkerAndWindow", &Base::s_info, &JSExposedToWorkerAndWindowPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSExposedToWorkerAndWindowPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSExposedToWorkerAndWindowPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSPaintWorkletGlobalScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -53,20 +53,7 @@
</span><span class="cx"> 
</span><span class="cx"> using JSPaintWorkletGlobalScopeDOMConstructor = JSDOMConstructorNotConstructable<JSPaintWorkletGlobalScope>;
</span><span class="cx"> 
</span><del>-/* Hash table */
-
-static const struct CompactHashIndex JSPaintWorkletGlobalScopeTableIndex[2] = {
-    { -1, -1 },
-    { 0, -1 },
-};
-
-
-static const HashTableValue JSPaintWorkletGlobalScopeTableValues[] =
-{
-    { "PaintWorkletGlobalScope", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsPaintWorkletGlobalScope_PaintWorkletGlobalScopeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-};
-
-static const HashTable JSPaintWorkletGlobalScopeTable = { 1, 1, true, JSPaintWorkletGlobalScope::info(), JSPaintWorkletGlobalScopeTableValues, JSPaintWorkletGlobalScopeTableIndex };
</del><ins>+template<> const unsigned JSPaintWorkletGlobalScopeDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSPaintWorkletGlobalScopeDOMConstructor::s_info = { "PaintWorkletGlobalScope", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSPaintWorkletGlobalScopeDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSPaintWorkletGlobalScopeDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -81,7 +68,7 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSPaintWorkletGlobalScopePrototypeTableIndex[2] = {
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -104,8 +91,22 @@
</span><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSPaintWorkletGlobalScope::s_info = { "PaintWorkletGlobalScope", &Base::s_info, &JSPaintWorkletGlobalScopeTable, nullptr, CREATE_METHOD_TABLE(JSPaintWorkletGlobalScope) };
</del><ins>+/* Hash table for Instance */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSPaintWorkletGlobalScopeInstanceTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSPaintWorkletGlobalScopeInstanceTableValues[] =
+{
+    { "PaintWorkletGlobalScope", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsPaintWorkletGlobalScope_PaintWorkletGlobalScopeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+};
+
+static const HashTable JSPaintWorkletGlobalScopeInstanceTable = { 1, 1, true, JSPaintWorkletGlobalScope::info(), JSPaintWorkletGlobalScopeInstanceTableValues, JSPaintWorkletGlobalScopeInstanceTableIndex };
+const ClassInfo JSPaintWorkletGlobalScope::s_info = { "PaintWorkletGlobalScope", &Base::s_info, &JSPaintWorkletGlobalScopeInstanceTable, nullptr, CREATE_METHOD_TABLE(JSPaintWorkletGlobalScope) };
+
</ins><span class="cx"> JSPaintWorkletGlobalScope::JSPaintWorkletGlobalScope(VM& vm, Structure* structure, Ref<PaintWorkletGlobalScope>&& impl)
</span><span class="cx">     : JSWorkletGlobalScope(vm, structure, WTFMove(impl))
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSPaintWorkletGlobalScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -96,6 +96,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSPaintWorkletGlobalScopePrototype, JSPaintWorkletGlobalScopePrototype::Base);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSServiceWorkerGlobalScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -53,20 +53,7 @@
</span><span class="cx"> 
</span><span class="cx"> using JSServiceWorkerGlobalScopeDOMConstructor = JSDOMConstructorNotConstructable<JSServiceWorkerGlobalScope>;
</span><span class="cx"> 
</span><del>-/* Hash table */
-
-static const struct CompactHashIndex JSServiceWorkerGlobalScopeTableIndex[2] = {
-    { -1, -1 },
-    { 0, -1 },
-};
-
-
-static const HashTableValue JSServiceWorkerGlobalScopeTableValues[] =
-{
-    { "ServiceWorkerGlobalScope", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsServiceWorkerGlobalScope_ServiceWorkerGlobalScopeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-};
-
-static const HashTable JSServiceWorkerGlobalScopeTable = { 1, 1, true, JSServiceWorkerGlobalScope::info(), JSServiceWorkerGlobalScopeTableValues, JSServiceWorkerGlobalScopeTableIndex };
</del><ins>+template<> const unsigned JSServiceWorkerGlobalScopeDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSServiceWorkerGlobalScopeDOMConstructor::s_info = { "ServiceWorkerGlobalScope", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSServiceWorkerGlobalScopeDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSServiceWorkerGlobalScopeDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -81,7 +68,7 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSServiceWorkerGlobalScopePrototypeTableIndex[2] = {
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -104,8 +91,22 @@
</span><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSServiceWorkerGlobalScope::s_info = { "ServiceWorkerGlobalScope", &Base::s_info, &JSServiceWorkerGlobalScopeTable, nullptr, CREATE_METHOD_TABLE(JSServiceWorkerGlobalScope) };
</del><ins>+/* Hash table for Instance */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSServiceWorkerGlobalScopeInstanceTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSServiceWorkerGlobalScopeInstanceTableValues[] =
+{
+    { "ServiceWorkerGlobalScope", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsServiceWorkerGlobalScope_ServiceWorkerGlobalScopeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+};
+
+static const HashTable JSServiceWorkerGlobalScopeInstanceTable = { 1, 1, true, JSServiceWorkerGlobalScope::info(), JSServiceWorkerGlobalScopeInstanceTableValues, JSServiceWorkerGlobalScopeInstanceTableIndex };
+const ClassInfo JSServiceWorkerGlobalScope::s_info = { "ServiceWorkerGlobalScope", &Base::s_info, &JSServiceWorkerGlobalScopeInstanceTable, nullptr, CREATE_METHOD_TABLE(JSServiceWorkerGlobalScope) };
+
</ins><span class="cx"> JSServiceWorkerGlobalScope::JSServiceWorkerGlobalScope(VM& vm, Structure* structure, Ref<ServiceWorkerGlobalScope>&& impl)
</span><span class="cx">     : JSWorkerGlobalScope(vm, structure, WTFMove(impl))
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSServiceWorkerGlobalScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h       2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h  2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -96,6 +96,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSServiceWorkerGlobalScopePrototype, JSServiceWorkerGlobalScopePrototype::Base);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -104,11 +104,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestCEReactionsPrototype, JSTestCEReactionsPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestCEReactionsDOMConstructor = JSDOMConstructorNotConstructable<JSTestCEReactions>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestCEReactionsDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestCEReactionsDOMConstructor::s_info = { "TestCEReactions", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCEReactionsDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestCEReactionsDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -124,22 +127,60 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestCEReactionsPrototypeTableIndex[33] = {
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { 5, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 8, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, 32 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { 6, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestCEReactionsPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "attributeWithCEReactions", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_attributeWithCEReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_attributeWithCEReactions) } },
-    { "reflectAttributeWithCEReactions", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_reflectAttributeWithCEReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_reflectAttributeWithCEReactions) } },
-    { "stringifierAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_stringifierAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_stringifierAttribute) } },
-    { "attributeWithCEReactionsNotNeeded", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_attributeWithCEReactionsNotNeeded), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_attributeWithCEReactionsNotNeeded) } },
-    { "reflectAttributeWithCEReactionsNotNeeded", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_reflectAttributeWithCEReactionsNotNeeded), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_reflectAttributeWithCEReactionsNotNeeded) } },
-    { "stringifierAttributeNotNeeded", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_stringifierAttributeNotNeeded), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_stringifierAttributeNotNeeded) } },
</del><ins>+    { "attributeWithCEReactions", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_attributeWithCEReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_attributeWithCEReactions) } },
+    { "reflectAttributeWithCEReactions", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_reflectAttributeWithCEReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_reflectAttributeWithCEReactions) } },
+    { "stringifierAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_stringifierAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_stringifierAttribute) } },
+    { "attributeWithCEReactionsNotNeeded", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_attributeWithCEReactionsNotNeeded), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_attributeWithCEReactionsNotNeeded) } },
+    { "reflectAttributeWithCEReactionsNotNeeded", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_reflectAttributeWithCEReactionsNotNeeded), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_reflectAttributeWithCEReactionsNotNeeded) } },
+    { "stringifierAttributeNotNeeded", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactions_stringifierAttributeNotNeeded), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactions_stringifierAttributeNotNeeded) } },
</ins><span class="cx">     { "methodWithCEReactions", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCEReactionsPrototypeFunction_methodWithCEReactions), (intptr_t) (0) } },
</span><span class="cx">     { "methodWithCEReactionsNotNeeded", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCEReactionsPrototypeFunction_methodWithCEReactionsNotNeeded), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestCEReactionsPrototype::s_info = { "TestCEReactions", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCEReactionsPrototype) };
</del><ins>+static const HashTable JSTestCEReactionsPrototypeTable = { 9, 31, true, JSTestCEReactions::info(), JSTestCEReactionsPrototypeTableValues, JSTestCEReactionsPrototypeTableIndex };
+const ClassInfo JSTestCEReactionsPrototype::s_info = { "TestCEReactions", &Base::s_info, &JSTestCEReactionsPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestCEReactionsPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestCEReactionsPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionsStringifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -89,11 +89,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestCEReactionsStringifierPrototype, JSTestCEReactionsStringifierPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestCEReactionsStringifierDOMConstructor = JSDOMConstructorNotConstructable<JSTestCEReactionsStringifier>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestCEReactionsStringifierDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestCEReactionsStringifierDOMConstructor::s_info = { "TestCEReactionsStringifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCEReactionsStringifierDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestCEReactionsStringifierDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -109,17 +112,30 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestCEReactionsStringifierPrototypeTableIndex[8] = {
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestCEReactionsStringifierPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "value", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifier_value), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifier_value) } },
-    { "valueWithoutReactions", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifier_valueWithoutReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifier_valueWithoutReactions) } },
</del><ins>+    { "value", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifier_value), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifier_value) } },
+    { "valueWithoutReactions", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifier_valueWithoutReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifier_valueWithoutReactions) } },
</ins><span class="cx">     { "toString", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCEReactionsStringifierPrototypeFunction_toString), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestCEReactionsStringifierPrototype::s_info = { "TestCEReactionsStringifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCEReactionsStringifierPrototype) };
</del><ins>+static const HashTable JSTestCEReactionsStringifierPrototypeTable = { 4, 7, true, JSTestCEReactionsStringifier::info(), JSTestCEReactionsStringifierPrototypeTableValues, JSTestCEReactionsStringifierPrototypeTableIndex };
+const ClassInfo JSTestCEReactionsStringifierPrototype::s_info = { "TestCEReactionsStringifier", &Base::s_info, &JSTestCEReactionsStringifierPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestCEReactionsStringifierPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestCEReactionsStringifierPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCallTracercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp       2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp  2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -111,21 +111,31 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestCallTracerPrototype, JSTestCallTracerPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestCallTracerDOMConstructor = JSDOMConstructorNotConstructable<JSTestCallTracer>;
</span><span class="cx"> 
</span><del>-/* Hash table for constructor */
</del><ins>+/* Hash table for Constructor */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestCallTracerConstructorTableIndex[2] = {
+    { 0, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestCallTracerConstructorTableValues[] =
</span><span class="cx"> {
</span><del>-    { "testConstValue", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(false) } },
</del><ins>+    { "testConstValue", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(false) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><ins>+static const HashTable JSTestCallTracerConstructorTable = { 1, 1, true, nullptr, JSTestCallTracerConstructorTableValues, JSTestCallTracerConstructorTableIndex };
</ins><span class="cx"> static_assert(TestCallTracer::testConstValue == false, "testConstValue in TestCallTracer does not match value from IDL");
</span><span class="cx"> 
</span><del>-template<> const ClassInfo JSTestCallTracerDOMConstructor::s_info = { "TestCallTracer", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCallTracerDOMConstructor) };
</del><ins>+template<> const unsigned JSTestCallTracerDOMConstructor::StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
+template<> const ClassInfo JSTestCallTracerDOMConstructor::s_info = { "TestCallTracer", &Base::s_info, &JSTestCallTracerConstructorTable, nullptr, CREATE_METHOD_TABLE(JSTestCallTracerDOMConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestCallTracerDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="cx"> {
</span><span class="lines">@@ -138,18 +148,55 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->prototype, JSTestCallTracer::prototype(vm, globalObject), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames->name, jsNontrivialString(vm, "TestCallTracer"_s), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><del>-    reifyStaticProperties(vm, JSTestCallTracer::info(), JSTestCallTracerConstructorTableValues, *this);
</del><ins>+    reifyStaticProperties(vm, nullptr, JSTestCallTracerConstructorTableValues, *this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestCallTracerPrototypeTableIndex[33] = {
+    { -1, -1 },
+    { -1, -1 },
+    { 6, -1 },
+    { 12, -1 },
+    { -1, -1 },
+    { 1, 32 },
+    { -1, -1 },
+    { -1, -1 },
+    { 8, -1 },
+    { -1, -1 },
+    { 13, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { 5, -1 },
+    { 11, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 9, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 10, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestCallTracerPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracerConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "testAttributeInterface", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracer_testAttributeInterface), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCallTracer_testAttributeInterface) } },
-    { "testAttributeSpecified", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracer_testAttributeSpecified), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCallTracer_testAttributeSpecified) } },
-    { "testAttributeWithVariant", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracer_testAttributeWithVariant), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCallTracer_testAttributeWithVariant) } },
-    { "testReadonlyAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracer_testReadonlyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "testAttributeInterface", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracer_testAttributeInterface), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCallTracer_testAttributeInterface) } },
+    { "testAttributeSpecified", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracer_testAttributeSpecified), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCallTracer_testAttributeSpecified) } },
+    { "testAttributeWithVariant", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracer_testAttributeWithVariant), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCallTracer_testAttributeWithVariant) } },
+    { "testReadonlyAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCallTracer_testReadonlyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx">     { "testOperationInterface", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCallTracerPrototypeFunction_testOperationInterface), (intptr_t) (0) } },
</span><span class="cx">     { "testOperationSpecified", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCallTracerPrototypeFunction_testOperationSpecified), (intptr_t) (0) } },
</span><span class="cx">     { "testOperationWithArguments", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCallTracerPrototypeFunction_testOperationWithArguments), (intptr_t) (3) } },
</span><span class="lines">@@ -158,10 +205,11 @@
</span><span class="cx">     { "testOperationWithNullableVariantArgument", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCallTracerPrototypeFunction_testOperationWithNullableVariantArgument), (intptr_t) (1) } },
</span><span class="cx">     { "testOperationWithOptionalVariantArgument", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCallTracerPrototypeFunction_testOperationWithOptionalVariantArgument), (intptr_t) (0) } },
</span><span class="cx">     { "testOperationWithDefaultVariantArgument", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestCallTracerPrototypeFunction_testOperationWithDefaultVariantArgument), (intptr_t) (0) } },
</span><del>-    { "testConstValue", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(false) } },
</del><ins>+    { "testConstValue", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(false) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestCallTracerPrototype::s_info = { "TestCallTracer", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCallTracerPrototype) };
</del><ins>+static const HashTable JSTestCallTracerPrototypeTable = { 14, 31, true, JSTestCallTracer::info(), JSTestCallTracerPrototypeTableValues, JSTestCallTracerPrototypeTableIndex };
+const ClassInfo JSTestCallTracerPrototype::s_info = { "TestCallTracer", &Base::s_info, &JSTestCallTracerPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestCallTracerPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestCallTracerPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCallbackInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -142,18 +142,28 @@
</span><span class="cx"> 
</span><span class="cx"> using JSTestCallbackInterfaceDOMConstructor = JSDOMConstructorNotConstructable<JSTestCallbackInterface>;
</span><span class="cx"> 
</span><del>-/* Hash table for constructor */
</del><ins>+/* Hash table for Constructor */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestCallbackInterfaceConstructorTableIndex[4] = {
+    { 1, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestCallbackInterfaceConstructorTableValues[] =
</span><span class="cx"> {
</span><del>-    { "CONSTANT1", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
-    { "CONSTANT2", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</del><ins>+    { "CONSTANT1", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
+    { "CONSTANT2", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><ins>+static const HashTable JSTestCallbackInterfaceConstructorTable = { 2, 3, true, nullptr, JSTestCallbackInterfaceConstructorTableValues, JSTestCallbackInterfaceConstructorTableIndex };
</ins><span class="cx"> static_assert(TestCallbackInterface::CONSTANT1 == 1, "CONSTANT1 in TestCallbackInterface does not match value from IDL");
</span><span class="cx"> static_assert(TestCallbackInterface::CONSTANT2 == 2, "CONSTANT2 in TestCallbackInterface does not match value from IDL");
</span><span class="cx"> 
</span><del>-template<> const ClassInfo JSTestCallbackInterfaceDOMConstructor::s_info = { "TestCallbackInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCallbackInterfaceDOMConstructor) };
</del><ins>+template<> const unsigned JSTestCallbackInterfaceDOMConstructor::StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
+template<> const ClassInfo JSTestCallbackInterfaceDOMConstructor::s_info = { "TestCallbackInterface", &Base::s_info, &JSTestCallbackInterfaceConstructorTable, nullptr, CREATE_METHOD_TABLE(JSTestCallbackInterfaceDOMConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestCallbackInterfaceDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestClassWithJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -78,11 +78,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestClassWithJSBuiltinConstructorPrototype, JSTestClassWithJSBuiltinConstructorPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestClassWithJSBuiltinConstructorDOMConstructor = JSDOMBuiltinConstructor<JSTestClassWithJSBuiltinConstructor>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestClassWithJSBuiltinConstructorDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestClassWithJSBuiltinConstructorDOMConstructor::s_info = { "TestClassWithJSBuiltinConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestClassWithJSBuiltinConstructorDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestClassWithJSBuiltinConstructorDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -103,14 +106,21 @@
</span><span class="cx">     return testClassWithJSBuiltinConstructorInitializeTestClassWithJSBuiltinConstructorCodeGenerator(vm);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestClassWithJSBuiltinConstructorPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestClassWithJSBuiltinConstructorPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestClassWithJSBuiltinConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestClassWithJSBuiltinConstructorPrototype::s_info = { "TestClassWithJSBuiltinConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestClassWithJSBuiltinConstructorPrototype) };
</del><ins>+static const HashTable JSTestClassWithJSBuiltinConstructorPrototypeTable = { 1, 1, true, JSTestClassWithJSBuiltinConstructor::info(), JSTestClassWithJSBuiltinConstructorPrototypeTableValues, JSTestClassWithJSBuiltinConstructorPrototypeTableIndex };
+const ClassInfo JSTestClassWithJSBuiltinConstructorPrototype::s_info = { "TestClassWithJSBuiltinConstructor", &Base::s_info, &JSTestClassWithJSBuiltinConstructorPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestClassWithJSBuiltinConstructorPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestClassWithJSBuiltinConstructorPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestConditionalIncludescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.cpp      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.cpp 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -141,32 +141,86 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestConditionalIncludesPrototype, JSTestConditionalIncludesPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestConditionalIncludesDOMConstructor = JSDOMConstructorNotConstructable<JSTestConditionalIncludes>;
</span><span class="cx"> 
</span><del>-/* Hash table for constructor */
</del><ins>+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesConstructor_MIXIN_CONSTANT(VM&, JSObject*)
+{
+    return jsNumber(1);
+}
</ins><span class="cx"> 
</span><ins>+static bool isEnabledJSTestConditionalIncludesConstructor_MIXIN_CONSTANT(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesConstructor_MIXIN_REFLECTED_CONSTANT(VM&, JSObject*)
+{
+    return jsNumber(2);
+}
+
+static bool isEnabledJSTestConditionalIncludesConstructor_MIXIN_REFLECTED_CONSTANT(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesConstructor_PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL(VM&, JSObject*)
+{
+    return jsNumber(5);
+}
+
+static bool isEnabledJSTestConditionalIncludesConstructor_PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+/* Hash table for Constructor */
+
+static const struct CompactHashIndex JSTestConditionalIncludesConstructorTableIndex[8] = {
+    { 1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestConditionalIncludesConstructorTableValues[] =
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "MIXIN_CONSTANT", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</del><ins>+    { "MIXIN_CONSTANT", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesConstructor_MIXIN_CONSTANT), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesConstructor_MIXIN_CONSTANT) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "MIXIN_REFLECTED_CONSTANT", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</del><ins>+    { "MIXIN_REFLECTED_CONSTANT", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesConstructor_MIXIN_REFLECTED_CONSTANT), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesConstructor_MIXIN_REFLECTED_CONSTANT) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(5) } },
</del><ins>+    { "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesConstructor_PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesConstructor_PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+static const HashTable JSTestConditionalIncludesConstructorTable = { 3, 7, true, nullptr, JSTestConditionalIncludesConstructorTableValues, JSTestConditionalIncludesConstructorTableIndex };
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx"> static_assert(TestConditionalIncludes::MIXIN_CONSTANT == 1, "MIXIN_CONSTANT in TestConditionalIncludes does not match value from IDL");
</span><span class="cx"> #endif
</span><span class="lines">@@ -177,7 +231,8 @@
</span><span class="cx"> static_assert(TestConditionalIncludes::PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL == 5, "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL in TestConditionalIncludes does not match value from IDL");
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-template<> const ClassInfo JSTestConditionalIncludesDOMConstructor::s_info = { "TestConditionalIncludes", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestConditionalIncludesDOMConstructor) };
</del><ins>+template<> const unsigned JSTestConditionalIncludesDOMConstructor::StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
+template<> const ClassInfo JSTestConditionalIncludesDOMConstructor::s_info = { "TestConditionalIncludes", &Base::s_info, &JSTestConditionalIncludesConstructorTable, nullptr, CREATE_METHOD_TABLE(JSTestConditionalIncludesDOMConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestConditionalIncludesDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="cx"> {
</span><span class="lines">@@ -190,260 +245,364 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->prototype, JSTestConditionalIncludes::prototype(vm, globalObject), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames->name, jsNontrivialString(vm, "TestConditionalIncludes"_s), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><del>-    reifyStaticProperties(vm, JSTestConditionalIncludes::info(), JSTestConditionalIncludesConstructorTableValues, *this);
</del><ins>+    reifyStaticProperties(vm, nullptr, JSTestConditionalIncludesConstructorTableValues, *this);
+}
+
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    if (!jsCast<JSDOMGlobalObject*>(&globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("MIXIN_CONSTANT"), strlen("MIXIN_CONSTANT"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, &globalObject, propertyName, slot);
-    }
</del><ins>+static JSValue createJSTestConditionalIncludesPrototype_mixinReadOnlyAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestConditionalIncludes_mixinReadOnlyAttribute, nullptr, DOMAttributeAnnotation { JSTestConditionalIncludes::info(), nullptr });
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinReadOnlyAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
</ins><span class="cx"> #endif
</span><ins>+
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    if (!jsCast<JSDOMGlobalObject*>(&globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("MIXIN_REFLECTED_CONSTANT"), strlen("MIXIN_REFLECTED_CONSTANT"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, &globalObject, propertyName, slot);
-    }
</del><ins>+static JSValue createJSTestConditionalIncludesPrototype_mixinAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestConditionalIncludes_mixinAttribute, setJSTestConditionalIncludes_mixinAttribute, DOMAttributeAnnotation { JSTestConditionalIncludes::info(), nullptr });
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
</ins><span class="cx"> #endif
</span><ins>+
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    if (!jsCast<JSDOMGlobalObject*>(&globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL"), strlen("PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, &globalObject, propertyName, slot);
-    }
</del><ins>+static JSValue createJSTestConditionalIncludesPrototype_mixinCustomAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestConditionalIncludes_mixinCustomAttribute, setJSTestConditionalIncludes_mixinCustomAttribute, DOMAttributeAnnotation { JSTestConditionalIncludes::info(), nullptr });
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinCustomAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
</ins><span class="cx"> #endif
</span><ins>+
+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_mixinNodeAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestConditionalIncludes_mixinNodeAttribute, setJSTestConditionalIncludes_mixinNodeAttribute, DOMAttributeAnnotation { JSTestConditionalIncludes::info(), nullptr });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+static bool isEnabledJSTestConditionalIncludesPrototype_mixinNodeAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
</ins><span class="cx"> 
</span><ins>+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_partialMixinAttributeFromPartial(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestConditionalIncludes_partialMixinAttributeFromPartial, nullptr, DOMAttributeAnnotation { JSTestConditionalIncludes::info(), nullptr });
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_partialMixinAttributeFromPartial(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_mixinOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "mixinOperation"_s, jsTestConditionalIncludesPrototypeFunction_mixinOperation);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_mixinComplexOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 2, "mixinComplexOperation"_s, jsTestConditionalIncludesPrototypeFunction_mixinComplexOperation);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinComplexOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_mixinCustomOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "mixinCustomOperation"_s, jsTestConditionalIncludesPrototypeFunction_mixinCustomOperation);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinCustomOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if (ENABLE(Condition11) && ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_mixinConditionalOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "mixinConditionalOperation"_s, jsTestConditionalIncludesPrototypeFunction_mixinConditionalOperation);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinConditionalOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_mixinSettingsConditionalOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "mixinSettingsConditionalOperation"_s, jsTestConditionalIncludesPrototypeFunction_mixinSettingsConditionalOperation);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinSettingsConditionalOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return (jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled && jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled);
+}
+#endif
+
+#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_mixinResultFieldOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "mixinResultFieldOperation"_s, jsTestConditionalIncludesPrototypeFunction_mixinResultFieldOperation);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_mixinResultFieldOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if (ENABLE(Condition12) && ENABLE(Condition22) && ENABLE(Condition33)) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_partialMixinOperationFromPartial(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "partialMixinOperationFromPartial"_s, jsTestConditionalIncludesPrototypeFunction_partialMixinOperationFromPartial);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_partialMixinOperationFromPartial(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_MIXIN_CONSTANT(VM&, JSObject*)
+{
+    return jsNumber(1);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_MIXIN_CONSTANT(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_MIXIN_REFLECTED_CONSTANT(VM&, JSObject*)
+{
+    return jsNumber(2);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_MIXIN_REFLECTED_CONSTANT(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestConditionalIncludesPrototype_PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL(VM&, JSObject*)
+{
+    return jsNumber(5);
+}
+
+static bool isEnabledJSTestConditionalIncludesPrototype_PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSetting2Enabled;
+}
+#endif
+
+/* Hash table for Prototype */
+
+static const struct CompactHashIndex JSTestConditionalIncludesPrototypeTableIndex[66] = {
+    { -1, -1 },
+    { -1, -1 },
+    { 2, 64 },
+    { -1, -1 },
+    { 14, -1 },
+    { -1, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 16, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 8, -1 },
+    { -1, -1 },
+    { 15, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 5, -1 },
+    { -1, -1 },
+    { 10, -1 },
+    { -1, -1 },
+    { 13, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 9, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 11, -1 },
+    { 6, 65 },
+    { 12, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestConditionalIncludesPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionalIncludesConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "testAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionalIncludes_testAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "testAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionalIncludes_testAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinReadOnlyAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionalIncludes_mixinReadOnlyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "mixinReadOnlyAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinReadOnlyAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinReadOnlyAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionalIncludes_mixinAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionalIncludes_mixinAttribute) } },
</del><ins>+    { "mixinAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinCustomAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionalIncludes_mixinCustomAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionalIncludes_mixinCustomAttribute) } },
</del><ins>+    { "mixinCustomAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinCustomAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinCustomAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinNodeAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionalIncludes_mixinNodeAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionalIncludes_mixinNodeAttribute) } },
</del><ins>+    { "mixinNodeAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinNodeAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinNodeAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "partialMixinAttributeFromPartial", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionalIncludes_partialMixinAttributeFromPartial), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "partialMixinAttributeFromPartial", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_partialMixinAttributeFromPartial), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_partialMixinAttributeFromPartial) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
</span><del>-    { "mixinOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestConditionalIncludesPrototypeFunction_mixinOperation), (intptr_t) (0) } },
</del><ins>+    { "mixinOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
</span><del>-    { "mixinComplexOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestConditionalIncludesPrototypeFunction_mixinComplexOperation), (intptr_t) (2) } },
</del><ins>+    { "mixinComplexOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinComplexOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinComplexOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
</span><del>-    { "mixinCustomOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestConditionalIncludesPrototypeFunction_mixinCustomOperation), (intptr_t) (0) } },
</del><ins>+    { "mixinCustomOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinCustomOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinCustomOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if (ENABLE(Condition11) && ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
</span><del>-    { "mixinConditionalOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestConditionalIncludesPrototypeFunction_mixinConditionalOperation), (intptr_t) (0) } },
</del><ins>+    { "mixinConditionalOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinConditionalOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinConditionalOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
</span><del>-    { "mixinSettingsConditionalOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestConditionalIncludesPrototypeFunction_mixinSettingsConditionalOperation), (intptr_t) (0) } },
</del><ins>+    { "mixinSettingsConditionalOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinSettingsConditionalOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinSettingsConditionalOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
</span><del>-    { "mixinResultFieldOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestConditionalIncludesPrototypeFunction_mixinResultFieldOperation), (intptr_t) (0) } },
</del><ins>+    { "mixinResultFieldOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_mixinResultFieldOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_mixinResultFieldOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if (ENABLE(Condition12) && ENABLE(Condition22) && ENABLE(Condition33)) || ENABLE(Condition23)
</span><del>-    { "partialMixinOperationFromPartial", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestConditionalIncludesPrototypeFunction_partialMixinOperationFromPartial), (intptr_t) (0) } },
</del><ins>+    { "partialMixinOperationFromPartial", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_partialMixinOperationFromPartial), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_partialMixinOperationFromPartial) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "MIXIN_CONSTANT", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</del><ins>+    { "MIXIN_CONSTANT", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_MIXIN_CONSTANT), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_MIXIN_CONSTANT) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "MIXIN_REFLECTED_CONSTANT", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</del><ins>+    { "MIXIN_REFLECTED_CONSTANT", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_MIXIN_REFLECTED_CONSTANT), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_MIXIN_REFLECTED_CONSTANT) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(5) } },
</del><ins>+    { "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestConditionalIncludesPrototype_PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestConditionalIncludesPrototype_PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestConditionalIncludesPrototype::s_info = { "TestConditionalIncludes", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestConditionalIncludesPrototype) };
</del><ins>+static const HashTable JSTestConditionalIncludesPrototypeTable = { 17, 63, true, JSTestConditionalIncludes::info(), JSTestConditionalIncludesPrototypeTableValues, JSTestConditionalIncludesPrototypeTableIndex };
+const ClassInfo JSTestConditionalIncludesPrototype::s_info = { "TestConditionalIncludes", &Base::s_info, &JSTestConditionalIncludesPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestConditionalIncludesPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestConditionalIncludesPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestConditionalIncludes::info(), JSTestConditionalIncludesPrototypeTableValues, *this);
</span><del>-    bool hasDisabledRuntimeProperties = false;
-#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinOperation"), strlen("mixinOperation"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinComplexOperation"), strlen("mixinComplexOperation"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinCustomOperation"), strlen("mixinCustomOperation"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if (ENABLE(Condition11) && ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinConditionalOperation"), strlen("mixinConditionalOperation"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
-    if (!(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled && jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled)) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinSettingsConditionalOperation"), strlen("mixinSettingsConditionalOperation"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if (ENABLE(Condition12) && ENABLE(Condition22)) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinResultFieldOperation"), strlen("mixinResultFieldOperation"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if (ENABLE(Condition12) && ENABLE(Condition22) && ENABLE(Condition33)) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("partialMixinOperationFromPartial"), strlen("partialMixinOperationFromPartial"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinReadOnlyAttribute"), strlen("mixinReadOnlyAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinAttribute"), strlen("mixinAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinCustomAttribute"), strlen("mixinCustomAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinNodeAttribute"), strlen("mixinNodeAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("partialMixinAttributeFromPartial"), strlen("partialMixinAttributeFromPartial"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("MIXIN_CONSTANT"), strlen("MIXIN_CONSTANT"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("MIXIN_REFLECTED_CONSTANT"), strlen("MIXIN_REFLECTED_CONSTANT"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSetting2Enabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL"), strlen("PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-    if (hasDisabledRuntimeProperties && structure()->isDictionary())
-        flattenDictionaryObject(vm);
</del><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestConditionallyReadWritecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -112,32 +112,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestConditionallyReadWritePrototype, JSTestConditionallyReadWritePrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestConditionallyReadWriteDOMConstructor = JSDOMConstructorNotConstructable<JSTestConditionallyReadWrite>;
</span><span class="cx"> 
</span><del>-/* Hash table */
-
-static const struct CompactHashIndex JSTestConditionallyReadWriteTableIndex[8] = {
-    { -1, -1 },
-    { -1, -1 },
-    { 1, -1 },
-    { 0, -1 },
-    { -1, -1 },
-    { -1, -1 },
-    { -1, -1 },
-    { -1, -1 },
-};
-
-
-static const HashTableValue JSTestConditionallyReadWriteTableValues[] =
-{
-    { "runtimeConditionallyReadWriteAttributeUnforgeable", static_cast<unsigned>(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeable), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeable) } },
-    { "settingsConditionallyReadWriteAttributeUnforgeable", static_cast<unsigned>(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeable), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeable) } },
-};
-
-static const HashTable JSTestConditionallyReadWriteTable = { 2, 7, true, JSTestConditionallyReadWrite::info(), JSTestConditionallyReadWriteTableValues, JSTestConditionallyReadWriteTableIndex };
</del><ins>+template<> const unsigned JSTestConditionallyReadWriteDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestConditionallyReadWriteDOMConstructor::s_info = { "TestConditionallyReadWrite", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestConditionallyReadWriteDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestConditionallyReadWriteDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -153,85 +135,107 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestConditionallyReadWritePrototypeTableIndex[19] = {
+    { 6, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, 18 },
+    { -1, -1 },
+    { 1, 17 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, 16 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { 3, -1 },
+    { 5, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestConditionallyReadWritePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWriteConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> #if ENABLE(CONDITION)
</span><del>-    { "conditionallyReadWriteAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_conditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_conditionallyReadWriteAttribute) } },
</del><ins>+    { "conditionallyReadWriteAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_conditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_conditionallyReadWriteAttribute) } },
</ins><span class="cx"> #else
</span><del>-    { "conditionallyReadWriteAttribute", JSC::PropertyAttribute::ReadOnly | static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_conditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "conditionallyReadWriteAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_conditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CONDITION2)
</span><span class="cx"> #if ENABLE(CONDITION)
</span><del>-    { "conditionalAndConditionallyReadWriteAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_conditionalAndConditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_conditionalAndConditionallyReadWriteAttribute) } },
</del><ins>+    { "conditionalAndConditionallyReadWriteAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_conditionalAndConditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_conditionalAndConditionallyReadWriteAttribute) } },
</ins><span class="cx"> #else
</span><del>-    { "conditionalAndConditionallyReadWriteAttribute", JSC::PropertyAttribute::ReadOnly | static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_conditionalAndConditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "conditionalAndConditionallyReadWriteAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_conditionalAndConditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</ins><span class="cx"> #endif
</span><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "runtimeConditionallyReadWriteAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_runtimeConditionallyReadWriteAttribute) } },
</del><ins>+    { "runtimeConditionallyReadWriteAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_runtimeConditionallyReadWriteAttribute) } },
</ins><span class="cx">     { "runtimeConditionallyReadWriteAttributePromise", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributePromise), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributePromise) } },
</span><del>-    { "settingsConditionallyReadWriteAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_settingsConditionallyReadWriteAttribute) } },
</del><ins>+    { "settingsConditionallyReadWriteAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_settingsConditionallyReadWriteAttribute) } },
</ins><span class="cx">     { "settingsConditionallyReadWriteAttributePromise", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributePromise), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_settingsConditionallyReadWriteAttributePromise) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestConditionallyReadWritePrototype::s_info = { "TestConditionallyReadWrite", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestConditionallyReadWritePrototype) };
</del><ins>+static const HashTable JSTestConditionallyReadWritePrototypeTable = { 7, 15, true, JSTestConditionallyReadWrite::info(), JSTestConditionallyReadWritePrototypeTableValues, JSTestConditionallyReadWritePrototypeTableIndex };
+const ClassInfo JSTestConditionallyReadWritePrototype::s_info = { "TestConditionallyReadWrite", &Base::s_info, &JSTestConditionallyReadWritePrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestConditionallyReadWritePrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestConditionallyReadWritePrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestConditionallyReadWrite::info(), JSTestConditionallyReadWritePrototypeTableValues, *this);
</span><del>-    bool hasDisabledRuntimeProperties = false;
-    if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled()) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("runtimeConditionallyReadWriteAttribute"), strlen("runtimeConditionallyReadWriteAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled()) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("runtimeConditionallyReadWriteAttributePromise"), strlen("runtimeConditionallyReadWriteAttributePromise"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (!downcast<Document>(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())->settingsValues().testFeatureEnabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("settingsConditionallyReadWriteAttribute"), strlen("settingsConditionallyReadWriteAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (!downcast<Document>(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())->settingsValues().testFeatureEnabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("settingsConditionallyReadWriteAttributePromise"), strlen("settingsConditionallyReadWriteAttributePromise"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    // Adding back attribute, but as readonly, after removing the read-write variant above. 
</del><ins>+    // Shadow read-write variant from the static hash table.
</ins><span class="cx">     if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
</span><del>-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().runtimeConditionallyReadWriteAttributePublicName(), JSC::DOMAttributeGetterSetter::create(vm, jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttribute, nullptr, JSC::DOMAttributeAnnotation { JSTestConditionallyReadWrite::info(), nullptr }), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute)));
-    // Adding back attribute, but as readonly, after removing the read-write variant above. 
</del><ins>+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().runtimeConditionallyReadWriteAttributePublicName(), JSC::DOMAttributeGetterSetter::create(vm, jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttribute, nullptr, JSC::DOMAttributeAnnotation { JSTestConditionallyReadWrite::info(), nullptr }), attributesForStructure(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute | JSC::PropertyAttribute::ReadOnly));
+    // Shadow read-write variant from the static hash table.
</ins><span class="cx">     if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
</span><del>-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().runtimeConditionallyReadWriteAttributePromisePublicName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributePromise, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor)));
-    // Adding back attribute, but as readonly, after removing the read-write variant above. 
</del><ins>+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().runtimeConditionallyReadWriteAttributeUnforgeablePublicName(), JSC::DOMAttributeGetterSetter::create(vm, jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeable, nullptr, JSC::DOMAttributeAnnotation { JSTestConditionallyReadWrite::info(), nullptr }), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute | JSC::PropertyAttribute::ReadOnly));
+    // Shadow read-write variant from the static hash table.
+    if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().runtimeConditionallyReadWriteAttributeUnforgeablePrivatePublicName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeablePrivate, nullptr), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::ReadOnly));
+    // Shadow read-write variant from the static hash table.
+    if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().runtimeConditionallyReadWriteAttributePromisePublicName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributePromise, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor) | JSC::PropertyAttribute::ReadOnly));
+    // Shadow read-write variant from the static hash table.
</ins><span class="cx">     if (!downcast<Document>(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())->settingsValues().testFeatureEnabled)
</span><del>-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().settingsConditionallyReadWriteAttributePublicName(), JSC::DOMAttributeGetterSetter::create(vm, jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttribute, nullptr, JSC::DOMAttributeAnnotation { JSTestConditionallyReadWrite::info(), nullptr }), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute)));
-    // Adding back attribute, but as readonly, after removing the read-write variant above. 
</del><ins>+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().settingsConditionallyReadWriteAttributePublicName(), JSC::DOMAttributeGetterSetter::create(vm, jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttribute, nullptr, JSC::DOMAttributeAnnotation { JSTestConditionallyReadWrite::info(), nullptr }), attributesForStructure(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute | JSC::PropertyAttribute::ReadOnly));
+    // Shadow read-write variant from the static hash table.
</ins><span class="cx">     if (!downcast<Document>(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())->settingsValues().testFeatureEnabled)
</span><del>-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().settingsConditionallyReadWriteAttributePromisePublicName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributePromise, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor)));
-    if (hasDisabledRuntimeProperties && structure()->isDictionary())
-        flattenDictionaryObject(vm);
</del><ins>+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().settingsConditionallyReadWriteAttributeUnforgeablePublicName(), JSC::DOMAttributeGetterSetter::create(vm, jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeable, nullptr, JSC::DOMAttributeAnnotation { JSTestConditionallyReadWrite::info(), nullptr }), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute | JSC::PropertyAttribute::ReadOnly));
+    // Shadow read-write variant from the static hash table.
+    if (!downcast<Document>(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())->settingsValues().testFeatureEnabled)
+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().settingsConditionallyReadWriteAttributeUnforgeablePrivatePublicName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeablePrivate, nullptr), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::ReadOnly));
+    // Shadow read-write variant from the static hash table.
+    if (!downcast<Document>(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())->settingsValues().testFeatureEnabled)
+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().settingsConditionallyReadWriteAttributePromisePublicName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributePromise, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor) | JSC::PropertyAttribute::ReadOnly));
</ins><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestConditionallyReadWrite::s_info = { "TestConditionallyReadWrite", &Base::s_info, &JSTestConditionallyReadWriteTable, nullptr, CREATE_METHOD_TABLE(JSTestConditionallyReadWrite) };
</del><ins>+/* Hash table for Instance */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestConditionallyReadWriteInstanceTableIndex[4] = {
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestConditionallyReadWriteInstanceTableValues[] =
+{
+    { "runtimeConditionallyReadWriteAttributeUnforgeable", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeable), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeable) } },
+    { "settingsConditionallyReadWriteAttributeUnforgeable", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeable), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeable) } },
+};
+
+static const HashTable JSTestConditionallyReadWriteInstanceTable = { 2, 3, true, JSTestConditionallyReadWrite::info(), JSTestConditionallyReadWriteInstanceTableValues, JSTestConditionallyReadWriteInstanceTableIndex };
+const ClassInfo JSTestConditionallyReadWrite::s_info = { "TestConditionallyReadWrite", &Base::s_info, &JSTestConditionallyReadWriteInstanceTable, nullptr, CREATE_METHOD_TABLE(JSTestConditionallyReadWrite) };
+
</ins><span class="cx"> JSTestConditionallyReadWrite::JSTestConditionallyReadWrite(Structure* structure, JSDOMGlobalObject& globalObject, Ref<TestConditionallyReadWrite>&& impl)
</span><span class="cx">     : JSDOMWrapper<TestConditionallyReadWrite>(structure, globalObject, WTFMove(impl))
</span><span class="cx"> {
</span><span class="lines">@@ -244,8 +248,8 @@
</span><span class="cx"> 
</span><span class="cx">     static_assert(!std::is_base_of<ActiveDOMObject, TestConditionallyReadWrite>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
</span><span class="cx"> 
</span><del>-    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().runtimeConditionallyReadWriteAttributeUnforgeablePrivatePrivateName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeablePrivate, nullptr), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly));
-    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().settingsConditionallyReadWriteAttributeUnforgeablePrivatePrivateName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeablePrivate, nullptr), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly));
</del><ins>+    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().runtimeConditionallyReadWriteAttributeUnforgeablePrivatePrivateName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeablePrivate, setJSTestConditionallyReadWrite_runtimeConditionallyReadWriteAttributeUnforgeablePrivate), static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor));
+    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().settingsConditionallyReadWriteAttributeUnforgeablePrivatePrivateName(), CustomGetterSetter::create(vm, jsTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeablePrivate, setJSTestConditionallyReadWrite_settingsConditionallyReadWriteAttributeUnforgeablePrivate), static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestConditionallyReadWrite::createPrototype(VM& vm, JSDOMGlobalObject& globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDOMJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -500,11 +500,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDOMJITPrototype, JSTestDOMJITPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestDOMJITDOMConstructor = JSDOMConstructorNotConstructable<JSTestDOMJIT>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestDOMJITDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestDOMJITDOMConstructor::s_info = { "TestDOMJIT", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDOMJITDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestDOMJITDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -519,54 +522,197 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestDOMJITPrototypeTableIndex[138] = {
+    { 15, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { 12, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 25, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 17, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 35, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 13, -1 },
+    { 34, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 14, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 11, 137 },
+    { -1, -1 },
+    { -1, -1 },
+    { 16, 129 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 27, 133 },
+    { -1, -1 },
+    { 36, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 19, -1 },
+    { 21, 131 },
+    { -1, -1 },
+    { -1, -1 },
+    { 22, 135 },
+    { 32, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, 134 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 28, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 8, 136 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 29, -1 },
+    { 20, 130 },
+    { -1, -1 },
+    { 5, -1 },
+    { -1, -1 },
+    { 18, -1 },
+    { 6, 128 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 26, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 9, -1 },
+    { 10, -1 },
+    { 23, -1 },
+    { 24, -1 },
+    { 30, 132 },
+    { 31, -1 },
+    { 33, -1 },
+    { 37, -1 },
+    { 38, -1 },
+    { 39, -1 },
+    { 40, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestDOMJITPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDOMJITConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "anyAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITAnyAttr), (intptr_t) (0) } },
-    { "booleanAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITBooleanAttr), (intptr_t) (0) } },
-    { "byteAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteAttr), (intptr_t) (0) } },
-    { "octetAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITOctetAttr), (intptr_t) (0) } },
-    { "shortAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITShortAttr), (intptr_t) (0) } },
-    { "unsignedShortAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedShortAttr), (intptr_t) (0) } },
-    { "longAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongAttr), (intptr_t) (0) } },
-    { "unsignedLongAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongAttr), (intptr_t) (0) } },
-    { "longLongAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongLongAttr), (intptr_t) (0) } },
-    { "unsignedLongLongAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongLongAttr), (intptr_t) (0) } },
-    { "floatAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITFloatAttr), (intptr_t) (0) } },
-    { "unrestrictedFloatAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedFloatAttr), (intptr_t) (0) } },
-    { "doubleAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDoubleAttr), (intptr_t) (0) } },
-    { "unrestrictedDoubleAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedDoubleAttr), (intptr_t) (0) } },
-    { "domStringAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDomStringAttr), (intptr_t) (0) } },
-    { "byteStringAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteStringAttr), (intptr_t) (0) } },
-    { "usvStringAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUsvStringAttr), (intptr_t) (0) } },
-    { "nodeAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITNodeAttr), (intptr_t) (0) } },
-    { "booleanNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITBooleanNullableAttr), (intptr_t) (0) } },
-    { "byteNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteNullableAttr), (intptr_t) (0) } },
-    { "octetNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITOctetNullableAttr), (intptr_t) (0) } },
-    { "shortNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITShortNullableAttr), (intptr_t) (0) } },
-    { "unsignedShortNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedShortNullableAttr), (intptr_t) (0) } },
-    { "longNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongNullableAttr), (intptr_t) (0) } },
-    { "unsignedLongNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongNullableAttr), (intptr_t) (0) } },
-    { "longLongNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongLongNullableAttr), (intptr_t) (0) } },
-    { "unsignedLongLongNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongLongNullableAttr), (intptr_t) (0) } },
-    { "floatNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITFloatNullableAttr), (intptr_t) (0) } },
-    { "unrestrictedFloatNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedFloatNullableAttr), (intptr_t) (0) } },
-    { "doubleNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDoubleNullableAttr), (intptr_t) (0) } },
-    { "unrestrictedDoubleNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedDoubleNullableAttr), (intptr_t) (0) } },
-    { "domStringNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDomStringNullableAttr), (intptr_t) (0) } },
-    { "byteStringNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteStringNullableAttr), (intptr_t) (0) } },
-    { "usvStringNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUsvStringNullableAttr), (intptr_t) (0) } },
-    { "nodeNullableAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute), NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITNodeNullableAttr), (intptr_t) (0) } },
-    { "getAttribute", static_cast<unsigned>(JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_getAttribute), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITGetAttribute) } },
-    { "item", static_cast<unsigned>(JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_item), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITItem) } },
-    { "hasAttribute", static_cast<unsigned>(JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_hasAttribute), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITHasAttribute) } },
-    { "getElementById", static_cast<unsigned>(JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_getElementById), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITGetElementById) } },
-    { "getElementsByName", static_cast<unsigned>(JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_getElementsByName), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITGetElementsByName) } },
</del><ins>+    { "anyAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITAnyAttr), (intptr_t) (nullptr) } },
+    { "booleanAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITBooleanAttr), (intptr_t) (nullptr) } },
+    { "byteAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteAttr), (intptr_t) (nullptr) } },
+    { "octetAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITOctetAttr), (intptr_t) (nullptr) } },
+    { "shortAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITShortAttr), (intptr_t) (nullptr) } },
+    { "unsignedShortAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedShortAttr), (intptr_t) (nullptr) } },
+    { "longAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongAttr), (intptr_t) (nullptr) } },
+    { "unsignedLongAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongAttr), (intptr_t) (nullptr) } },
+    { "longLongAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongLongAttr), (intptr_t) (nullptr) } },
+    { "unsignedLongLongAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongLongAttr), (intptr_t) (nullptr) } },
+    { "floatAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITFloatAttr), (intptr_t) (nullptr) } },
+    { "unrestrictedFloatAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedFloatAttr), (intptr_t) (nullptr) } },
+    { "doubleAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDoubleAttr), (intptr_t) (nullptr) } },
+    { "unrestrictedDoubleAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedDoubleAttr), (intptr_t) (nullptr) } },
+    { "domStringAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDomStringAttr), (intptr_t) (nullptr) } },
+    { "byteStringAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteStringAttr), (intptr_t) (nullptr) } },
+    { "usvStringAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUsvStringAttr), (intptr_t) (nullptr) } },
+    { "nodeAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITNodeAttr), (intptr_t) (nullptr) } },
+    { "booleanNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITBooleanNullableAttr), (intptr_t) (nullptr) } },
+    { "byteNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteNullableAttr), (intptr_t) (nullptr) } },
+    { "octetNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITOctetNullableAttr), (intptr_t) (nullptr) } },
+    { "shortNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITShortNullableAttr), (intptr_t) (nullptr) } },
+    { "unsignedShortNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedShortNullableAttr), (intptr_t) (nullptr) } },
+    { "longNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongNullableAttr), (intptr_t) (nullptr) } },
+    { "unsignedLongNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongNullableAttr), (intptr_t) (nullptr) } },
+    { "longLongNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongLongNullableAttr), (intptr_t) (nullptr) } },
+    { "unsignedLongLongNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongLongNullableAttr), (intptr_t) (nullptr) } },
+    { "floatNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITFloatNullableAttr), (intptr_t) (nullptr) } },
+    { "unrestrictedFloatNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedFloatNullableAttr), (intptr_t) (nullptr) } },
+    { "doubleNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDoubleNullableAttr), (intptr_t) (nullptr) } },
+    { "unrestrictedDoubleNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedDoubleNullableAttr), (intptr_t) (nullptr) } },
+    { "domStringNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDomStringNullableAttr), (intptr_t) (nullptr) } },
+    { "byteStringNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteStringNullableAttr), (intptr_t) (nullptr) } },
+    { "usvStringNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUsvStringNullableAttr), (intptr_t) (nullptr) } },
+    { "nodeNullableAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITNodeNullableAttr), (intptr_t) (nullptr) } },
+    { "getAttribute", JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_getAttribute), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITGetAttribute) } },
+    { "item", JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_item), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITItem) } },
+    { "hasAttribute", JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_hasAttribute), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITHasAttribute) } },
+    { "getElementById", JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_getElementById), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITGetElementById) } },
+    { "getElementsByName", JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DOMJITFunction, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDOMJITPrototypeFunction_getElementsByName), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITGetElementsByName) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDOMJITPrototype::s_info = { "TestDOMJIT", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDOMJITPrototype) };
</del><ins>+static const HashTable JSTestDOMJITPrototypeTable = { 41, 127, true, JSTestDOMJIT::info(), JSTestDOMJITPrototypeTableValues, JSTestDOMJITPrototypeTableIndex };
+const ClassInfo JSTestDOMJITPrototype::s_info = { "TestDOMJIT", &Base::s_info, &JSTestDOMJITPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestDOMJITPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestDOMJITPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.cpp    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.cpp       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -138,11 +138,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONPrototype, JSTestDefaultToJSONPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestDefaultToJSONDOMConstructor = JSDOMConstructorNotConstructable<JSTestDefaultToJSON>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestDefaultToJSONDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestDefaultToJSONDOMConstructor::s_info = { "TestDefaultToJSON", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestDefaultToJSONDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -158,58 +161,134 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+static JSValue createJSTestDefaultToJSONPrototype_longAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestDefaultToJSON_longAttribute, nullptr, DOMAttributeAnnotation { JSTestDefaultToJSON::info(), nullptr });
+}
</ins><span class="cx"> 
</span><ins>+static bool isEnabledJSTestDefaultToJSONPrototype_longAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return RuntimeEnabledFeatures::sharedFeatures().testRuntimeEnabledEnabled();
+}
+
+static JSValue createJSTestDefaultToJSONPrototype_enabledBySettingsAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestDefaultToJSON_enabledBySettingsAttribute, nullptr, DOMAttributeAnnotation { JSTestDefaultToJSON::info(), nullptr });
+}
+
+static bool isEnabledJSTestDefaultToJSONPrototype_enabledBySettingsAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled;
+}
+
+/* Hash table for Prototype */
+
+static const struct CompactHashIndex JSTestDefaultToJSONPrototypeTableIndex[66] = {
+    { 16, -1 },
+    { -1, -1 },
+    { 17, -1 },
+    { 6, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 11, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 14, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 8, -1 },
+    { 5, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 13, 65 },
+    { 12, 64 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 10, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 9, -1 },
+    { -1, -1 },
+    { 15, -1 },
+    { 18, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestDefaultToJSONPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "longAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_longAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "enabledBySettingsAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_enabledBySettingsAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "longAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestDefaultToJSONPrototype_longAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestDefaultToJSONPrototype_longAttribute) } },
+    { "enabledBySettingsAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestDefaultToJSONPrototype_enabledBySettingsAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestDefaultToJSONPrototype_enabledBySettingsAttribute) } },
</ins><span class="cx"> #if ENABLE(TEST_CONDITIONAL)
</span><del>-    { "enabledByConditionalAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_enabledByConditionalAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "enabledByConditionalAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_enabledByConditionalAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "eventHandlerAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_eventHandlerAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_eventHandlerAttribute) } },
-    { "firstStringAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_firstStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_firstStringAttribute) } },
-    { "secondLongAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_secondLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_secondLongAttribute) } },
-    { "thirdUnJSONableAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_thirdUnJSONableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_thirdUnJSONableAttribute) } },
-    { "fourthUnrestrictedDoubleAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_fourthUnrestrictedDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_fourthUnrestrictedDoubleAttribute) } },
-    { "fifthLongClampedAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_fifthLongClampedAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_fifthLongClampedAttribute) } },
-    { "sixthTypedefAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_sixthTypedefAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_sixthTypedefAttribute) } },
-    { "seventhDirectlyToJSONableAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_seventhDirectlyToJSONableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_seventhDirectlyToJSONableAttribute) } },
-    { "eighthIndirectlyAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_eighthIndirectlyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_eighthIndirectlyAttribute) } },
-    { "ninthOptionalDirectlyToJSONableAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_ninthOptionalDirectlyToJSONableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_ninthOptionalDirectlyToJSONableAttribute) } },
-    { "tenthFrozenArrayAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_tenthFrozenArrayAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_tenthFrozenArrayAttribute) } },
-    { "eleventhSequenceAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_eleventhSequenceAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_eleventhSequenceAttribute) } },
-    { "twelfthInterfaceSequenceAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_twelfthInterfaceSequenceAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_twelfthInterfaceSequenceAttribute) } },
-    { "thirteenthRecordAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_thirteenthRecordAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_thirteenthRecordAttribute) } },
</del><ins>+    { "eventHandlerAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_eventHandlerAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_eventHandlerAttribute) } },
+    { "firstStringAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_firstStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_firstStringAttribute) } },
+    { "secondLongAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_secondLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_secondLongAttribute) } },
+    { "thirdUnJSONableAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_thirdUnJSONableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_thirdUnJSONableAttribute) } },
+    { "fourthUnrestrictedDoubleAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_fourthUnrestrictedDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_fourthUnrestrictedDoubleAttribute) } },
+    { "fifthLongClampedAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_fifthLongClampedAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_fifthLongClampedAttribute) } },
+    { "sixthTypedefAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_sixthTypedefAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_sixthTypedefAttribute) } },
+    { "seventhDirectlyToJSONableAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_seventhDirectlyToJSONableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_seventhDirectlyToJSONableAttribute) } },
+    { "eighthIndirectlyAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_eighthIndirectlyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_eighthIndirectlyAttribute) } },
+    { "ninthOptionalDirectlyToJSONableAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_ninthOptionalDirectlyToJSONableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_ninthOptionalDirectlyToJSONableAttribute) } },
+    { "tenthFrozenArrayAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_tenthFrozenArrayAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_tenthFrozenArrayAttribute) } },
+    { "eleventhSequenceAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_eleventhSequenceAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_eleventhSequenceAttribute) } },
+    { "twelfthInterfaceSequenceAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_twelfthInterfaceSequenceAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_twelfthInterfaceSequenceAttribute) } },
+    { "thirteenthRecordAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSON_thirteenthRecordAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSON_thirteenthRecordAttribute) } },
</ins><span class="cx">     { "toJSON", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDefaultToJSONPrototypeFunction_toJSON), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDefaultToJSONPrototype::s_info = { "TestDefaultToJSON", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONPrototype) };
</del><ins>+static const HashTable JSTestDefaultToJSONPrototypeTable = { 19, 63, true, JSTestDefaultToJSON::info(), JSTestDefaultToJSONPrototypeTableValues, JSTestDefaultToJSONPrototypeTableIndex };
+const ClassInfo JSTestDefaultToJSONPrototype::s_info = { "TestDefaultToJSON", &Base::s_info, &JSTestDefaultToJSONPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestDefaultToJSONPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestDefaultToJSON::info(), JSTestDefaultToJSONPrototypeTableValues, *this);
</span><del>-    bool hasDisabledRuntimeProperties = false;
-    if (!RuntimeEnabledFeatures::sharedFeatures().testRuntimeEnabledEnabled()) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("longAttribute"), strlen("longAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("enabledBySettingsAttribute"), strlen("enabledBySettingsAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (hasDisabledRuntimeProperties && structure()->isDictionary())
-        flattenDictionaryObject(vm);
</del><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONFilteredByExposedcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -89,11 +89,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONFilteredByExposedPrototype, JSTestDefaultToJSONFilteredByExposedPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestDefaultToJSONFilteredByExposedDOMConstructor = JSDOMConstructorNotConstructable<JSTestDefaultToJSONFilteredByExposed>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestDefaultToJSONFilteredByExposedDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestDefaultToJSONFilteredByExposedDOMConstructor::s_info = { "TestDefaultToJSONFilteredByExposed", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONFilteredByExposedDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestDefaultToJSONFilteredByExposedDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -109,40 +112,66 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+static JSValue createJSTestDefaultToJSONFilteredByExposedPrototype_filteredByExposedWindowAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestDefaultToJSONFilteredByExposed_filteredByExposedWindowAttribute, nullptr, DOMAttributeAnnotation { JSTestDefaultToJSONFilteredByExposed::info(), nullptr });
+}
</ins><span class="cx"> 
</span><ins>+static bool isEnabledJSTestDefaultToJSONFilteredByExposedPrototype_filteredByExposedWindowAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->isDocument();
+}
+
+static JSValue createJSTestDefaultToJSONFilteredByExposedPrototype_filteredByExposedWorkerAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestDefaultToJSONFilteredByExposed_filteredByExposedWorkerAttribute, nullptr, DOMAttributeAnnotation { JSTestDefaultToJSONFilteredByExposed::info(), nullptr });
+}
+
+static bool isEnabledJSTestDefaultToJSONFilteredByExposedPrototype_filteredByExposedWorkerAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->isWorkerGlobalScope();
+}
+
+/* Hash table for Prototype */
+
+static const struct CompactHashIndex JSTestDefaultToJSONFilteredByExposedPrototypeTableIndex[16] = {
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { 0, -1 },
+    { 3, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestDefaultToJSONFilteredByExposedPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONFilteredByExposedConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "normalAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONFilteredByExposed_normalAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "filteredByExposedWindowAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONFilteredByExposed_filteredByExposedWindowAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "filteredByExposedWorkerAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONFilteredByExposed_filteredByExposedWorkerAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "normalAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONFilteredByExposed_normalAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "filteredByExposedWindowAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestDefaultToJSONFilteredByExposedPrototype_filteredByExposedWindowAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestDefaultToJSONFilteredByExposedPrototype_filteredByExposedWindowAttribute) } },
+    { "filteredByExposedWorkerAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestDefaultToJSONFilteredByExposedPrototype_filteredByExposedWorkerAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestDefaultToJSONFilteredByExposedPrototype_filteredByExposedWorkerAttribute) } },
</ins><span class="cx">     { "toJSON", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDefaultToJSONFilteredByExposedPrototypeFunction_toJSON), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDefaultToJSONFilteredByExposedPrototype::s_info = { "TestDefaultToJSONFilteredByExposed", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONFilteredByExposedPrototype) };
</del><ins>+static const HashTable JSTestDefaultToJSONFilteredByExposedPrototypeTable = { 5, 15, true, JSTestDefaultToJSONFilteredByExposed::info(), JSTestDefaultToJSONFilteredByExposedPrototypeTableValues, JSTestDefaultToJSONFilteredByExposedPrototypeTableIndex };
+const ClassInfo JSTestDefaultToJSONFilteredByExposedPrototype::s_info = { "TestDefaultToJSONFilteredByExposed", &Base::s_info, &JSTestDefaultToJSONFilteredByExposedPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONFilteredByExposedPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestDefaultToJSONFilteredByExposedPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestDefaultToJSONFilteredByExposed::info(), JSTestDefaultToJSONFilteredByExposedPrototypeTableValues, *this);
</span><del>-    bool hasDisabledRuntimeProperties = false;
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isDocument()) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("filteredByExposedWindowAttribute"), strlen("filteredByExposedWindowAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isWorkerGlobalScope()) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("filteredByExposedWorkerAttribute"), strlen("filteredByExposedWorkerAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (hasDisabledRuntimeProperties && structure()->isDictionary())
-        flattenDictionaryObject(vm);
</del><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONIndirectInheritancecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp 2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp    2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -76,11 +76,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONIndirectInheritancePrototype, JSTestDefaultToJSONIndirectInheritancePrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestDefaultToJSONIndirectInheritanceDOMConstructor = JSDOMConstructorNotConstructable<JSTestDefaultToJSONIndirectInheritance>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestDefaultToJSONIndirectInheritanceDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestDefaultToJSONIndirectInheritanceDOMConstructor::s_info = { "TestDefaultToJSONIndirectInheritance", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONIndirectInheritanceDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestDefaultToJSONIndirectInheritanceDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -95,14 +98,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestDefaultToJSONIndirectInheritancePrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestDefaultToJSONIndirectInheritancePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONIndirectInheritanceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDefaultToJSONIndirectInheritancePrototype::s_info = { "TestDefaultToJSONIndirectInheritance", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONIndirectInheritancePrototype) };
</del><ins>+static const HashTable JSTestDefaultToJSONIndirectInheritancePrototypeTable = { 1, 1, true, JSTestDefaultToJSONIndirectInheritance::info(), JSTestDefaultToJSONIndirectInheritancePrototypeTableValues, JSTestDefaultToJSONIndirectInheritancePrototypeTableIndex };
+const ClassInfo JSTestDefaultToJSONIndirectInheritancePrototype::s_info = { "TestDefaultToJSONIndirectInheritance", &Base::s_info, &JSTestDefaultToJSONIndirectInheritancePrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONIndirectInheritancePrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestDefaultToJSONIndirectInheritancePrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONInheritcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -103,11 +103,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONInheritPrototype, JSTestDefaultToJSONInheritPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestDefaultToJSONInheritDOMConstructor = JSDOMConstructorNotConstructable<JSTestDefaultToJSONInherit>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestDefaultToJSONInheritDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestDefaultToJSONInheritDOMConstructor::s_info = { "TestDefaultToJSONInherit", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONInheritDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestDefaultToJSONInheritDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -122,16 +125,29 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestDefaultToJSONInheritPrototypeTableIndex[8] = {
+    { 2, -1 },
+    { 0, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestDefaultToJSONInheritPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONInheritConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "inheritLongAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONInherit_inheritLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSONInherit_inheritLongAttribute) } },
</del><ins>+    { "inheritLongAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONInherit_inheritLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSONInherit_inheritLongAttribute) } },
</ins><span class="cx">     { "toJSON", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDefaultToJSONInheritPrototypeFunction_toJSON), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDefaultToJSONInheritPrototype::s_info = { "TestDefaultToJSONInherit", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONInheritPrototype) };
</del><ins>+static const HashTable JSTestDefaultToJSONInheritPrototypeTable = { 3, 7, true, JSTestDefaultToJSONInherit::info(), JSTestDefaultToJSONInheritPrototypeTableValues, JSTestDefaultToJSONInheritPrototypeTableIndex };
+const ClassInfo JSTestDefaultToJSONInheritPrototype::s_info = { "TestDefaultToJSONInherit", &Base::s_info, &JSTestDefaultToJSONInheritPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONInheritPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestDefaultToJSONInheritPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDefaultToJSONInheritFinalcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -105,11 +105,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONInheritFinalPrototype, JSTestDefaultToJSONInheritFinalPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestDefaultToJSONInheritFinalDOMConstructor = JSDOMConstructorNotConstructable<JSTestDefaultToJSONInheritFinal>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestDefaultToJSONInheritFinalDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestDefaultToJSONInheritFinalDOMConstructor::s_info = { "TestDefaultToJSONInheritFinal", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONInheritFinalDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestDefaultToJSONInheritFinalDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -124,17 +127,31 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestDefaultToJSONInheritFinalPrototypeTableIndex[9] = {
+    { 1, 8 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestDefaultToJSONInheritFinalPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONInheritFinalConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "finalLongAttributeFoo", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONInheritFinal_finalLongAttributeFoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSONInheritFinal_finalLongAttributeFoo) } },
-    { "finalLongAttributeBar", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONInheritFinal_finalLongAttributeBar), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSONInheritFinal_finalLongAttributeBar) } },
</del><ins>+    { "finalLongAttributeFoo", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONInheritFinal_finalLongAttributeFoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSONInheritFinal_finalLongAttributeFoo) } },
+    { "finalLongAttributeBar", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDefaultToJSONInheritFinal_finalLongAttributeBar), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDefaultToJSONInheritFinal_finalLongAttributeBar) } },
</ins><span class="cx">     { "toJSON", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDefaultToJSONInheritFinalPrototypeFunction_toJSON), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDefaultToJSONInheritFinalPrototype::s_info = { "TestDefaultToJSONInheritFinal", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONInheritFinalPrototype) };
</del><ins>+static const HashTable JSTestDefaultToJSONInheritFinalPrototypeTable = { 4, 7, true, JSTestDefaultToJSONInheritFinal::info(), JSTestDefaultToJSONInheritFinalPrototypeTableValues, JSTestDefaultToJSONInheritFinalPrototypeTableIndex };
+const ClassInfo JSTestDefaultToJSONInheritFinalPrototype::s_info = { "TestDefaultToJSONInheritFinal", &Base::s_info, &JSTestDefaultToJSONInheritFinalPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestDefaultToJSONInheritFinalPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestDefaultToJSONInheritFinalPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDelegateToSharedSyntheticAttributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp       2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp  2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -84,11 +84,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDelegateToSharedSyntheticAttributePrototype, JSTestDelegateToSharedSyntheticAttributePrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestDelegateToSharedSyntheticAttributeDOMConstructor = JSDOMConstructorNotConstructable<JSTestDelegateToSharedSyntheticAttribute>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestDelegateToSharedSyntheticAttributeDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestDelegateToSharedSyntheticAttributeDOMConstructor::s_info = { "TestDelegateToSharedSyntheticAttribute", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDelegateToSharedSyntheticAttributeDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestDelegateToSharedSyntheticAttributeDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -104,19 +107,42 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestDelegateToSharedSyntheticAttributePrototypeTableIndex[18] = {
+    { 5, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { 1, 16 },
+    { 0, 17 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { 3, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestDelegateToSharedSyntheticAttributePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "property1", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute1) } },
-    { "property2", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute1) } },
-    { "property3", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute1) } },
-    { "property4", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute2) } },
-    { "property5", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute2) } },
</del><ins>+    { "property1", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute1) } },
+    { "property2", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute1) } },
+    { "property3", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute1) } },
+    { "property4", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute2) } },
+    { "property5", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDelegateToSharedSyntheticAttribute_sharedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDelegateToSharedSyntheticAttribute_sharedAttribute2) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDelegateToSharedSyntheticAttributePrototype::s_info = { "TestDelegateToSharedSyntheticAttribute", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDelegateToSharedSyntheticAttributePrototype) };
</del><ins>+static const HashTable JSTestDelegateToSharedSyntheticAttributePrototypeTable = { 6, 15, true, JSTestDelegateToSharedSyntheticAttribute::info(), JSTestDelegateToSharedSyntheticAttributePrototypeTableValues, JSTestDelegateToSharedSyntheticAttributePrototypeTableIndex };
+const ClassInfo JSTestDelegateToSharedSyntheticAttributePrototype::s_info = { "TestDelegateToSharedSyntheticAttribute", &Base::s_info, &JSTestDelegateToSharedSyntheticAttributePrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestDelegateToSharedSyntheticAttributePrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestDelegateToSharedSyntheticAttributePrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDomainSecuritycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -94,25 +94,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDomainSecurityPrototype, JSTestDomainSecurityPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestDomainSecurityDOMConstructor = JSDOMConstructorNotConstructable<JSTestDomainSecurity>;
</span><span class="cx"> 
</span><del>-/* Hash table */
-
-static const struct CompactHashIndex JSTestDomainSecurityTableIndex[2] = {
-    { 0, -1 },
-    { -1, -1 },
-};
-
-
-static const HashTableValue JSTestDomainSecurityTableValues[] =
-{
-    { "excitingAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDomainSecurity_excitingAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-};
-
-static const HashTable JSTestDomainSecurityTable = { 1, 1, true, JSTestDomainSecurity::info(), JSTestDomainSecurityTableValues, JSTestDomainSecurityTableIndex };
</del><ins>+template<> const unsigned JSTestDomainSecurityDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestDomainSecurityDOMConstructor::s_info = { "TestDomainSecurity", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDomainSecurityDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestDomainSecurityDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -128,8 +117,22 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestDomainSecurityPrototypeTableIndex[10] = {
+    { -1, -1 },
+    { 0, 8 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, 9 },
+    { 3, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestDomainSecurityPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDomainSecurityConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="lines">@@ -138,7 +141,8 @@
</span><span class="cx">     { "overloadedMethod", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestDomainSecurityPrototypeFunction_overloadedMethod), (intptr_t) (1) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDomainSecurityPrototype::s_info = { "TestDomainSecurity", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDomainSecurityPrototype) };
</del><ins>+static const HashTable JSTestDomainSecurityPrototypeTable = { 4, 7, true, JSTestDomainSecurity::info(), JSTestDomainSecurityPrototypeTableValues, JSTestDomainSecurityPrototypeTableIndex };
+const ClassInfo JSTestDomainSecurityPrototype::s_info = { "TestDomainSecurity", &Base::s_info, &JSTestDomainSecurityPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestDomainSecurityPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestDomainSecurityPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="lines">@@ -147,8 +151,22 @@
</span><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestDomainSecurity::s_info = { "TestDomainSecurity", &Base::s_info, &JSTestDomainSecurityTable, nullptr, CREATE_METHOD_TABLE(JSTestDomainSecurity) };
</del><ins>+/* Hash table for Instance */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestDomainSecurityInstanceTableIndex[2] = {
+    { 0, -1 },
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestDomainSecurityInstanceTableValues[] =
+{
+    { "excitingAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDomainSecurity_excitingAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+};
+
+static const HashTable JSTestDomainSecurityInstanceTable = { 1, 1, true, JSTestDomainSecurity::info(), JSTestDomainSecurityInstanceTableValues, JSTestDomainSecurityInstanceTableIndex };
+const ClassInfo JSTestDomainSecurity::s_info = { "TestDomainSecurity", &Base::s_info, &JSTestDomainSecurityInstanceTable, nullptr, CREATE_METHOD_TABLE(JSTestDomainSecurity) };
+
</ins><span class="cx"> JSTestDomainSecurity::JSTestDomainSecurity(Structure* structure, JSDOMGlobalObject& globalObject, Ref<TestDomainSecurity>&& impl)
</span><span class="cx">     : JSDOMWrapper<TestDomainSecurity>(structure, globalObject, WTFMove(impl))
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEnabledBySettingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp 2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp    2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -106,35 +106,42 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestEnabledBySettingPrototype, JSTestEnabledBySettingPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestEnabledBySettingDOMConstructor = JSDOMConstructorNotConstructable<JSTestEnabledBySetting>;
</span><span class="cx"> 
</span><del>-/* Hash table */
</del><ins>+static JSValue createJSTestEnabledBySettingConstructor_enabledBySettingConstant(VM&, JSObject*)
+{
+    return jsNumber(0);
+}
</ins><span class="cx"> 
</span><del>-static const struct CompactHashIndex JSTestEnabledBySettingTableIndex[2] = {
-    { -1, -1 },
-    { -1, -1 },
-};
</del><ins>+static bool isEnabledJSTestEnabledBySettingConstructor_enabledBySettingConstant(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled;
+}
</ins><span class="cx"> 
</span><ins>+/* Hash table for Constructor */
</ins><span class="cx"> 
</span><del>-static const HashTableValue JSTestEnabledBySettingTableValues[] =
-{
-    { 0, 0, NoIntrinsic, { 0, 0 } }
</del><ins>+static const struct CompactHashIndex JSTestEnabledBySettingConstructorTableIndex[2] = {
+    { 0, -1 },
+    { -1, -1 },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEnabledBySettingTable = { 0, 1, false, JSTestEnabledBySetting::info(), JSTestEnabledBySettingTableValues, JSTestEnabledBySettingTableIndex };
-/* Hash table for constructor */
</del><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestEnabledBySettingConstructorTableValues[] =
</span><span class="cx"> {
</span><del>-    { "enabledBySettingConstant", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(0) } },
</del><ins>+    { "enabledBySettingConstant", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledBySettingConstructor_enabledBySettingConstant), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledBySettingConstructor_enabledBySettingConstant) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><ins>+static const HashTable JSTestEnabledBySettingConstructorTable = { 1, 1, true, nullptr, JSTestEnabledBySettingConstructorTableValues, JSTestEnabledBySettingConstructorTableIndex };
</ins><span class="cx"> static_assert(TestEnabledBySetting::enabledBySettingConstant == 0, "enabledBySettingConstant in TestEnabledBySetting does not match value from IDL");
</span><span class="cx"> 
</span><del>-template<> const ClassInfo JSTestEnabledBySettingDOMConstructor::s_info = { "TestEnabledBySetting", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEnabledBySettingDOMConstructor) };
</del><ins>+template<> const unsigned JSTestEnabledBySettingDOMConstructor::StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
+template<> const ClassInfo JSTestEnabledBySettingDOMConstructor::s_info = { "TestEnabledBySetting", &Base::s_info, &JSTestEnabledBySettingConstructorTable, nullptr, CREATE_METHOD_TABLE(JSTestEnabledBySettingDOMConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestEnabledBySettingDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="cx"> {
</span><span class="lines">@@ -147,94 +154,167 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->prototype, JSTestEnabledBySetting::prototype(vm, globalObject), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames->name, jsNontrivialString(vm, "TestEnabledBySetting"_s), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><del>-    reifyStaticProperties(vm, JSTestEnabledBySetting::info(), JSTestEnabledBySettingConstructorTableValues, *this);
-    if (!jsCast<JSDOMGlobalObject*>(&globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled) {
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("enabledBySettingConstant"), strlen("enabledBySettingConstant"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, &globalObject, propertyName, slot);
-    }
</del><ins>+    reifyStaticProperties(vm, nullptr, JSTestEnabledBySettingConstructorTableValues, *this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+#if ENABLE(TEST_FEATURE)
+static JSValue createJSTestEnabledBySettingPrototype_enabledBySettingAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestEnabledBySetting_enabledBySettingAttribute, setJSTestEnabledBySetting_enabledBySettingAttribute, DOMAttributeAnnotation { JSTestEnabledBySetting::info(), nullptr });
+}
</ins><span class="cx"> 
</span><ins>+static bool isEnabledJSTestEnabledBySettingPrototype_enabledBySettingAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled;
+}
+#endif
+
+#if ENABLE(TEST_FEATURE)
+static JSValue createJSTestEnabledBySettingPrototype_enabledByTwoSettingsAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestEnabledBySetting_enabledByTwoSettingsAttribute, setJSTestEnabledBySetting_enabledByTwoSettingsAttribute, DOMAttributeAnnotation { JSTestEnabledBySetting::info(), nullptr });
+}
+
+static bool isEnabledJSTestEnabledBySettingPrototype_enabledByTwoSettingsAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return (jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled && jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().otherTestSettingEnabled);
+}
+#endif
+
+static JSValue createJSTestEnabledBySettingPrototype_supplementalAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestEnabledBySetting_supplementalAttribute, setJSTestEnabledBySetting_supplementalAttribute, DOMAttributeAnnotation { JSTestEnabledBySetting::info(), nullptr });
+}
+
+static bool isEnabledJSTestEnabledBySettingPrototype_supplementalAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return (jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingFromPartialInterfaceAttributeEnabled && jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingFromPartialInterfaceEnabled);
+}
+
+#if ENABLE(TEST_FEATURE)
+static JSValue createJSTestEnabledBySettingPrototype_enabledBySettingOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 1, "enabledBySettingOperation"_s, jsTestEnabledBySettingPrototypeFunction_enabledBySettingOperation);
+}
+
+static bool isEnabledJSTestEnabledBySettingPrototype_enabledBySettingOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled;
+}
+#endif
+
+static JSValue createJSTestEnabledBySettingPrototype_enabledBySettingConstant(VM&, JSObject*)
+{
+    return jsNumber(0);
+}
+
+static bool isEnabledJSTestEnabledBySettingPrototype_enabledBySettingConstant(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled;
+}
+
+/* Hash table for Prototype */
+
+static const struct CompactHashIndex JSTestEnabledBySettingPrototypeTableIndex[17] = {
+    { 3, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, 16 },
+    { 5, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestEnabledBySettingPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEnabledBySettingConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><del>-    { "enabledBySettingAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEnabledBySetting_enabledBySettingAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestEnabledBySetting_enabledBySettingAttribute) } },
</del><ins>+    { "enabledBySettingAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledBySettingPrototype_enabledBySettingAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledBySettingPrototype_enabledBySettingAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><del>-    { "enabledByTwoSettingsAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEnabledBySetting_enabledByTwoSettingsAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestEnabledBySetting_enabledByTwoSettingsAttribute) } },
</del><ins>+    { "enabledByTwoSettingsAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledBySettingPrototype_enabledByTwoSettingsAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledBySettingPrototype_enabledByTwoSettingsAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "supplementalAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEnabledBySetting_supplementalAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestEnabledBySetting_supplementalAttribute) } },
</del><ins>+    { "supplementalAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledBySettingPrototype_supplementalAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledBySettingPrototype_supplementalAttribute) } },
</ins><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><del>-    { "enabledBySettingOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestEnabledBySettingPrototypeFunction_enabledBySettingOperation), (intptr_t) (1) } },
</del><ins>+    { "enabledBySettingOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledBySettingPrototype_enabledBySettingOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledBySettingPrototype_enabledBySettingOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "enabledBySettingConstant", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(0) } },
</del><ins>+    { "enabledBySettingConstant", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledBySettingPrototype_enabledBySettingConstant), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledBySettingPrototype_enabledBySettingConstant) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestEnabledBySettingPrototype::s_info = { "TestEnabledBySetting", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEnabledBySettingPrototype) };
</del><ins>+static const HashTable JSTestEnabledBySettingPrototypeTable = { 6, 15, true, JSTestEnabledBySetting::info(), JSTestEnabledBySettingPrototypeTableValues, JSTestEnabledBySettingPrototypeTableIndex };
+const ClassInfo JSTestEnabledBySettingPrototype::s_info = { "TestEnabledBySetting", &Base::s_info, &JSTestEnabledBySettingPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestEnabledBySettingPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestEnabledBySettingPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestEnabledBySetting::info(), JSTestEnabledBySettingPrototypeTableValues, *this);
</span><del>-    bool hasDisabledRuntimeProperties = false;
-#if ENABLE(TEST_FEATURE)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("enabledBySettingOperation"), strlen("enabledBySettingOperation"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(TEST_FEATURE)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("enabledBySettingAttribute"), strlen("enabledBySettingAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-#if ENABLE(TEST_FEATURE)
-    if (!(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled && jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().otherTestSettingEnabled)) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("enabledByTwoSettingsAttribute"), strlen("enabledByTwoSettingsAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-    if (!(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingFromPartialInterfaceAttributeEnabled && jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingFromPartialInterfaceEnabled)) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("supplementalAttribute"), strlen("supplementalAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("enabledBySettingConstant"), strlen("enabledBySettingConstant"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (hasDisabledRuntimeProperties && structure()->isDictionary())
-        flattenDictionaryObject(vm);
</del><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestEnabledBySetting::s_info = { "TestEnabledBySetting", &Base::s_info, &JSTestEnabledBySettingTable, nullptr, CREATE_METHOD_TABLE(JSTestEnabledBySetting) };
</del><ins>+static JSValue createJSTestEnabledBySettingInstance_TestSubObjEnabledBySetting(VM& vm, JSObject*)
+{
+    return CustomGetterSetter::create(vm, jsTestEnabledBySetting_TestSubObjEnabledBySettingConstructor, nullptr);
+}
</ins><span class="cx"> 
</span><ins>+static bool isEnabledJSTestEnabledBySettingInstance_TestSubObjEnabledBySetting(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled;
+}
+
+static JSValue createJSTestEnabledBySettingInstance_TestSubObjEnabledBySettingPrivatePublic(VM& vm, JSObject*)
+{
+    return CustomGetterSetter::create(vm, jsTestEnabledBySetting_TestSubObjEnabledBySettingPrivatePublicConstructor, nullptr);
+}
+
+static bool isEnabledJSTestEnabledBySettingInstance_TestSubObjEnabledBySettingPrivatePublic(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled;
+}
+
+/* Hash table for Instance */
+
+static const struct CompactHashIndex JSTestEnabledBySettingInstanceTableIndex[5] = {
+    { -1, -1 },
+    { -1, -1 },
+    { 0, 4 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
+static const HashTableValue JSTestEnabledBySettingInstanceTableValues[] =
+{
+    { "TestSubObjEnabledBySetting", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledBySettingInstance_TestSubObjEnabledBySetting), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledBySettingInstance_TestSubObjEnabledBySetting) } },
+    { "TestSubObjEnabledBySettingPrivatePublic", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledBySettingInstance_TestSubObjEnabledBySettingPrivatePublic), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledBySettingInstance_TestSubObjEnabledBySettingPrivatePublic) } },
+};
+
+static const HashTable JSTestEnabledBySettingInstanceTable = { 2, 3, true, JSTestEnabledBySetting::info(), JSTestEnabledBySettingInstanceTableValues, JSTestEnabledBySettingInstanceTableIndex };
+const ClassInfo JSTestEnabledBySetting::s_info = { "TestEnabledBySetting", &Base::s_info, &JSTestEnabledBySettingInstanceTable, nullptr, CREATE_METHOD_TABLE(JSTestEnabledBySetting) };
+
</ins><span class="cx"> JSTestEnabledBySetting::JSTestEnabledBySetting(Structure* structure, JSDOMGlobalObject& globalObject, Ref<TestEnabledBySetting>&& impl)
</span><span class="cx">     : JSDOMWrapper<TestEnabledBySetting>(structure, globalObject, WTFMove(impl))
</span><span class="cx"> {
</span><span class="lines">@@ -248,13 +328,9 @@
</span><span class="cx">     static_assert(!std::is_base_of<ActiveDOMObject, TestEnabledBySetting>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
</span><span class="cx"> 
</span><span class="cx">     if (jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled)
</span><del>-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestSubObjEnabledBySettingPublicName(), CustomGetterSetter::create(vm, jsTestEnabledBySetting_TestSubObjEnabledBySettingConstructor, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::DontEnum)));
</del><ins>+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestSubObjEnabledBySettingPrivatePrivateName(), CustomGetterSetter::create(vm, jsTestEnabledBySetting_TestSubObjEnabledBySettingPrivateConstructor, nullptr), static_cast<unsigned>(JSC::PropertyAttribute::CustomValue));
</ins><span class="cx">     if (jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled)
</span><del>-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestSubObjEnabledBySettingPrivatePrivateName(), CustomGetterSetter::create(vm, jsTestEnabledBySetting_TestSubObjEnabledBySettingPrivateConstructor, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::DontEnum)));
-    if (jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled) {
-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestSubObjEnabledBySettingPrivatePublicPublicName(), CustomGetterSetter::create(vm, jsTestEnabledBySetting_TestSubObjEnabledBySettingPrivatePublicConstructor, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::DontEnum)));
-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestSubObjEnabledBySettingPrivatePublicPrivateName(), CustomGetterSetter::create(vm, jsTestEnabledBySetting_TestSubObjEnabledBySettingPrivatePublicConstructor, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::DontEnum)));
-    }
</del><ins>+        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestSubObjEnabledBySettingPrivatePublicPrivateName(), CustomGetterSetter::create(vm, jsTestEnabledBySetting_TestSubObjEnabledBySettingPrivatePublicConstructor, nullptr), static_cast<unsigned>(JSC::PropertyAttribute::CustomValue));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestEnabledBySetting::createPrototype(VM& vm, JSDOMGlobalObject& globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEnabledForContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -80,11 +80,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestEnabledForContextPrototype, JSTestEnabledForContextPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestEnabledForContextDOMConstructor = JSDOMConstructorNotConstructable<JSTestEnabledForContext>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestEnabledForContextDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestEnabledForContextDOMConstructor::s_info = { "TestEnabledForContext", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEnabledForContextDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestEnabledForContextDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -100,14 +103,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestEnabledForContextPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestEnabledForContextPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEnabledForContextConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestEnabledForContextPrototype::s_info = { "TestEnabledForContext", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEnabledForContextPrototype) };
</del><ins>+static const HashTable JSTestEnabledForContextPrototypeTable = { 1, 1, true, JSTestEnabledForContext::info(), JSTestEnabledForContextPrototypeTableValues, JSTestEnabledForContextPrototypeTableIndex };
+const ClassInfo JSTestEnabledForContextPrototype::s_info = { "TestEnabledForContext", &Base::s_info, &JSTestEnabledForContextPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestEnabledForContextPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestEnabledForContextPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="lines">@@ -116,8 +126,33 @@
</span><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestEnabledForContext::s_info = { "TestEnabledForContext", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEnabledForContext) };
</del><ins>+static JSValue createJSTestEnabledForContextInstance_TestSubObjEnabledForContext(VM& vm, JSObject*)
+{
+    return CustomGetterSetter::create(vm, jsTestEnabledForContext_TestSubObjEnabledForContextConstructor, nullptr);
+}
</ins><span class="cx"> 
</span><ins>+static bool isEnabledJSTestEnabledForContextInstance_TestSubObjEnabledForContext(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return (jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled && TestSubObjEnabledForContext::enabledForContext(*jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()));
+}
+
+/* Hash table for Instance */
+
+static const struct CompactHashIndex JSTestEnabledForContextInstanceTableIndex[2] = {
+    { 0, -1 },
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestEnabledForContextInstanceTableValues[] =
+{
+    { "TestSubObjEnabledForContext", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestEnabledForContextInstance_TestSubObjEnabledForContext), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestEnabledForContextInstance_TestSubObjEnabledForContext) } },
+};
+
+static const HashTable JSTestEnabledForContextInstanceTable = { 1, 1, true, JSTestEnabledForContext::info(), JSTestEnabledForContextInstanceTableValues, JSTestEnabledForContextInstanceTableIndex };
+const ClassInfo JSTestEnabledForContext::s_info = { "TestEnabledForContext", &Base::s_info, &JSTestEnabledForContextInstanceTable, nullptr, CREATE_METHOD_TABLE(JSTestEnabledForContext) };
+
</ins><span class="cx"> JSTestEnabledForContext::JSTestEnabledForContext(Structure* structure, JSDOMGlobalObject& globalObject, Ref<TestEnabledForContext>&& impl)
</span><span class="cx">     : JSDOMWrapper<TestEnabledForContext>(structure, globalObject, WTFMove(impl))
</span><span class="cx"> {
</span><span class="lines">@@ -130,8 +165,6 @@
</span><span class="cx"> 
</span><span class="cx">     static_assert(!std::is_base_of<ActiveDOMObject, TestEnabledForContext>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
</span><span class="cx"> 
</span><del>-    if ((jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled && TestSubObjEnabledForContext::enabledForContext(*jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())))
-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().TestSubObjEnabledForContextPublicName(), CustomGetterSetter::create(vm, jsTestEnabledForContext_TestSubObjEnabledForContextConstructor, nullptr), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::DontEnum)));
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestEnabledForContext::createPrototype(VM& vm, JSDOMGlobalObject& globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp 2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp    2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -161,6 +161,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestEventConstructorPrototype, JSTestEventConstructorPrototype::Base);
</span><span class="cx"> 
</span><span class="lines">@@ -191,6 +193,7 @@
</span><span class="cx"> }
</span><span class="cx"> JSC_ANNOTATE_HOST_FUNCTION(JSTestEventConstructorDOMConstructorConstruct, JSTestEventConstructorDOMConstructor::construct);
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestEventConstructorDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestEventConstructorDOMConstructor::s_info = { "TestEventConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEventConstructorDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestEventConstructorDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -205,21 +208,35 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(1), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestEventConstructorPrototypeTableIndex[9] = {
+    { 3, -1 },
+    { 0, 8 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestEventConstructorPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "attr1", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructor_attr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "attr2", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructor_attr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "attr1", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructor_attr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "attr2", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructor_attr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #if ENABLE(SPECIAL_EVENT)
</span><del>-    { "attr3", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructor_attr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "attr3", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructor_attr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestEventConstructorPrototype::s_info = { "TestEventConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEventConstructorPrototype) };
</del><ins>+static const HashTable JSTestEventConstructorPrototypeTable = { 4, 7, true, JSTestEventConstructor::info(), JSTestEventConstructorPrototypeTableValues, JSTestEventConstructorPrototypeTableIndex };
+const ClassInfo JSTestEventConstructorPrototype::s_info = { "TestEventConstructor", &Base::s_info, &JSTestEventConstructorPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestEventConstructorPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestEventConstructorPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -87,11 +87,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestEventTargetPrototype, JSTestEventTargetPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestEventTargetDOMConstructor = JSDOMConstructorNotConstructable<JSTestEventTarget>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestEventTargetDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestEventTargetDOMConstructor::s_info = { "TestEventTarget", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEventTargetDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestEventTargetDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -106,8 +109,16 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestEventTargetPrototypeTableIndex[4] = {
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestEventTargetPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventTargetConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="lines">@@ -114,7 +125,8 @@
</span><span class="cx">     { "item", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestEventTargetPrototypeFunction_item), (intptr_t) (1) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestEventTargetPrototype::s_info = { "TestEventTarget", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEventTargetPrototype) };
</del><ins>+static const HashTable JSTestEventTargetPrototypeTable = { 2, 3, true, JSTestEventTarget::info(), JSTestEventTargetPrototypeTableValues, JSTestEventTargetPrototypeTableIndex };
+const ClassInfo JSTestEventTargetPrototype::s_info = { "TestEventTarget", &Base::s_info, &JSTestEventTargetPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestEventTargetPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestEventTargetPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -80,11 +80,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestExceptionPrototype, JSTestExceptionPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestExceptionDOMConstructor = JSDOMConstructorNotConstructable<JSTestException>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestExceptionDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestExceptionDOMConstructor::s_info = { "TestException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestExceptionDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestExceptionDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -100,15 +103,25 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestExceptionPrototypeTableIndex[5] = {
+    { -1, -1 },
+    { 0, 4 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestExceptionPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "name", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestException_name), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "name", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestException_name), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestExceptionPrototype::s_info = { "TestException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestExceptionPrototype) };
</del><ins>+static const HashTable JSTestExceptionPrototypeTable = { 2, 3, true, JSTestException::info(), JSTestExceptionPrototypeTableValues, JSTestExceptionPrototypeTableIndex };
+const ClassInfo JSTestExceptionPrototype::s_info = { "TestException", &Base::s_info, &JSTestExceptionPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestExceptionPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestExceptionPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateAddOpaqueRootcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -80,11 +80,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestGenerateAddOpaqueRootPrototype, JSTestGenerateAddOpaqueRootPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestGenerateAddOpaqueRootDOMConstructor = JSDOMConstructorNotConstructable<JSTestGenerateAddOpaqueRoot>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestGenerateAddOpaqueRootDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestGenerateAddOpaqueRootDOMConstructor::s_info = { "TestGenerateAddOpaqueRoot", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestGenerateAddOpaqueRootDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestGenerateAddOpaqueRootDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -100,15 +103,24 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestGenerateAddOpaqueRootPrototypeTableIndex[4] = {
+    { 1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestGenerateAddOpaqueRootPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGenerateAddOpaqueRootConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "someAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGenerateAddOpaqueRoot_someAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "someAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGenerateAddOpaqueRoot_someAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestGenerateAddOpaqueRootPrototype::s_info = { "TestGenerateAddOpaqueRoot", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestGenerateAddOpaqueRootPrototype) };
</del><ins>+static const HashTable JSTestGenerateAddOpaqueRootPrototypeTable = { 2, 3, true, JSTestGenerateAddOpaqueRoot::info(), JSTestGenerateAddOpaqueRootPrototypeTableValues, JSTestGenerateAddOpaqueRootPrototypeTableIndex };
+const ClassInfo JSTestGenerateAddOpaqueRootPrototype::s_info = { "TestGenerateAddOpaqueRoot", &Base::s_info, &JSTestGenerateAddOpaqueRootPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestGenerateAddOpaqueRootPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestGenerateAddOpaqueRootPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -80,11 +80,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestGenerateIsReachablePrototype, JSTestGenerateIsReachablePrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestGenerateIsReachableDOMConstructor = JSDOMConstructorNotConstructable<JSTestGenerateIsReachable>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestGenerateIsReachableDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestGenerateIsReachableDOMConstructor::s_info = { "TestGenerateIsReachable", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestGenerateIsReachableDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestGenerateIsReachableDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -100,30 +103,41 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+static JSValue createJSTestGenerateIsReachablePrototype_aSecretAttribute(VM& vm, JSObject*)
+{
+    return DOMAttributeGetterSetter::create(vm, jsTestGenerateIsReachable_aSecretAttribute, nullptr, DOMAttributeAnnotation { JSTestGenerateIsReachable::info(), nullptr });
+}
</ins><span class="cx"> 
</span><ins>+static bool isEnabledJSTestGenerateIsReachablePrototype_aSecretAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->isSecureContext();
+}
+
+/* Hash table for Prototype */
+
+static const struct CompactHashIndex JSTestGenerateIsReachablePrototypeTableIndex[5] = {
+    { -1, -1 },
+    { 0, 4 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestGenerateIsReachablePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGenerateIsReachableConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "aSecretAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGenerateIsReachable_aSecretAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "aSecretAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGenerateIsReachablePrototype_aSecretAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGenerateIsReachablePrototype_aSecretAttribute) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestGenerateIsReachablePrototype::s_info = { "TestGenerateIsReachable", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestGenerateIsReachablePrototype) };
</del><ins>+static const HashTable JSTestGenerateIsReachablePrototypeTable = { 2, 3, true, JSTestGenerateIsReachable::info(), JSTestGenerateIsReachablePrototypeTableValues, JSTestGenerateIsReachablePrototypeTableIndex };
+const ClassInfo JSTestGenerateIsReachablePrototype::s_info = { "TestGenerateIsReachable", &Base::s_info, &JSTestGenerateIsReachablePrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestGenerateIsReachablePrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestGenerateIsReachablePrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestGenerateIsReachable::info(), JSTestGenerateIsReachablePrototypeTableValues, *this);
</span><del>-    bool hasDisabledRuntimeProperties = false;
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isSecureContext()) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("aSecretAttribute"), strlen("aSecretAttribute"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-    if (hasDisabledRuntimeProperties && structure()->isDictionary())
-        flattenDictionaryObject(vm);
</del><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -241,15 +241,161 @@
</span><span class="cx"> 
</span><span class="cx"> using JSTestGlobalObjectDOMConstructor = JSDOMConstructorNotConstructable<JSTestGlobalObject>;
</span><span class="cx"> 
</span><del>-/* Hash table */
</del><ins>+template<> const unsigned JSTestGlobalObjectDOMConstructor::StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
+template<> const ClassInfo JSTestGlobalObjectDOMConstructor::s_info = { "TestGlobalObject", &Base::s_info, &JSTestGlobalObjectConstructorTable, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObjectDOMConstructor) };
</ins><span class="cx"> 
</span><del>-static const struct CompactHashIndex JSTestGlobalObjectTableIndex[268] = {
</del><ins>+template<> JSValue JSTestGlobalObjectDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
+{
+    UNUSED_PARAM(vm);
+    return globalObject.functionPrototype();
+}
+
+template<> void JSTestGlobalObjectDOMConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
+{
+    putDirect(vm, vm.propertyNames->prototype, globalObject.getPrototypeDirect(vm), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
+    putDirect(vm, vm.propertyNames->name, jsNontrivialString(vm, "TestGlobalObject"_s), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
+    putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
+    reifyStaticProperties(vm, nullptr, JSTestGlobalObjectConstructorTableValues, *this);
+}
+
+/* Hash table for Prototype */
+
+static const struct CompactHashIndex JSTestGlobalObjectPrototypeTableIndex[2] = {
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 41, -1 },
</del><ins>+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestGlobalObjectPrototypeTableValues[] =
+{
+    { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
+};
+
+static const HashTable JSTestGlobalObjectPrototypeTable = { 1, 1, true, JSTestGlobalObject::info(), JSTestGlobalObjectPrototypeTableValues, JSTestGlobalObjectPrototypeTableIndex };
+const ClassInfo JSTestGlobalObjectPrototype::s_info = { "TestGlobalObject", &Base::s_info, &JSTestGlobalObjectPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObjectPrototype) };
+
+void JSTestGlobalObjectPrototype::finishCreation(VM& vm)
+{
+    Base::finishCreation(vm);
+    JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
+}
+
+#if ENABLE(TEST_FEATURE)
+static JSValue createJSTestGlobalObjectInstance_enabledAtRuntimeAttribute(VM& vm, JSObject*)
+{
+    return CustomGetterSetter::create(vm, jsTestGlobalObject_enabledAtRuntimeAttribute, setJSTestGlobalObject_enabledAtRuntimeAttribute);
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_enabledAtRuntimeAttribute(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled();
+}
+#endif
+
+#if ENABLE(TEST_FEATURE)
+static JSValue createJSTestGlobalObjectInstance_enabledAtRuntimeOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 1, "enabledAtRuntimeOperation"_s, jsTestGlobalObjectInstanceFunction_enabledAtRuntimeOperation);
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_enabledAtRuntimeOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled();
+}
+#endif
+
+static JSValue createJSTestGlobalObjectInstance_enabledInSpecificWorld(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 1, "enabledInSpecificWorld"_s, jsTestGlobalObjectInstanceFunction_enabledInSpecificWorld);
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_enabledInSpecificWorld(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->world().specificWorld();
+}
+
+static JSValue createJSTestGlobalObjectInstance_enabledInSpecificWorldWhenRuntimeFeatureEnabled(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 1, "enabledInSpecificWorldWhenRuntimeFeatureEnabled"_s, jsTestGlobalObjectInstanceFunction_enabledInSpecificWorldWhenRuntimeFeatureEnabled);
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_enabledInSpecificWorldWhenRuntimeFeatureEnabled(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return (jsCast<JSDOMGlobalObject*>(globalObject)->world().specificWorld() && RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled());
+}
+
+static JSValue createJSTestGlobalObjectInstance_enabledInSpecificWorldWhenRuntimeFeaturesEnabled(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 1, "enabledInSpecificWorldWhenRuntimeFeaturesEnabled"_s, jsTestGlobalObjectInstanceFunction_enabledInSpecificWorldWhenRuntimeFeaturesEnabled);
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_enabledInSpecificWorldWhenRuntimeFeaturesEnabled(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return (jsCast<JSDOMGlobalObject*>(globalObject)->world().specificWorld() && RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled() && RuntimeEnabledFeatures::sharedFeatures().testFeature1Enabled());
+}
+
+#if ENABLE(TEST_FEATURE)
+static JSValue createJSTestGlobalObjectInstance_testJSBuiltinFunction(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, testGlobalObjectTestJSBuiltinFunctionCodeGenerator(vm), thisObject->globalObject());
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_testJSBuiltinFunction(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled();
+}
+#endif
+
+static JSValue createJSTestGlobalObjectInstance_calculateSecretResult(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "calculateSecretResult"_s, jsTestGlobalObjectInstanceFunction_calculateSecretResult);
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_calculateSecretResult(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->isSecureContext();
+}
+
+static JSValue createJSTestGlobalObjectInstance_getSecretBoolean(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "getSecretBoolean"_s, jsTestGlobalObjectInstanceFunction_getSecretBoolean);
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_getSecretBoolean(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->isSecureContext();
+}
+
+#if ENABLE(TEST_FEATURE)
+static JSValue createJSTestGlobalObjectInstance_testFeatureGetSecretBoolean(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "testFeatureGetSecretBoolean"_s, jsTestGlobalObjectInstanceFunction_testFeatureGetSecretBoolean);
+}
+
+static bool isEnabledJSTestGlobalObjectInstance_testFeatureGetSecretBoolean(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return (jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->isSecureContext() && RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled());
+}
+#endif
+
+/* Hash table for Instance */
+
+static const struct CompactHashIndex JSTestGlobalObjectInstanceTableIndex[271] = {
+    { 3, 270 },
+    { 42, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { 0, -1 },
</span><del>-    { 4, -1 },
-    { 45, -1 },
</del><ins>+    { 5, -1 },
+    { 46, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -257,20 +403,21 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 55, -1 },
</del><ins>+    { 56, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 49, -1 },
</del><ins>+    { 50, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 64, -1 },
</del><ins>+    { 65, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 70, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -278,27 +425,28 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 36, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 35, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 69, -1 },
+    { 68, -1 },
+    { 14, 261 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 67, -1 },
-    { 13, 261 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 40, -1 },
+    { 21, 258 },
+    { 7, -1 },
</ins><span class="cx">     { -1, -1 },
</span><ins>+    { 47, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 39, -1 },
-    { 20, 258 },
-    { 6, -1 },
</del><span class="cx">     { -1, -1 },
</span><del>-    { 46, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -305,65 +453,63 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 38, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 37, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 23, 266 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 22, 266 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 6, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 5, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 31, -1 },
+    { 58, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 30, -1 },
-    { 57, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 10, 257 },
</ins><span class="cx">     { -1, -1 },
</span><ins>+    { 60, -1 },
+    { 20, 268 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 9, 257 },
</del><span class="cx">     { -1, -1 },
</span><del>-    { 59, -1 },
</del><ins>+    { -1, -1 },
</ins><span class="cx">     { 19, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 18, -1 },
</del><span class="cx">     { -1, -1 },
</span><ins>+    { 37, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 36, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 25, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { -1, -1 },
-    { -1, -1 },
-    { 24, -1 },
-    { -1, -1 },
</del><span class="cx">     { 2, -1 },
</span><del>-    { 38, -1 },
</del><ins>+    { 39, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 21, -1 },
</del><ins>+    { 22, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -376,15 +522,15 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 28, -1 },
</del><ins>+    { 29, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 43, -1 },
</del><ins>+    { 44, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 54, -1 },
</del><ins>+    { 55, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -391,23 +537,24 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 76, -1 },
+    { 49, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 48, -1 },
</del><span class="cx">     { -1, -1 },
</span><ins>+    { 11, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 10, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 66, 269 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 65, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 28, -1 },
+    { 33, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 27, -1 },
-    { 32, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -416,10 +563,10 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 16, 260 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 15, 260 },
</del><ins>+    { 61, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 60, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -427,14 +574,15 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 35, 267 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 34, 267 },
</del><ins>+    { 17, 256 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 16, 256 },
</del><ins>+    { 64, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 63, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 75, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -441,21 +589,21 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 13, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 12, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 48, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 47, -1 },
</del><span class="cx">     { -1, -1 },
</span><ins>+    { 12, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 11, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -462,21 +610,19 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 59, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { -1, -1 },
-    { 58, -1 },
-    { -1, -1 },
</del><span class="cx">     { 1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 8, -1 },
</del><ins>+    { 9, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 50, 264 },
-    { 7, 263 },
</del><ins>+    { 51, 264 },
+    { 8, 263 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 61, -1 },
</del><ins>+    { 62, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="lines">@@ -483,39 +629,42 @@
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 14, -1 },
</del><ins>+    { 15, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 25, -1 },
</del><ins>+    { 26, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { 31, -1 },
</del><ins>+    { 32, -1 },
+    { 74, -1 },
</ins><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { 4, -1 },
+    { 53, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 3, -1 },
-    { 52, -1 },
</del><ins>+    { 54, -1 },
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 53, -1 },
</del><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><del>-    { -1, -1 },
-    { 17, -1 },
-    { 23, 259 },
-    { 26, 265 },
-    { 29, 262 },
-    { 33, -1 },
-    { 40, -1 },
-    { 42, -1 },
-    { 44, -1 },
-    { 51, -1 },
-    { 56, -1 },
-    { 62, -1 },
-    { 66, -1 },
</del><ins>+    { 18, -1 },
+    { 24, 259 },
+    { 27, 265 },
+    { 30, 262 },
+    { 34, -1 },
+    { 41, -1 },
+    { 43, -1 },
+    { 45, -1 },
+    { 52, -1 },
+    { 57, -1 },
+    { 63, -1 },
+    { 67, -1 },
+    { 71, -1 },
+    { 72, -1 },
+    { 73, -1 },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestGlobalObjectTableValues[] =
</del><ins>+static const HashTableValue JSTestGlobalObjectInstanceTableValues[] =
</ins><span class="cx"> {
</span><span class="cx">     { "regularAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_regularAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestGlobalObject_regularAttribute) } },
</span><span class="cx">     { "publicAndPrivateAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_publicAndPrivateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestGlobalObject_publicAndPrivateAttribute) } },
</span><span class="lines">@@ -524,137 +673,113 @@
</span><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "TestCEReactions", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestCEReactionsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestCEReactionsStringifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestCEReactionsStringifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestCallTracer", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestCallTracerConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+#if ENABLE(TEST_FEATURE)
+    { "enabledAtRuntimeAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_enabledAtRuntimeAttribute), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_enabledAtRuntimeAttribute) } },
+#else
+    { 0, 0, NoIntrinsic, { 0, 0 } },
+#endif
+    { "TestCEReactions", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestCEReactionsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestCEReactionsStringifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestCEReactionsStringifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestCallTracer", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestCallTracerConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #if ENABLE(TEST_CONDITIONAL)
</span><del>-    { "TestCallbackInterface", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestCallbackInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "TestCallbackInterface", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestCallbackInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "TestClassWithJSBuiltinConstructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestClassWithJSBuiltinConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestDOMJIT", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDOMJITConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestDefaultToJSONIndirectInheritance", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDefaultToJSONIndirectInheritanceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestDefaultToJSONInherit", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDefaultToJSONInheritConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestDefaultToJSONInheritFinal", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDefaultToJSONInheritFinalConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestDelegateToSharedSyntheticAttribute", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDelegateToSharedSyntheticAttributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestDomainSecurity", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDomainSecurityConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestEventConstructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestEventConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestEventTarget", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestEventTargetConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestGenerateAddOpaqueRoot", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestGenerateAddOpaqueRootConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestGenerateIsReachable", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestGenerateIsReachableConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestGlobalObject", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestGlobalObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestIndexedSetterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestIndexedSetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestIndexedSetterThrowingException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestIndexedSetterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestIndexedSetterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestIndexedSetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestInterfaceLeadingUnderscore", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestInterfaceLeadingUnderscoreConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestIterable", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestIterableConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestJSBuiltinConstructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestJSBuiltinConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestLegacyFactoryFunction", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestLegacyFactoryFunctionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "Audio", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_AudioConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestLegacyOverrideBuiltIns", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestLegacyOverrideBuiltInsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestMapLike", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestMapLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestMapLikeWithOverriddenOperations", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestMapLikeWithOverriddenOperationsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedAndIndexedSetterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedAndIndexedSetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedAndIndexedSetterThrowingException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedAndIndexedSetterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedAndIndexedSetterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedAndIndexedSetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedDeleterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedDeleterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedDeleterThrowingException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedDeleterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedDeleterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedDeleterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedDeleterWithIndexedGetter", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedDeleterWithIndexedGetterConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedGetterCallWith", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedGetterCallWithConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedGetterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedGetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedGetterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedGetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedSetterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedSetterThrowingException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedSetterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedSetterWithIndexedGetter", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithIndexedGetterConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedSetterWithIndexedGetterAndSetter", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithIndexedGetterAndSetterConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedSetterWithLegacyOverrideBuiltIns", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithLegacyOverrideBuiltInsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedSetterWithLegacyUnforgeableProperties", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithLegacyUnforgeablePropertiesConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltInsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestInterfaceName", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestInterfaceNameConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "TestClassWithJSBuiltinConstructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestClassWithJSBuiltinConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestDOMJIT", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDOMJITConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestDefaultToJSONIndirectInheritance", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDefaultToJSONIndirectInheritanceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestDefaultToJSONInherit", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDefaultToJSONInheritConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestDefaultToJSONInheritFinal", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDefaultToJSONInheritFinalConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestDelegateToSharedSyntheticAttribute", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDelegateToSharedSyntheticAttributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestDomainSecurity", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestDomainSecurityConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestEventConstructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestEventConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestEventTarget", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestEventTargetConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestGenerateAddOpaqueRoot", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestGenerateAddOpaqueRootConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestGenerateIsReachable", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestGenerateIsReachableConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestGlobalObject", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestGlobalObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestIndexedSetterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestIndexedSetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestIndexedSetterThrowingException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestIndexedSetterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestIndexedSetterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestIndexedSetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestInterfaceLeadingUnderscore", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestInterfaceLeadingUnderscoreConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestIterable", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestIterableConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestJSBuiltinConstructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestJSBuiltinConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestLegacyFactoryFunction", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestLegacyFactoryFunctionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "Audio", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_AudioConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestLegacyOverrideBuiltIns", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestLegacyOverrideBuiltInsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestMapLike", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestMapLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestMapLikeWithOverriddenOperations", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestMapLikeWithOverriddenOperationsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedAndIndexedSetterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedAndIndexedSetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedAndIndexedSetterThrowingException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedAndIndexedSetterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedAndIndexedSetterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedAndIndexedSetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedDeleterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedDeleterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedDeleterThrowingException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedDeleterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedDeleterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedDeleterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedDeleterWithIndexedGetter", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedDeleterWithIndexedGetterConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedGetterCallWith", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedGetterCallWithConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedGetterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedGetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedGetterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedGetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedSetterNoIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedSetterThrowingException", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedSetterWithIdentifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedSetterWithIndexedGetter", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithIndexedGetterConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedSetterWithIndexedGetterAndSetter", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithIndexedGetterAndSetterConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedSetterWithLegacyOverrideBuiltIns", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithLegacyOverrideBuiltInsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedSetterWithLegacyUnforgeableProperties", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithLegacyUnforgeablePropertiesConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltInsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestInterfaceName", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestInterfaceNameConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #if ENABLE(ConditionDerived)
</span><del>-    { "TestOperationConditional", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestOperationConditionalConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "TestOperationConditional", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestOperationConditionalConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "TestOverloadedConstructorsWithSequence", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestOverloadedConstructorsWithSequenceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestPluginInterface", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestPluginInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestReadOnlyMapLike", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestReadOnlyMapLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestReadOnlySetLike", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestReadOnlySetLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestReportExtraMemoryCost", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestReportExtraMemoryCostConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "TestOverloadedConstructorsWithSequence", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestOverloadedConstructorsWithSequenceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestPluginInterface", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestPluginInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestReadOnlyMapLike", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestReadOnlyMapLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestReadOnlySetLike", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestReadOnlySetLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestReportExtraMemoryCost", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestReportExtraMemoryCostConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><del>-    { "TestSerializedScriptValueInterface", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestSerializedScriptValueInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "TestSerializedScriptValueInterface", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestSerializedScriptValueInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-    { "TestSetLike", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestSetLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestSetLikeWithOverriddenOperations", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestSetLikeWithOverriddenOperationsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestStringifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestStringifierAnonymousOperation", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierAnonymousOperationConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestStringifierNamedOperation", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierNamedOperationConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestStringifierOperationImplementedAs", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierOperationImplementedAsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestStringifierOperationNamedToString", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierOperationNamedToStringConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestStringifierReadOnlyAttribute", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierReadOnlyAttributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestStringifierReadWriteAttribute", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierReadWriteAttributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "TestTypedefs", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestTypedefsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "TestSetLike", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestSetLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestSetLikeWithOverriddenOperations", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestSetLikeWithOverriddenOperationsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestStringifier", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestStringifierAnonymousOperation", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierAnonymousOperationConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestStringifierNamedOperation", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierNamedOperationConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestStringifierOperationImplementedAs", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierOperationImplementedAsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestStringifierOperationNamedToString", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierOperationNamedToStringConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestStringifierReadOnlyAttribute", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierReadOnlyAttributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestStringifierReadWriteAttribute", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestStringifierReadWriteAttributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "TestTypedefs", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObject_TestTypedefsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx">     { "regularOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestGlobalObjectInstanceFunction_regularOperation), (intptr_t) (1) } },
</span><del>-};
-
-static const HashTable JSTestGlobalObjectTable = { 68, 255, true, JSTestGlobalObject::info(), JSTestGlobalObjectTableValues, JSTestGlobalObjectTableIndex };
-/* Hash table for constructor */
-
-static const HashTableValue JSTestGlobalObjectConstructorTableValues[] =
-{
</del><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><del>-    { "enabledAtRuntimeOperationStatic", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestGlobalObjectConstructorFunction_enabledAtRuntimeOperationStatic), (intptr_t) (1) } },
</del><ins>+    { "enabledAtRuntimeOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_enabledAtRuntimeOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_enabledAtRuntimeOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><ins>+    { "enabledInSpecificWorld", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_enabledInSpecificWorld), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_enabledInSpecificWorld) } },
+    { "enabledInSpecificWorldWhenRuntimeFeatureEnabled", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_enabledInSpecificWorldWhenRuntimeFeatureEnabled), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_enabledInSpecificWorldWhenRuntimeFeatureEnabled) } },
+    { "enabledInSpecificWorldWhenRuntimeFeaturesEnabled", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_enabledInSpecificWorldWhenRuntimeFeaturesEnabled), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_enabledInSpecificWorldWhenRuntimeFeaturesEnabled) } },
+#if ENABLE(TEST_FEATURE)
+    { "testJSBuiltinFunction", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_testJSBuiltinFunction), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_testJSBuiltinFunction) } },
+#else
+    { 0, 0, NoIntrinsic, { 0, 0 } },
+#endif
+    { "calculateSecretResult", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_calculateSecretResult), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_calculateSecretResult) } },
+    { "getSecretBoolean", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_getSecretBoolean), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_getSecretBoolean) } },
+#if ENABLE(TEST_FEATURE)
+    { "testFeatureGetSecretBoolean", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestGlobalObjectInstance_testFeatureGetSecretBoolean), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestGlobalObjectInstance_testFeatureGetSecretBoolean) } },
+#else
+    { 0, 0, NoIntrinsic, { 0, 0 } },
+#endif
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-template<> const ClassInfo JSTestGlobalObjectDOMConstructor::s_info = { "TestGlobalObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObjectDOMConstructor) };
</del><ins>+static const HashTable JSTestGlobalObjectInstanceTable = { 77, 255, true, JSTestGlobalObject::info(), JSTestGlobalObjectInstanceTableValues, JSTestGlobalObjectInstanceTableIndex };
+const ClassInfo JSTestGlobalObject::s_info = { "TestGlobalObject", &Base::s_info, &JSTestGlobalObjectInstanceTable, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObject) };
</ins><span class="cx"> 
</span><del>-template<> JSValue JSTestGlobalObjectDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
-{
-    UNUSED_PARAM(vm);
-    return globalObject.functionPrototype();
-}
-
-template<> void JSTestGlobalObjectDOMConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
-{
-    putDirect(vm, vm.propertyNames->prototype, globalObject.getPrototypeDirect(vm), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
-    putDirect(vm, vm.propertyNames->name, jsNontrivialString(vm, "TestGlobalObject"_s), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
-    putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
-    reifyStaticProperties(vm, JSTestGlobalObject::info(), JSTestGlobalObjectConstructorTableValues, *this);
-}
-
-/* Hash table for prototype */
-
-static const struct CompactHashIndex JSTestGlobalObjectPrototypeTableIndex[2] = {
-    { -1, -1 },
-    { 0, -1 },
-};
-
-
-static const HashTableValue JSTestGlobalObjectPrototypeTableValues[] =
-{
-    { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-};
-
-static const HashTable JSTestGlobalObjectPrototypeTable = { 1, 1, true, JSTestGlobalObject::info(), JSTestGlobalObjectPrototypeTableValues, JSTestGlobalObjectPrototypeTableIndex };
-const ClassInfo JSTestGlobalObjectPrototype::s_info = { "TestGlobalObject", &Base::s_info, &JSTestGlobalObjectPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObjectPrototype) };
-
-void JSTestGlobalObjectPrototype::finishCreation(VM& vm)
-{
-    Base::finishCreation(vm);
-    JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
-}
-
-const ClassInfo JSTestGlobalObject::s_info = { "TestGlobalObject", &Base::s_info, &JSTestGlobalObjectTable, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObject) };
-
</del><span class="cx"> JSTestGlobalObject::JSTestGlobalObject(Structure* structure, JSDOMGlobalObject& globalObject, Ref<TestGlobalObject>&& impl)
</span><span class="cx">     : JSDOMWrapper<TestGlobalObject>(structure, globalObject, WTFMove(impl))
</span><span class="cx"> {
</span><span class="lines">@@ -669,42 +794,12 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><span class="cx">     if (RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
</span><del>-        putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledAtRuntimeAttributePublicName(), CustomGetterSetter::create(vm, jsTestGlobalObject_enabledAtRuntimeAttribute, setJSTestGlobalObject_enabledAtRuntimeAttribute), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor)));
</del><ins>+        putDirect(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().testPrivateFunctionPrivateName(), JSFunction::create(vm, this->globalObject(), 0, "testPrivateFunction"_s, jsTestGlobalObjectInstanceFunction_testPrivateFunction));
</ins><span class="cx"> #endif
</span><del>-    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().publicAndPrivateAttributePrivateName(), CustomGetterSetter::create(vm, jsTestGlobalObject_publicAndPrivateAttribute, nullptr), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly));
</del><ins>+    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().publicAndPrivateAttributePrivateName(), CustomGetterSetter::create(vm, jsTestGlobalObject_publicAndPrivateAttribute, setJSTestGlobalObject_publicAndPrivateAttribute), static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor));
</ins><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><del>-    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().publicAndPrivateConditionalAttributePrivateName(), CustomGetterSetter::create(vm, jsTestGlobalObject_publicAndPrivateConditionalAttribute, nullptr), attributesForStructure(JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly));
</del><ins>+    putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().publicAndPrivateConditionalAttributePrivateName(), CustomGetterSetter::create(vm, jsTestGlobalObject_publicAndPrivateConditionalAttribute, setJSTestGlobalObject_publicAndPrivateConditionalAttribute), static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor));
</ins><span class="cx"> #endif
</span><del>-#if ENABLE(TEST_FEATURE)
-    if (RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledAtRuntimeOperationPublicName(), 1, jsTestGlobalObjectInstanceFunction_enabledAtRuntimeOperation, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-#endif
-#if ENABLE(TEST_FEATURE)
-    if (RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledAtRuntimeOperationStaticPublicName(), 1, jsTestGlobalObjectConstructorFunction_enabledAtRuntimeOperationStatic, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-#endif
-    if (worldForDOMObject(*this).specificWorld())
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledInSpecificWorldPublicName(), 1, jsTestGlobalObjectInstanceFunction_enabledInSpecificWorld, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-    if ((worldForDOMObject(*this).specificWorld() && RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled()))
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledInSpecificWorldWhenRuntimeFeatureEnabledPublicName(), 1, jsTestGlobalObjectInstanceFunction_enabledInSpecificWorldWhenRuntimeFeatureEnabled, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-    if ((worldForDOMObject(*this).specificWorld() && RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled() && RuntimeEnabledFeatures::sharedFeatures().testFeature1Enabled()))
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledInSpecificWorldWhenRuntimeFeaturesEnabledPublicName(), 1, jsTestGlobalObjectInstanceFunction_enabledInSpecificWorldWhenRuntimeFeaturesEnabled, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-#if ENABLE(TEST_FEATURE)
-    if (RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().testPrivateFunctionPrivateName(), 0, jsTestGlobalObjectInstanceFunction_testPrivateFunction, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-#endif
-#if ENABLE(TEST_FEATURE)
-    if (RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
-        putDirectBuiltinFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().testJSBuiltinFunctionPublicName(), testGlobalObjectTestJSBuiltinFunctionCodeGenerator(vm), attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Builtin)));
-#endif
-    if (jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isSecureContext())
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().calculateSecretResultPublicName(), 0, jsTestGlobalObjectInstanceFunction_calculateSecretResult, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-    if (jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isSecureContext())
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().getSecretBooleanPublicName(), 0, jsTestGlobalObjectInstanceFunction_getSecretBoolean, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-#if ENABLE(TEST_FEATURE)
-    if ((jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isSecureContext() && RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled()))
-        putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().testFeatureGetSecretBooleanPublicName(), 0, jsTestGlobalObjectInstanceFunction_testFeatureGetSecretBoolean, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
-#endif
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue JSTestGlobalObject::getConstructor(VM& vm, const JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestIndexedSetterNoIdentifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -79,11 +79,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestIndexedSetterNoIdentifierPrototype, JSTestIndexedSetterNoIdentifierPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestIndexedSetterNoIdentifierDOMConstructor = JSDOMConstructorNotConstructable<JSTestIndexedSetterNoIdentifier>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestIndexedSetterNoIdentifierDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestIndexedSetterNoIdentifierDOMConstructor::s_info = { "TestIndexedSetterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterNoIdentifierDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -99,14 +102,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestIndexedSetterNoIdentifierPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestIndexedSetterNoIdentifierPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestIndexedSetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestIndexedSetterNoIdentifierPrototype::s_info = { "TestIndexedSetterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterNoIdentifierPrototype) };
</del><ins>+static const HashTable JSTestIndexedSetterNoIdentifierPrototypeTable = { 1, 1, true, JSTestIndexedSetterNoIdentifier::info(), JSTestIndexedSetterNoIdentifierPrototypeTableValues, JSTestIndexedSetterNoIdentifierPrototypeTableIndex };
+const ClassInfo JSTestIndexedSetterNoIdentifierPrototype::s_info = { "TestIndexedSetterNoIdentifier", &Base::s_info, &JSTestIndexedSetterNoIdentifierPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterNoIdentifierPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestIndexedSetterNoIdentifierPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestIndexedSetterThrowingExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -79,11 +79,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestIndexedSetterThrowingExceptionPrototype, JSTestIndexedSetterThrowingExceptionPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestIndexedSetterThrowingExceptionDOMConstructor = JSDOMConstructorNotConstructable<JSTestIndexedSetterThrowingException>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestIndexedSetterThrowingExceptionDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestIndexedSetterThrowingExceptionDOMConstructor::s_info = { "TestIndexedSetterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterThrowingExceptionDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -99,14 +102,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestIndexedSetterThrowingExceptionPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestIndexedSetterThrowingExceptionPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestIndexedSetterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestIndexedSetterThrowingExceptionPrototype::s_info = { "TestIndexedSetterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterThrowingExceptionPrototype) };
</del><ins>+static const HashTable JSTestIndexedSetterThrowingExceptionPrototypeTable = { 1, 1, true, JSTestIndexedSetterThrowingException::info(), JSTestIndexedSetterThrowingExceptionPrototypeTableValues, JSTestIndexedSetterThrowingExceptionPrototypeTableIndex };
+const ClassInfo JSTestIndexedSetterThrowingExceptionPrototype::s_info = { "TestIndexedSetterThrowingException", &Base::s_info, &JSTestIndexedSetterThrowingExceptionPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterThrowingExceptionPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestIndexedSetterThrowingExceptionPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestIndexedSetterWithIdentifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -87,11 +87,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestIndexedSetterWithIdentifierPrototype, JSTestIndexedSetterWithIdentifierPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestIndexedSetterWithIdentifierDOMConstructor = JSDOMConstructorNotConstructable<JSTestIndexedSetterWithIdentifier>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestIndexedSetterWithIdentifierDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestIndexedSetterWithIdentifierDOMConstructor::s_info = { "TestIndexedSetterWithIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterWithIdentifierDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -107,8 +110,16 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestIndexedSetterWithIdentifierPrototypeTableIndex[4] = {
+    { 1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestIndexedSetterWithIdentifierPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestIndexedSetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="lines">@@ -115,7 +126,8 @@
</span><span class="cx">     { "indexedSetter", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestIndexedSetterWithIdentifierPrototypeFunction_indexedSetter), (intptr_t) (2) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestIndexedSetterWithIdentifierPrototype::s_info = { "TestIndexedSetterWithIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterWithIdentifierPrototype) };
</del><ins>+static const HashTable JSTestIndexedSetterWithIdentifierPrototypeTable = { 2, 3, true, JSTestIndexedSetterWithIdentifier::info(), JSTestIndexedSetterWithIdentifierPrototypeTableValues, JSTestIndexedSetterWithIdentifierPrototypeTableIndex };
+const ClassInfo JSTestIndexedSetterWithIdentifierPrototype::s_info = { "TestIndexedSetterWithIdentifier", &Base::s_info, &JSTestIndexedSetterWithIdentifierPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterWithIdentifierPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestIndexedSetterWithIdentifierPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -194,57 +194,81 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestInterfacePrototype, JSTestInterfacePrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestInterfaceDOMConstructor = JSDOMConstructor<JSTestInterface>;
</span><span class="cx"> 
</span><del>-/* Hash table for constructor */
</del><ins>+/* Hash table for Constructor */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestInterfaceConstructorTableIndex[17] = {
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, 16 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { 5, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { 6, -1 },
+    { 7, -1 },
+    { 3, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestInterfaceConstructorTableValues[] =
</span><span class="cx"> {
</span><del>-#if ENABLE(Condition22) || ENABLE(Condition23)
-    { "MIXIN_CONSTANT", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</del><ins>+#if ENABLE(Condition11) || ENABLE(Condition12)
+    { "supplementalStaticReadOnlyAttr", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceConstructor_supplementalStaticReadOnlyAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-#if ENABLE(Condition22) || ENABLE(Condition23)
-    { "MIXIN_REFLECTED_CONSTANT", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</del><ins>+#if ENABLE(Condition11) || ENABLE(Condition12)
+    { "supplementalStaticAttr", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceConstructor_supplementalStaticAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceConstructor_supplementalStaticAttr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-#if ENABLE(Condition22) || ENABLE(Condition23)
-    { "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(5) } },
</del><ins>+#if ENABLE(Condition11) || ENABLE(Condition12)
+    { "supplementalMethod4", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestInterfaceConstructorFunction_supplementalMethod4), (intptr_t) (0) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-#if ENABLE(Condition11) || ENABLE(Condition12)
-    { "SUPPLEMENTALCONSTANT1", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</del><ins>+#if ENABLE(Condition22) || ENABLE(Condition23)
+    { "MIXIN_CONSTANT", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-#if ENABLE(Condition11) || ENABLE(Condition12)
-    { "SUPPLEMENTALCONSTANT2", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</del><ins>+#if ENABLE(Condition22) || ENABLE(Condition23)
+    { "MIXIN_REFLECTED_CONSTANT", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><del>-#if ENABLE(Condition11) || ENABLE(Condition12)
-    { "supplementalStaticReadOnlyAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceConstructor_supplementalStaticReadOnlyAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+#if ENABLE(Condition22) || ENABLE(Condition23)
+    { "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(5) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "supplementalStaticAttr", static_cast<unsigned>(0), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceConstructor_supplementalStaticAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceConstructor_supplementalStaticAttr) } },
</del><ins>+    { "SUPPLEMENTALCONSTANT1", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "supplementalMethod4", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestInterfaceConstructorFunction_supplementalMethod4), (intptr_t) (0) } },
</del><ins>+    { "SUPPLEMENTALCONSTANT2", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+static const HashTable JSTestInterfaceConstructorTable = { 8, 15, true, nullptr, JSTestInterfaceConstructorTableValues, JSTestInterfaceConstructorTableIndex };
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx"> static_assert(TestInterface::MIXIN_CONSTANT == 1, "MIXIN_CONSTANT in TestInterface does not match value from IDL");
</span><span class="cx"> #endif
</span><span class="lines">@@ -289,7 +313,8 @@
</span><span class="cx"> }
</span><span class="cx"> JSC_ANNOTATE_HOST_FUNCTION(JSTestInterfaceDOMConstructorConstruct, JSTestInterfaceDOMConstructor::construct);
</span><span class="cx"> 
</span><del>-template<> const ClassInfo JSTestInterfaceDOMConstructor::s_info = { "TestInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestInterfaceDOMConstructor) };
</del><ins>+template<> const unsigned JSTestInterfaceDOMConstructor::StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
+template<> const ClassInfo JSTestInterfaceDOMConstructor::s_info = { "TestInterface", &Base::s_info, &JSTestInterfaceConstructorTable, nullptr, CREATE_METHOD_TABLE(JSTestInterfaceDOMConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestInterfaceDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="cx"> {
</span><span class="lines">@@ -302,61 +327,149 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->prototype, JSTestInterface::prototype(vm, globalObject), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames->name, jsNontrivialString(vm, "TestInterface"_s), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(1), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><del>-    reifyStaticProperties(vm, JSTestInterface::info(), JSTestInterfaceConstructorTableValues, *this);
</del><ins>+    reifyStaticProperties(vm, nullptr, JSTestInterfaceConstructorTableValues, *this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+#if ENABLE(Condition22) || ENABLE(Condition23)
+static JSValue createJSTestInterfacePrototype_mixinSettingsConditionalOperation(VM& vm, JSObject* thisObject)
+{
+    return JSFunction::create(vm, thisObject->globalObject(), 0, "mixinSettingsConditionalOperation"_s, jsTestInterfacePrototypeFunction_mixinSettingsConditionalOperation);
+}
</ins><span class="cx"> 
</span><ins>+static bool isEnabledJSTestInterfacePrototype_mixinSettingsConditionalOperation(JSGlobalObject* globalObject)
+{
+    UNUSED_PARAM(globalObject);
+    return jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext()->settingsValues().testSettingEnabled;
+}
+#endif
+
+/* Hash table for Prototype */
+
+static const struct CompactHashIndex JSTestInterfacePrototypeTableIndex[71] = {
+    { 25, -1 },
+    { -1, -1 },
+    { 1, 64 },
+    { -1, -1 },
+    { 27, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 29, -1 },
+    { 8, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 31, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, 65 },
+    { -1, -1 },
+    { 0, 69 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 20, -1 },
+    { -1, -1 },
+    { 9, -1 },
+    { 12, -1 },
+    { 24, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 22, -1 },
+    { 13, -1 },
+    { -1, -1 },
+    { 28, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 10, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { 15, -1 },
+    { -1, -1 },
+    { 18, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 14, 68 },
+    { 11, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 30, -1 },
+    { 16, -1 },
+    { 5, 66 },
+    { 6, 70 },
+    { 17, 67 },
+    { 19, -1 },
+    { 21, -1 },
+    { 23, -1 },
+    { 26, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestInterfacePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinReadOnlyAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_mixinReadOnlyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "mixinReadOnlyAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_mixinReadOnlyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_mixinAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_mixinAttribute) } },
</del><ins>+    { "mixinAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_mixinAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_mixinAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinCustomAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_mixinCustomAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_mixinCustomAttribute) } },
</del><ins>+    { "mixinCustomAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_mixinCustomAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_mixinCustomAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinNodeAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_mixinNodeAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_mixinNodeAttribute) } },
</del><ins>+    { "mixinNodeAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_mixinNodeAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_mixinNodeAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "partialMixinAttributeFromPartial", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_partialMixinAttributeFromPartial), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "partialMixinAttributeFromPartial", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_partialMixinAttributeFromPartial), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "supplementalStr1", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_supplementalStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "supplementalStr1", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_supplementalStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "supplementalStr2", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_supplementalStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_supplementalStr2) } },
</del><ins>+    { "supplementalStr2", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_supplementalStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_supplementalStr2) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "supplementalStr3", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_supplementalStr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_supplementalStr3) } },
</del><ins>+    { "supplementalStr3", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_supplementalStr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_supplementalStr3) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "supplementalNode", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_supplementalNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_supplementalNode) } },
</del><ins>+    { "supplementalNode", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_supplementalNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_supplementalNode) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "reflectAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_reflectAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_reflectAttribute) } },
</del><ins>+    { "reflectAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterface_reflectAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterface_reflectAttribute) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="lines">@@ -386,7 +499,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "mixinSettingsConditionalOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestInterfacePrototypeFunction_mixinSettingsConditionalOperation), (intptr_t) (0) } },
</del><ins>+    { "mixinSettingsConditionalOperation", static_cast<unsigned>(JSC::PropertyAttribute::PropertyCallback), NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSTestInterfacePrototype_mixinSettingsConditionalOperation), (intptr_t) static_cast<IsLazyPropertyEnabledCallback>(isEnabledJSTestInterfacePrototype_mixinSettingsConditionalOperation) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="lines">@@ -425,51 +538,42 @@
</span><span class="cx">     { "values", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestInterfacePrototypeFunction_values), (intptr_t) (0) } },
</span><span class="cx">     { "forEach", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestInterfacePrototypeFunction_forEach), (intptr_t) (1) } },
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "MIXIN_CONSTANT", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</del><ins>+    { "MIXIN_CONSTANT", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "MIXIN_REFLECTED_CONSTANT", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</del><ins>+    { "MIXIN_REFLECTED_CONSTANT", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-    { "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(5) } },
</del><ins>+    { "PARTIAL_MIXIN_CONSTANT_FROM_PARTIAL", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(5) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "SUPPLEMENTALCONSTANT1", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</del><ins>+    { "SUPPLEMENTALCONSTANT1", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-    { "SUPPLEMENTALCONSTANT2", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</del><ins>+    { "SUPPLEMENTALCONSTANT2", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</ins><span class="cx"> #else
</span><span class="cx">     { 0, 0, NoIntrinsic, { 0, 0 } },
</span><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestInterfacePrototype::s_info = { "TestInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestInterfacePrototype) };
</del><ins>+static const HashTable JSTestInterfacePrototypeTable = { 32, 63, true, JSTestInterface::info(), JSTestInterfacePrototypeTableValues, JSTestInterfacePrototypeTableIndex };
+const ClassInfo JSTestInterfacePrototype::s_info = { "TestInterface", &Base::s_info, &JSTestInterfacePrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestInterfacePrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestInterfacePrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestInterface::info(), JSTestInterfacePrototypeTableValues, *this);
</span><del>-    bool hasDisabledRuntimeProperties = false;
-#if ENABLE(Condition22) || ENABLE(Condition23)
-    if (!jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->settingsValues().testSettingEnabled) {
-        hasDisabledRuntimeProperties = true;
-        auto propertyName = Identifier::fromString(vm, reinterpret_cast<const LChar*>("mixinSettingsConditionalOperation"), strlen("mixinSettingsConditionalOperation"));
-        VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
-        DeletePropertySlot slot;
-        JSObject::deleteProperty(this, globalObject(), propertyName, slot);
-    }
-#endif
-    if (hasDisabledRuntimeProperties && structure()->isDictionary())
-        flattenDictionaryObject(vm);
-    putDirect(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, vm.propertyNames->builtinNames().entriesPublicName()), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));
</del><ins>+    auto& entries = vm.propertyNames->builtinNames().entriesPublicName();
+    reifyStaticProperty(vm, info(), entries, *info()->staticPropHashTable->entry(entries), *this);
+    putDirectWithoutTransition(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, entries), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));
</ins><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceLeadingUnderscorecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp       2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp  2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -80,11 +80,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestInterfaceLeadingUnderscorePrototype, JSTestInterfaceLeadingUnderscorePrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestInterfaceLeadingUnderscoreDOMConstructor = JSDOMConstructorNotConstructable<JSTestInterfaceLeadingUnderscore>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestInterfaceLeadingUnderscoreDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestInterfaceLeadingUnderscoreDOMConstructor::s_info = { "TestInterfaceLeadingUnderscore", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestInterfaceLeadingUnderscoreDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestInterfaceLeadingUnderscoreDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -100,15 +103,24 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestInterfaceLeadingUnderscorePrototypeTableIndex[4] = {
+    { 1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestInterfaceLeadingUnderscorePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceLeadingUnderscoreConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "readonly", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceLeadingUnderscore_readonly), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "readonly", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceLeadingUnderscore_readonly), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestInterfaceLeadingUnderscorePrototype::s_info = { "TestInterfaceLeadingUnderscore", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestInterfaceLeadingUnderscorePrototype) };
</del><ins>+static const HashTable JSTestInterfaceLeadingUnderscorePrototypeTable = { 2, 3, true, JSTestInterfaceLeadingUnderscore::info(), JSTestInterfaceLeadingUnderscorePrototypeTableValues, JSTestInterfaceLeadingUnderscorePrototypeTableIndex };
+const ClassInfo JSTestInterfaceLeadingUnderscorePrototype::s_info = { "TestInterfaceLeadingUnderscore", &Base::s_info, &JSTestInterfaceLeadingUnderscorePrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestInterfaceLeadingUnderscorePrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestInterfaceLeadingUnderscorePrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestIterablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp 2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp    2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -89,11 +89,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestIterablePrototype, JSTestIterablePrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestIterableDOMConstructor = JSDOMConstructorNotConstructable<JSTestIterable>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestIterableDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestIterableDOMConstructor::s_info = { "TestIterable", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIterableDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestIterableDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -109,8 +112,29 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestIterablePrototypeTableIndex[17] = {
+    { 3, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { 0, 16 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestIterablePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestIterableConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="lines">@@ -120,13 +144,16 @@
</span><span class="cx">     { "forEach", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestIterablePrototypeFunction_forEach), (intptr_t) (1) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestIterablePrototype::s_info = { "TestIterable", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIterablePrototype) };
</del><ins>+static const HashTable JSTestIterablePrototypeTable = { 5, 15, true, JSTestIterable::info(), JSTestIterablePrototypeTableValues, JSTestIterablePrototypeTableIndex };
+const ClassInfo JSTestIterablePrototype::s_info = { "TestIterable", &Base::s_info, &JSTestIterablePrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestIterablePrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestIterablePrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestIterable::info(), JSTestIterablePrototypeTableValues, *this);
</span><del>-    putDirect(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, vm.propertyNames->builtinNames().entriesPublicName()), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));
</del><ins>+    auto& entries = vm.propertyNames->builtinNames().entriesPublicName();
+    reifyStaticProperty(vm, info(), entries, *info()->staticPropHashTable->entry(entries), *this);
+    putDirectWithoutTransition(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, entries), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));
</ins><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp     2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -83,11 +83,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestJSBuiltinConstructorPrototype, JSTestJSBuiltinConstructorPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestJSBuiltinConstructorDOMConstructor = JSDOMBuiltinConstructor<JSTestJSBuiltinConstructor>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestJSBuiltinConstructorDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestJSBuiltinConstructorDOMConstructor::s_info = { "TestJSBuiltinConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestJSBuiltinConstructorDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestJSBuiltinConstructorDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -108,19 +111,42 @@
</span><span class="cx">     return testJSBuiltinConstructorInitializeTestJSBuiltinConstructorCodeGenerator(vm);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestJSBuiltinConstructorPrototypeTableIndex[18] = {
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, 17 },
+    { 1, 16 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+    { 5, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestJSBuiltinConstructorPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx">     { "testAttribute", static_cast<unsigned>(JSC::PropertyAttribute::Accessor | JSC::PropertyAttribute::Builtin), NoIntrinsic, { (intptr_t)static_cast<BuiltinGenerator>(testJSBuiltinConstructorTestAttributeCodeGenerator), (intptr_t) (setTestJSBuiltinConstructorTestAttributeCodeGenerator) } },
</span><del>-    { "testAttributeCustom", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructor_testAttributeCustom), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "testAttributeRWCustom", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructor_testAttributeRWCustom), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestJSBuiltinConstructor_testAttributeRWCustom) } },
</del><ins>+    { "testAttributeCustom", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructor_testAttributeCustom), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "testAttributeRWCustom", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructor_testAttributeRWCustom), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestJSBuiltinConstructor_testAttributeRWCustom) } },
</ins><span class="cx">     { "testFunction", static_cast<unsigned>(JSC::PropertyAttribute::Builtin), NoIntrinsic, { (intptr_t)static_cast<BuiltinGenerator>(testJSBuiltinConstructorTestFunctionCodeGenerator), (intptr_t) (0) } },
</span><span class="cx">     { "testCustomFunction", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestJSBuiltinConstructorPrototypeFunction_testCustomFunction), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestJSBuiltinConstructorPrototype::s_info = { "TestJSBuiltinConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestJSBuiltinConstructorPrototype) };
</del><ins>+static const HashTable JSTestJSBuiltinConstructorPrototypeTable = { 6, 15, true, JSTestJSBuiltinConstructor::info(), JSTestJSBuiltinConstructorPrototypeTableValues, JSTestJSBuiltinConstructorPrototypeTableIndex };
+const ClassInfo JSTestJSBuiltinConstructorPrototype::s_info = { "TestJSBuiltinConstructor", &Base::s_info, &JSTestJSBuiltinConstructorPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestJSBuiltinConstructorPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestJSBuiltinConstructorPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestLegacyFactoryFunctioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -81,6 +81,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestLegacyFactoryFunctionPrototype, JSTestLegacyFactoryFunctionPrototype::Base);
</span><span class="cx"> 
</span><span class="lines">@@ -87,6 +89,7 @@
</span><span class="cx"> using JSTestLegacyFactoryFunctionDOMConstructor = JSDOMConstructorNotConstructable<JSTestLegacyFactoryFunction>;
</span><span class="cx"> using JSTestLegacyFactoryFunctionLegacyFactoryFunction = JSDOMLegacyFactoryFunction<JSTestLegacyFactoryFunction>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestLegacyFactoryFunctionDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestLegacyFactoryFunctionDOMConstructor::s_info = { "TestLegacyFactoryFunction", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestLegacyFactoryFunctionDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestLegacyFactoryFunctionDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -150,14 +153,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(1), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestLegacyFactoryFunctionPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestLegacyFactoryFunctionPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyFactoryFunctionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestLegacyFactoryFunctionPrototype::s_info = { "TestLegacyFactoryFunction", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestLegacyFactoryFunctionPrototype) };
</del><ins>+static const HashTable JSTestLegacyFactoryFunctionPrototypeTable = { 1, 1, true, JSTestLegacyFactoryFunction::info(), JSTestLegacyFactoryFunctionPrototypeTableValues, JSTestLegacyFactoryFunctionPrototypeTableIndex };
+const ClassInfo JSTestLegacyFactoryFunctionPrototype::s_info = { "TestLegacyFactoryFunction", &Base::s_info, &JSTestLegacyFactoryFunctionPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestLegacyFactoryFunctionPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestLegacyFactoryFunctionPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestLegacyNoInterfaceObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp  2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp     2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -99,24 +99,48 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestLegacyNoInterfaceObjectPrototype, JSTestLegacyNoInterfaceObjectPrototype::Base);
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestLegacyNoInterfaceObjectPrototypeTableIndex[17] = {
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { 5, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { 3, 16 },
+    { 0, -1 },
+    { 6, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestLegacyNoInterfaceObjectPrototypeTableValues[] =
</span><span class="cx"> {
</span><del>-    { "readonlyStringAttribute", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyNoInterfaceObject_readonlyStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "readWriteStringAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyNoInterfaceObject_readWriteStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestLegacyNoInterfaceObject_readWriteStringAttribute) } },
-    { "customGetterSetterStringAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyNoInterfaceObject_customGetterSetterStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestLegacyNoInterfaceObject_customGetterSetterStringAttribute) } },
-    { "nodeAttribute", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyNoInterfaceObject_nodeAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestLegacyNoInterfaceObject_nodeAttribute) } },
</del><ins>+    { "readonlyStringAttribute", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyNoInterfaceObject_readonlyStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "readWriteStringAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyNoInterfaceObject_readWriteStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestLegacyNoInterfaceObject_readWriteStringAttribute) } },
+    { "customGetterSetterStringAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyNoInterfaceObject_customGetterSetterStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestLegacyNoInterfaceObject_customGetterSetterStringAttribute) } },
+    { "nodeAttribute", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyNoInterfaceObject_nodeAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestLegacyNoInterfaceObject_nodeAttribute) } },
</ins><span class="cx">     { "voidOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestLegacyNoInterfaceObjectPrototypeFunction_voidOperation), (intptr_t) (0) } },
</span><span class="cx">     { "customOperation", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestLegacyNoInterfaceObjectPrototypeFunction_customOperation), (intptr_t) (0) } },
</span><del>-    { "CONSTANT1", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
-    { "CONSTANT2", JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</del><ins>+    { "CONSTANT1", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(1) } },
+    { "CONSTANT2", JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { (long long)(2) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestLegacyNoInterfaceObjectPrototype::s_info = { "TestLegacyNoInterfaceObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestLegacyNoInterfaceObjectPrototype) };
</del><ins>+static const HashTable JSTestLegacyNoInterfaceObjectPrototypeTable = { 8, 15, true, JSTestLegacyNoInterfaceObject::info(), JSTestLegacyNoInterfaceObjectPrototypeTableValues, JSTestLegacyNoInterfaceObjectPrototypeTableIndex };
+const ClassInfo JSTestLegacyNoInterfaceObjectPrototype::s_info = { "TestLegacyNoInterfaceObject", &Base::s_info, &JSTestLegacyNoInterfaceObjectPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestLegacyNoInterfaceObjectPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestLegacyNoInterfaceObjectPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestLegacyOverrideBuiltInscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -87,11 +87,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestLegacyOverrideBuiltInsPrototype, JSTestLegacyOverrideBuiltInsPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestLegacyOverrideBuiltInsDOMConstructor = JSDOMConstructorNotConstructable<JSTestLegacyOverrideBuiltIns>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestLegacyOverrideBuiltInsDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestLegacyOverrideBuiltInsDOMConstructor::s_info = { "TestLegacyOverrideBuiltIns", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestLegacyOverrideBuiltInsDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -107,8 +110,16 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestLegacyOverrideBuiltInsPrototypeTableIndex[4] = {
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestLegacyOverrideBuiltInsPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestLegacyOverrideBuiltInsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="lines">@@ -115,7 +126,8 @@
</span><span class="cx">     { "namedItem", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestLegacyOverrideBuiltInsPrototypeFunction_namedItem), (intptr_t) (1) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestLegacyOverrideBuiltInsPrototype::s_info = { "TestLegacyOverrideBuiltIns", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestLegacyOverrideBuiltInsPrototype) };
</del><ins>+static const HashTable JSTestLegacyOverrideBuiltInsPrototypeTable = { 2, 3, true, JSTestLegacyOverrideBuiltIns::info(), JSTestLegacyOverrideBuiltInsPrototypeTableValues, JSTestLegacyOverrideBuiltInsPrototypeTableIndex };
+const ClassInfo JSTestLegacyOverrideBuiltInsPrototype::s_info = { "TestLegacyOverrideBuiltIns", &Base::s_info, &JSTestLegacyOverrideBuiltInsPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestLegacyOverrideBuiltInsPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestLegacyOverrideBuiltInsPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMapLikecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.cpp  2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.cpp     2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -96,11 +96,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestMapLikePrototype, JSTestMapLikePrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestMapLikeDOMConstructor = JSDOMConstructorNotConstructable<JSTestMapLike>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestMapLikeDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestMapLikeDOMConstructor::s_info = { "TestMapLike", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestMapLikeDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestMapLikeDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -116,30 +119,70 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestMapLikePrototypeTableIndex[33] = {
+    { 6, -1 },
+    { -1, -1 },
+    { 5, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { 8, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+    { 10, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { 0, 32 },
+    { -1, -1 },
+    { 9, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestMapLikePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMapLikeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "size", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMapLike_size), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
-    { "get", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_get), (intptr_t) (1) } },
-    { "has", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_has), (intptr_t) (1) } },
-    { "entries", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_entries), (intptr_t) (0) } },
-    { "keys", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_keys), (intptr_t) (0) } },
-    { "values", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_values), (intptr_t) (0) } },
</del><ins>+    { "size", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMapLike_size), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
+    { "get", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_get), (intptr_t) (1) } },
+    { "has", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_has), (intptr_t) (1) } },
+    { "entries", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_entries), (intptr_t) (0) } },
+    { "keys", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_keys), (intptr_t) (0) } },
+    { "values", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_values), (intptr_t) (0) } },
</ins><span class="cx">     { "forEach", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_forEach), (intptr_t) (1) } },
</span><del>-    { "set", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_set), (intptr_t) (2) } },
-    { "clear", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_clear), (intptr_t) (0) } },
-    { "delete", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_delete), (intptr_t) (1) } },
</del><ins>+    { "set", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_set), (intptr_t) (2) } },
+    { "clear", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_clear), (intptr_t) (0) } },
+    { "delete", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikePrototypeFunction_delete), (intptr_t) (1) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestMapLikePrototype::s_info = { "TestMapLike", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestMapLikePrototype) };
</del><ins>+static const HashTable JSTestMapLikePrototypeTable = { 11, 31, true, JSTestMapLike::info(), JSTestMapLikePrototypeTableValues, JSTestMapLikePrototypeTableIndex };
+const ClassInfo JSTestMapLikePrototype::s_info = { "TestMapLike", &Base::s_info, &JSTestMapLikePrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestMapLikePrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestMapLikePrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestMapLike::info(), JSTestMapLikePrototypeTableValues, *this);
</span><del>-    putDirect(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, vm.propertyNames->builtinNames().entriesPublicName()), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));
</del><ins>+    auto& entries = vm.propertyNames->builtinNames().entriesPublicName();
+    reifyStaticProperty(vm, info(), entries, *info()->staticPropHashTable->entry(entries), *this);
+    putDirectWithoutTransition(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, entries), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));
</ins><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMapLikeWithOverriddenOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp  2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp     2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -100,11 +100,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestMapLikeWithOverriddenOperationsPrototype, JSTestMapLikeWithOverriddenOperationsPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestMapLikeWithOverriddenOperationsDOMConstructor = JSDOMConstructorNotConstructable<JSTestMapLikeWithOverriddenOperations>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestMapLikeWithOverriddenOperationsDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestMapLikeWithOverriddenOperationsDOMConstructor::s_info = { "TestMapLikeWithOverriddenOperations", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestMapLikeWithOverriddenOperationsDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestMapLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -120,30 +123,70 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestMapLikeWithOverriddenOperationsPrototypeTableIndex[33] = {
+    { 8, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 5, -1 },
+    { 10, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 9, -1 },
+    { -1, -1 },
+    { 0, 32 },
+    { -1, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 6, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestMapLikeWithOverriddenOperationsPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMapLikeWithOverriddenOperationsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><del>-    { "set", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMapLikeWithOverriddenOperations_set), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestMapLikeWithOverriddenOperations_set) } },
-    { "size", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMapLikeWithOverriddenOperations_size), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</del><ins>+    { "set", JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMapLikeWithOverriddenOperations_set), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestMapLikeWithOverriddenOperations_set) } },
+    { "size", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMapLikeWithOverriddenOperations_size), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(nullptr) } },
</ins><span class="cx">     { "clear", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_clear), (intptr_t) (0) } },
</span><del>-    { "get", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_get), (intptr_t) (1) } },
-    { "has", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_has), (intptr_t) (1) } },
-    { "entries", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_entries), (intptr_t) (0) } },
-    { "keys", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_keys), (intptr_t) (0) } },
-    { "values", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_values), (intptr_t) (0) } },
</del><ins>+    { "get", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_get), (intptr_t) (1) } },
+    { "has", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_has), (intptr_t) (1) } },
+    { "entries", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_entries), (intptr_t) (0) } },
+    { "keys", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_keys), (intptr_t) (0) } },
+    { "values", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_values), (intptr_t) (0) } },
</ins><span class="cx">     { "forEach", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_forEach), (intptr_t) (1) } },
</span><del>-    { "delete", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_delete), (intptr_t) (1) } },
</del><ins>+    { "delete", JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function, NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestMapLikeWithOverriddenOperationsPrototypeFunction_delete), (intptr_t) (1) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestMapLikeWithOverriddenOperationsPrototype::s_info = { "TestMapLikeWithOverriddenOperations", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestMapLikeWithOverriddenOperationsPrototype) };
</del><ins>+static const HashTable JSTestMapLikeWithOverriddenOperationsPrototypeTable = { 11, 31, true, JSTestMapLikeWithOverriddenOperations::info(), JSTestMapLikeWithOverriddenOperationsPrototypeTableValues, JSTestMapLikeWithOverriddenOperationsPrototypeTableIndex };
+const ClassInfo JSTestMapLikeWithOverriddenOperationsPrototype::s_info = { "TestMapLikeWithOverriddenOperations", &Base::s_info, &JSTestMapLikeWithOverriddenOperationsPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestMapLikeWithOverriddenOperationsPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestMapLikeWithOverriddenOperationsPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     reifyStaticProperties(vm, JSTestMapLikeWithOverriddenOperations::info(), JSTestMapLikeWithOverriddenOperationsPrototypeTableValues, *this);
</span><del>-    putDirect(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, vm.propertyNames->builtinNames().entriesPublicName()), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));
</del><ins>+    auto& entries = vm.propertyNames->builtinNames().entriesPublicName();
+    reifyStaticProperty(vm, info(), entries, *info()->staticPropHashTable->entry(entries), *this);
+    putDirectWithoutTransition(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, entries), static_cast<unsigned>(JSC::PropertyAttribute::DontEnum));
</ins><span class="cx">     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedAndIndexedSetterNoIdentifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp        2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp   2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -80,11 +80,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedAndIndexedSetterNoIdentifierPrototype, JSTestNamedAndIndexedSetterNoIdentifierPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor = JSDOMConstructorNotConstructable<JSTestNamedAndIndexedSetterNoIdentifier>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor::s_info = { "TestNamedAndIndexedSetterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -100,14 +103,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestNamedAndIndexedSetterNoIdentifierPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestNamedAndIndexedSetterNoIdentifierPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedAndIndexedSetterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestNamedAndIndexedSetterNoIdentifierPrototype::s_info = { "TestNamedAndIndexedSetterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterNoIdentifierPrototype) };
</del><ins>+static const HashTable JSTestNamedAndIndexedSetterNoIdentifierPrototypeTable = { 1, 1, true, JSTestNamedAndIndexedSetterNoIdentifier::info(), JSTestNamedAndIndexedSetterNoIdentifierPrototypeTableValues, JSTestNamedAndIndexedSetterNoIdentifierPrototypeTableIndex };
+const ClassInfo JSTestNamedAndIndexedSetterNoIdentifierPrototype::s_info = { "TestNamedAndIndexedSetterNoIdentifier", &Base::s_info, &JSTestNamedAndIndexedSetterNoIdentifierPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterNoIdentifierPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestNamedAndIndexedSetterNoIdentifierPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedAndIndexedSetterThrowingExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp   2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp      2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -80,11 +80,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedAndIndexedSetterThrowingExceptionPrototype, JSTestNamedAndIndexedSetterThrowingExceptionPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor = JSDOMConstructorNotConstructable<JSTestNamedAndIndexedSetterThrowingException>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor::s_info = { "TestNamedAndIndexedSetterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -100,14 +103,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestNamedAndIndexedSetterThrowingExceptionPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestNamedAndIndexedSetterThrowingExceptionPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedAndIndexedSetterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestNamedAndIndexedSetterThrowingExceptionPrototype::s_info = { "TestNamedAndIndexedSetterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterThrowingExceptionPrototype) };
</del><ins>+static const HashTable JSTestNamedAndIndexedSetterThrowingExceptionPrototypeTable = { 1, 1, true, JSTestNamedAndIndexedSetterThrowingException::info(), JSTestNamedAndIndexedSetterThrowingExceptionPrototypeTableValues, JSTestNamedAndIndexedSetterThrowingExceptionPrototypeTableIndex };
+const ClassInfo JSTestNamedAndIndexedSetterThrowingExceptionPrototype::s_info = { "TestNamedAndIndexedSetterThrowingException", &Base::s_info, &JSTestNamedAndIndexedSetterThrowingExceptionPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterThrowingExceptionPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestNamedAndIndexedSetterThrowingExceptionPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedAndIndexedSetterWithIdentifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp      2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp 2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -89,11 +89,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedAndIndexedSetterWithIdentifierPrototype, JSTestNamedAndIndexedSetterWithIdentifierPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor = JSDOMConstructorNotConstructable<JSTestNamedAndIndexedSetterWithIdentifier>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor::s_info = { "TestNamedAndIndexedSetterWithIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -109,8 +112,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestNamedAndIndexedSetterWithIdentifierPrototypeTableIndex[9] = {
+    { -1, -1 },
+    { 0, 8 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestNamedAndIndexedSetterWithIdentifierPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedAndIndexedSetterWithIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="lines">@@ -118,7 +134,8 @@
</span><span class="cx">     { "indexedSetter", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunction_indexedSetter), (intptr_t) (2) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestNamedAndIndexedSetterWithIdentifierPrototype::s_info = { "TestNamedAndIndexedSetterWithIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterWithIdentifierPrototype) };
</del><ins>+static const HashTable JSTestNamedAndIndexedSetterWithIdentifierPrototypeTable = { 3, 7, true, JSTestNamedAndIndexedSetterWithIdentifier::info(), JSTestNamedAndIndexedSetterWithIdentifierPrototypeTableValues, JSTestNamedAndIndexedSetterWithIdentifierPrototypeTableIndex };
+const ClassInfo JSTestNamedAndIndexedSetterWithIdentifierPrototype::s_info = { "TestNamedAndIndexedSetterWithIdentifier", &Base::s_info, &JSTestNamedAndIndexedSetterWithIdentifierPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterWithIdentifierPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestNamedAndIndexedSetterWithIdentifierPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedDeleterNoIdentifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp 2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp    2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -79,11 +79,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedDeleterNoIdentifierPrototype, JSTestNamedDeleterNoIdentifierPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestNamedDeleterNoIdentifierDOMConstructor = JSDOMConstructorNotConstructable<JSTestNamedDeleterNoIdentifier>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestNamedDeleterNoIdentifierDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestNamedDeleterNoIdentifierDOMConstructor::s_info = { "TestNamedDeleterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterNoIdentifierDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestNamedDeleterNoIdentifierDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -99,14 +102,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestNamedDeleterNoIdentifierPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestNamedDeleterNoIdentifierPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedDeleterNoIdentifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestNamedDeleterNoIdentifierPrototype::s_info = { "TestNamedDeleterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterNoIdentifierPrototype) };
</del><ins>+static const HashTable JSTestNamedDeleterNoIdentifierPrototypeTable = { 1, 1, true, JSTestNamedDeleterNoIdentifier::info(), JSTestNamedDeleterNoIdentifierPrototypeTableValues, JSTestNamedDeleterNoIdentifierPrototypeTableIndex };
+const ClassInfo JSTestNamedDeleterNoIdentifierPrototype::s_info = { "TestNamedDeleterNoIdentifier", &Base::s_info, &JSTestNamedDeleterNoIdentifierPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterNoIdentifierPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestNamedDeleterNoIdentifierPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedDeleterThrowingExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp    2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp       2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -79,11 +79,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedDeleterThrowingExceptionPrototype, JSTestNamedDeleterThrowingExceptionPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestNamedDeleterThrowingExceptionDOMConstructor = JSDOMConstructorNotConstructable<JSTestNamedDeleterThrowingException>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestNamedDeleterThrowingExceptionDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestNamedDeleterThrowingExceptionDOMConstructor::s_info = { "TestNamedDeleterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterThrowingExceptionDOMConstructor) };
</span><span class="cx"> 
</span><span class="cx"> template<> JSValue JSTestNamedDeleterThrowingExceptionDOMConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
</span><span class="lines">@@ -99,14 +102,21 @@
</span><span class="cx">     putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/* Hash table for prototype */
</del><ins>+/* Hash table for Prototype */
</ins><span class="cx"> 
</span><ins>+static const struct CompactHashIndex JSTestNamedDeleterThrowingExceptionPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
</ins><span class="cx"> static const HashTableValue JSTestNamedDeleterThrowingExceptionPrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedDeleterThrowingExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestNamedDeleterThrowingExceptionPrototype::s_info = { "TestNamedDeleterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterThrowingExceptionPrototype) };
</del><ins>+static const HashTable JSTestNamedDeleterThrowingExceptionPrototypeTable = { 1, 1, true, JSTestNamedDeleterThrowingException::info(), JSTestNamedDeleterThrowingExceptionPrototypeTableValues, JSTestNamedDeleterThrowingExceptionPrototypeTableIndex };
+const ClassInfo JSTestNamedDeleterThrowingExceptionPrototype::s_info = { "TestNamedDeleterThrowingException", &Base::s_info, &JSTestNamedDeleterThrowingExceptionPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterThrowingExceptionPrototype) };
</ins><span class="cx"> 
</span><span class="cx"> void JSTestNamedDeleterThrowingExceptionPrototype::finishCreation(VM& vm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedDeleterWithIdentifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp (279545 => 279546)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp       2021-07-03 17:43:07 UTC (rev 279545)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp  2021-07-03 19:57:46 UTC (rev 279546)
</span><span class="lines">@@ -86,11 +86,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishCreation(JSC::VM&);
</span><ins>+public:
+    static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::HasStaticPropertyTable;
</ins><span class="cx"> };
</span><span class="cx"> STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedDeleterWithIdentifierPrototype, JSTestNamedDeleterWithIdentifierPrototype::Base);
</span><span class="cx"> 
</span><span class="cx"> using JSTestNamedDeleterWithIdentifierDOMConstructor = JSDOMConstructorNotConstructable<JSTestNamedDeleterWithIdentifier>;
</span><span class="cx"> 
</span><ins>+template<> const unsigned JSTestNamedDeleterWithIdentifierDOMConstructor::StructureFlags = Base::StructureFlags;
</ins><span class="cx"> template<> const ClassInfo JSTestNamedDeleterWithIdentifierDOMConstruc