[webkit-changes] [WebKit/WebKit] af8e0a: [JSC] Change JSProxy to JSGlobalProxy

Yusuke Suzuki noreply at github.com
Wed Apr 12 21:57:45 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: af8e0a9ded65559e98d134a4f753b0bc68c89a49
      https://github.com/WebKit/WebKit/commit/af8e0a9ded65559e98d134a4f753b0bc68c89a49
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-04-12 (Wed, 12 Apr 2023)

  Changed paths:
    M JSTests/microbenchmarks/put-slow-no-cache-js-proxy.js
    M JSTests/stress/custom-get-set-proto-chain-put.js
    M JSTests/stress/delete-property-ic-proxy.js
    M JSTests/stress/for-in-proxy-target-changed-structure.js
    M JSTests/stress/for-in-proxy.js
    M JSTests/stress/get-property-names-stack-overflow.js
    M JSTests/stress/object-toString-with-proxy.js
    M JSTests/stress/proxy-inline-cache.js
    M JSTests/stress/put-to-proto-chain-overrides-put.js
    M Source/JavaScriptCore/API/JSObjectRef.cpp
    M Source/JavaScriptCore/API/JSValueRef.cpp
    M Source/JavaScriptCore/API/JSWeakObjectMapRefPrivate.cpp
    M Source/JavaScriptCore/API/tests/JSObjectGetProxyTargetTest.cpp
    M Source/JavaScriptCore/CMakeLists.txt
    M Source/JavaScriptCore/JavaScriptCore.order
    M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
    M Source/JavaScriptCore/Sources.txt
    M Source/JavaScriptCore/bytecode/AccessCase.cpp
    M Source/JavaScriptCore/bytecode/AccessCase.h
    M Source/JavaScriptCore/bytecode/DeleteByStatus.cpp
    M Source/JavaScriptCore/bytecode/GetByStatus.cpp
    M Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp
    M Source/JavaScriptCore/bytecode/GetterSetterAccessCase.h
    M Source/JavaScriptCore/bytecode/InByStatus.cpp
    M Source/JavaScriptCore/bytecode/InlineCacheCompiler.cpp
    M Source/JavaScriptCore/bytecode/ProxyableAccessCase.cpp
    M Source/JavaScriptCore/bytecode/ProxyableAccessCase.h
    M Source/JavaScriptCore/bytecode/PutByStatus.cpp
    M Source/JavaScriptCore/bytecode/Repatch.cpp
    M Source/JavaScriptCore/heap/Heap.h
    M Source/JavaScriptCore/heap/HeapSubspaceTypes.h
    M Source/JavaScriptCore/jsc.cpp
    M Source/JavaScriptCore/runtime/CommonSlowPaths.h
    M Source/JavaScriptCore/runtime/HasOwnPropertyCache.h
    M Source/JavaScriptCore/runtime/JSCInlines.h
    M Source/JavaScriptCore/runtime/JSCJSValueInlines.h
    M Source/JavaScriptCore/runtime/JSCast.h
    M Source/JavaScriptCore/runtime/JSCellInlines.h
    M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
    A Source/JavaScriptCore/runtime/JSGlobalProxy.cpp
    A Source/JavaScriptCore/runtime/JSGlobalProxy.h
    M Source/JavaScriptCore/runtime/JSObject.cpp
    R Source/JavaScriptCore/runtime/JSProxy.cpp
    R Source/JavaScriptCore/runtime/JSProxy.h
    M Source/JavaScriptCore/runtime/JSType.cpp
    M Source/JavaScriptCore/runtime/JSType.h
    M Source/JavaScriptCore/runtime/Structure.h
    M Source/JavaScriptCore/tools/JSDollarVM.cpp
    M Source/WebCore/bindings/js/JSDOMGlobalObject.cpp
    M Source/WebCore/bindings/js/JSDOMGlobalObject.h
    M Source/WebCore/bindings/js/JSDOMGlobalObjectInlines.h
    M Source/WebCore/bindings/js/JSShadowRealmGlobalScopeBase.cpp
    M Source/WebCore/bindings/js/JSShadowRealmGlobalScopeBase.h
    M Source/WebCore/bindings/js/JSWindowProxy.cpp
    M Source/WebCore/bindings/js/JSWindowProxy.h
    M Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp
    M Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.h
    M Source/WebCore/bindings/js/JSWorkletGlobalScopeBase.cpp
    M Source/WebCore/bindings/js/JSWorkletGlobalScopeBase.h
    M Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
    M Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.h
    M Source/WebCore/workers/WorkerOrWorkletScriptController.cpp

  Log Message:
  -----------
  [JSC] Change JSProxy to JSGlobalProxy
https://bugs.webkit.org/show_bug.cgi?id=255374
rdar://107965509

Reviewed by Mark Lam and Justin Michaud.

We would like to optimize JSProxy case more in IC and this patch cleans up this with refactoring to pave a way to doing it.
We rename JSProxy to JSGlobalProxy, since it only takes GlobalObject. We never pass non JSGlobalObject as a target of this proxy.

* JSTests/microbenchmarks/put-slow-no-cache-js-proxy.js:
(set _v):
(proxy.vm.createProxy.set foo): Deleted.
* JSTests/stress/custom-get-set-proto-chain-put.js:
(getObjects):
* JSTests/stress/delete-property-ic-proxy.js:
(foo2):
(foo2.foo3): Deleted.
* JSTests/stress/get-property-names-stack-overflow.js:
* JSTests/stress/put-to-proto-chain-overrides-put.js:
(testSetResult):
* Source/JavaScriptCore/API/JSObjectRef.cpp:
(JSObjectGetPrivate):
(JSObjectSetPrivate):
(JSObjectGetPrivateProperty):
(JSObjectSetPrivateProperty):
(JSObjectDeletePrivateProperty):
(JSObjectGetProxyTarget):
* Source/JavaScriptCore/API/JSValueRef.cpp:
(JSValueIsObjectOfClass):
* Source/JavaScriptCore/API/JSWeakObjectMapRefPrivate.cpp:
* Source/JavaScriptCore/API/tests/JSObjectGetProxyTargetTest.cpp:
(testJSObjectGetProxyTarget):
* Source/JavaScriptCore/CMakeLists.txt:
* Source/JavaScriptCore/JavaScriptCore.order:
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/Sources.txt:
* Source/JavaScriptCore/bytecode/AccessCase.cpp:
(JSC::AccessCase::createReplace):
(JSC::AccessCase::guardedByStructureCheckSkippingConstantIdentifierCheck const):
(JSC::AccessCase::doesCalls const):
(JSC::AccessCase::canReplace const):
(JSC::AccessCase::canBeShared):
* Source/JavaScriptCore/bytecode/AccessCase.h:
(JSC::AccessCase::viaGlobalProxy const):
(JSC::AccessCase::hash const):
(JSC::AccessCase::AccessCase):
(JSC::AccessCase::viaProxy const): Deleted.
* Source/JavaScriptCore/bytecode/DeleteByStatus.cpp:
(JSC::DeleteByStatus::computeForStubInfoWithoutExitSiteFeedback):
* Source/JavaScriptCore/bytecode/GetByStatus.cpp:
(JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
* Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp:
(JSC::GetterSetterAccessCase::GetterSetterAccessCase):
(JSC::GetterSetterAccessCase::create):
* Source/JavaScriptCore/bytecode/GetterSetterAccessCase.h:
* Source/JavaScriptCore/bytecode/InByStatus.cpp:
(JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback):
* Source/JavaScriptCore/bytecode/InlineCacheCompiler.cpp:
(JSC::InlineCacheCompiler::generateWithGuard):
(JSC::InlineCacheCompiler::generateImpl):
(JSC::InlineCacheCompiler::regenerate):
* Source/JavaScriptCore/bytecode/ProxyableAccessCase.cpp:
(JSC::ProxyableAccessCase::ProxyableAccessCase):
(JSC::ProxyableAccessCase::create):
(JSC::ProxyableAccessCase::dumpImpl const):
* Source/JavaScriptCore/bytecode/ProxyableAccessCase.h:
* Source/JavaScriptCore/bytecode/PutByStatus.cpp:
(JSC::PutByStatus::computeForStubInfo):
* Source/JavaScriptCore/bytecode/Repatch.cpp:
(JSC::tryCacheGetBy):
(JSC::tryCachePutBy):
* Source/JavaScriptCore/heap/Heap.h:
* Source/JavaScriptCore/heap/HeapSubspaceTypes.h:
* Source/JavaScriptCore/jsc.cpp:
(JSC_DEFINE_CUSTOM_SETTER):
(JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/CommonSlowPaths.h:
(JSC::CommonSlowPaths::originalStructureBeforePut):
* Source/JavaScriptCore/runtime/HasOwnPropertyCache.h:
(JSC::HasOwnPropertyCache::tryAdd):
* Source/JavaScriptCore/runtime/JSCInlines.h:
* Source/JavaScriptCore/runtime/JSCJSValueInlines.h:
(JSC::isThisValueAltered):
* Source/JavaScriptCore/runtime/JSCast.h:
* Source/JavaScriptCore/runtime/JSCellInlines.h:
(JSC::JSCell::isProxy const):
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::resetPrototype):
(JSC::JSGlobalObject::finishCreation):
* Source/JavaScriptCore/runtime/JSGlobalProxy.cpp: Renamed from Source/JavaScriptCore/runtime/JSProxy.cpp.
(JSC::JSGlobalProxy::visitChildrenImpl):
(JSC::JSGlobalProxy::setTarget):
(JSC::JSGlobalProxy::getOwnPropertySlot):
(JSC::JSGlobalProxy::getOwnPropertySlotByIndex):
(JSC::JSGlobalProxy::put):
(JSC::JSGlobalProxy::putByIndex):
(JSC::JSGlobalProxy::defineOwnProperty):
(JSC::JSGlobalProxy::deleteProperty):
(JSC::JSGlobalProxy::isExtensible):
(JSC::JSGlobalProxy::preventExtensions):
(JSC::JSGlobalProxy::deletePropertyByIndex):
(JSC::JSGlobalProxy::getOwnPropertyNames):
(JSC::JSGlobalProxy::setPrototype):
(JSC::JSGlobalProxy::getPrototype):
* Source/JavaScriptCore/runtime/JSGlobalProxy.h: Renamed from Source/JavaScriptCore/runtime/JSProxy.h.
(JSC::JSGlobalProxy::subspaceFor):
(JSC::JSGlobalProxy::create):
(JSC::JSGlobalProxy::createStructure):
(JSC::JSGlobalProxy::target const):
(JSC::JSGlobalProxy::targetOffset):
(JSC::JSGlobalProxy::JSGlobalProxy):
(JSC::JSGlobalProxy::finishCreation):
* Source/JavaScriptCore/runtime/JSObject.cpp:
(JSC::JSObject::definePropertyOnReceiver):
* Source/JavaScriptCore/runtime/JSType.cpp:
(WTF::printInternal):
* Source/JavaScriptCore/runtime/JSType.h:
* Source/JavaScriptCore/runtime/Structure.h:
(JSC::Structure::isProxy const):
* Source/JavaScriptCore/tools/JSDollarVM.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:
(WebCore::JSDOMGlobalObject::deriveShadowRealmGlobalObject):
* Source/WebCore/bindings/js/JSDOMGlobalObject.h:
* Source/WebCore/bindings/js/JSDOMGlobalObjectInlines.h:
(WebCore::toJSDOMGlobalObject):
* Source/WebCore/bindings/js/JSShadowRealmGlobalScopeBase.cpp:
(WebCore::JSShadowRealmGlobalScopeBase::finishCreation):
* Source/WebCore/bindings/js/JSShadowRealmGlobalScopeBase.h:
* Source/WebCore/bindings/js/JSWindowProxy.cpp:
(WebCore::JSWindowProxy::create):
* Source/WebCore/bindings/js/JSWindowProxy.h:
* Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp:
(WebCore::JSWorkerGlobalScopeBase::finishCreation):
* Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.h:
* Source/WebCore/bindings/js/JSWorkletGlobalScopeBase.cpp:
(WebCore::JSWorkletGlobalScopeBase::finishCreation):
* Source/WebCore/bindings/js/JSWorkletGlobalScopeBase.h:
* Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:
(ShouldCreateWithJSGlobalProxy):
(GenerateHeader):
(GenerateImplementation):
(ShouldCreateWithJSProxy): Deleted.
* Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:
(WebCore::JSDedicatedWorkerGlobalScope::finishCreation):
* Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h:
(WebCore::JSDedicatedWorkerGlobalScope::create):
* Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:
(WebCore::JSPaintWorkletGlobalScope::finishCreation):
* Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h:
(WebCore::JSPaintWorkletGlobalScope::create):
* Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:
(WebCore::JSServiceWorkerGlobalScope::finishCreation):
* Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h:
(WebCore::JSServiceWorkerGlobalScope::create):
* Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.cpp:
(WebCore::JSShadowRealmGlobalScope::finishCreation):
* Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.h:
(WebCore::JSShadowRealmGlobalScope::create):
* Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp:
(WebCore::JSSharedWorkerGlobalScope::finishCreation):
* Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.h:
(WebCore::JSSharedWorkerGlobalScope::create):
* Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.cpp:
(WebCore::JSWorkerGlobalScope::finishCreation):
* Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.h:
(WebCore::JSWorkerGlobalScope::create):
* Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.cpp:
(WebCore::JSWorkletGlobalScope::finishCreation):
* Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.h:
(WebCore::JSWorkletGlobalScope::create):
* Source/WebCore/workers/WorkerOrWorkletScriptController.cpp:
(WebCore::WorkerOrWorkletScriptController::initScriptWithSubclass):

Canonical link: https://commits.webkit.org/262902@main




More information about the webkit-changes mailing list