Changeset 60057 in webkit


Ignore:
Timestamp:
May 23, 2010 7:15:02 PM (14 years ago)
Author:
weinig@apple.com
Message:

Fix for https://bugs.webkit.org/show_bug.cgi?id=39575
Make JS DOMObject inherit from JSObjectWithGlobalObject instead of JSObject

Reviewed by Oliver Hunt.

JavaScriptCore:

Expose the global object stored in JSObjectWithGlobalObject.

(JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
(JSC::JSObjectWithGlobalObject::globalObject):

  • runtime/JSObjectWithGlobalObject.h:

WebCore:

  • Changes JSDOMWindowShell to inherit from JSObject instead of DOMObject since it doesn't ever go into any DOMObject tables. In a separate change, we may want to make this inherit from JSObjectWithGlobalObject since JSDOMWindowShell does store a global object pointer.
  • Change DOMObject to inherit from JSObjectWithGlobalObject instead of JSObject. In this change I am keeping around DOMObjectWithGlobalPointer, which now just uses the capabilities of JSObjectWithGlobalObject instead of implementing them itself. DOMObjectWithGlobalPointer will go away in a subsequent patch.
  • bindings/js/JSDOMBinding.h:

(WebCore::DOMObjectWithGlobalPointer::globalObject):
(WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):

  • bindings/js/JSDOMWindowShell.h:
  • bindings/js/JSDOMWrapper.h:

(WebCore::DOMObject::DOMObject):

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r59983 r60057  
     12010-05-23  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Fix for https://bugs.webkit.org/show_bug.cgi?id=39575
     6        Make JS DOMObject inherit from JSObjectWithGlobalObject instead of JSObject
     7
     8        Expose the global object stored in JSObjectWithGlobalObject.
     9
     10        * JavaScriptCore.exp:
     11        * JavaScriptCore.xcodeproj/project.pbxproj:
     12        * runtime/JSObjectWithGlobalObject.cpp:
     13        (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
     14        (JSC::JSObjectWithGlobalObject::globalObject):
     15        * runtime/JSObjectWithGlobalObject.h:
     16
    1172010-05-21  Oliver Hunt  <oliver@apple.com>
    218
  • trunk/JavaScriptCore/JavaScriptCore.exp

    r59941 r60057  
    1 __ZN7WebCore10StringImpl6createEPKcj
    2 __ZN7WebCore12AtomicString11addSlowCaseEPNS_10StringImplE
    31_JSCheckScriptSyntax
    42_JSClassCreate
     
    102100__Z15jsRegExpExecutePK8JSRegExpPKtiiPii
    103101__ZN14OpaqueJSString6createERKN3JSC7UStringE
    104 __ZN3JSC10JSFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjectESC_RKNS_7ArgListEE
    105102__ZN3JSC10Identifier11addSlowCaseEPNS_12JSGlobalDataEPN7WebCore10StringImplE
    106103__ZN3JSC10Identifier11addSlowCaseEPNS_9ExecStateEPN7WebCore10StringImplE
     
    113110__ZN3JSC10JSFunction4infoE
    114111__ZN3JSC10JSFunction4nameEPNS_9ExecStateE
     112__ZN3JSC10JSFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjectESC_RKNS_7ArgListEE
    115113__ZN3JSC10throwErrorEPNS_9ExecStateENS_9ErrorTypeE
    116114__ZN3JSC10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKc
     
    194192__ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE
    195193__ZN3JSC23setUpStaticFunctionSlotEPNS_9ExecStateEPKNS_9HashEntryEPNS_8JSObjectERKNS_10IdentifierERNS_12PropertySlotE
     194__ZN3JSC24JSObjectWithGlobalObjectC2EPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEE
    196195__ZN3JSC24createStackOverflowErrorEPNS_9ExecStateE
    197 __ZN3JSC24JSObjectWithGlobalObjectC2EPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEE
    198196__ZN3JSC25evaluateInGlobalCallFrameERKNS_7UStringERNS_7JSValueEPNS_14JSGlobalObjectE
    199197__ZN3JSC35createInterruptedExecutionExceptionEPNS_12JSGlobalDataE
     
    397395__ZN7WebCore10StringImpl5upperEv
    398396__ZN7WebCore10StringImpl6createEPKc
     397__ZN7WebCore10StringImpl6createEPKcj
    399398__ZN7WebCore10StringImpl6createEPKtj
    400399__ZN7WebCore10StringImpl6createEPKtjN3WTF10PassRefPtrINS3_21CrossThreadRefCountedINS3_16OwnFastMallocPtrIS1_EEEEEE
     
    408407__ZN7WebCore10StringImplD1Ev
    409408__ZN7WebCore11commentAtomE
     409__ZN7WebCore12AtomicString11addSlowCaseEPNS_10StringImplE
    410410__ZN7WebCore12AtomicString3addEPKc
    411411__ZN7WebCore12AtomicString3addEPKt
     
    475475__ZNK3JSC18PropertyDescriptor6setterEv
    476476__ZNK3JSC18PropertyDescriptor8writableEv
    477 __ZNK3JSC4Heap4sizeEv
     477__ZNK3JSC24JSObjectWithGlobalObject12globalObjectEv
    478478__ZNK3JSC4Heap10statisticsEv
    479479__ZNK3JSC4Heap11objectCountEv
     480__ZNK3JSC4Heap4sizeEv
    480481__ZNK3JSC6JSCell11toPrimitiveEPNS_9ExecStateENS_22PreferredPrimitiveTypeE
    481482__ZNK3JSC6JSCell12toThisObjectEPNS_9ExecStateE
  • trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r59969 r60057  
    320320                A7B48F490EE8936F00DCBDB6 /* ExecutableAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7B48DB60EE74CFC00DCBDB6 /* ExecutableAllocator.cpp */; };
    321321                A7C1E8E4112E72EF00A37F98 /* JITPropertyAccess32_64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7C1E8C8112E701C00A37F98 /* JITPropertyAccess32_64.cpp */; };
    322                 A7C2217810C7479400F97913 /* JSZombie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7C2216B10C7469C00F97913 /* JSZombie.cpp */; };
    323322                A7C530E4102A3813005BC741 /* MarkStackPosix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7C530E3102A3813005BC741 /* MarkStackPosix.cpp */; };
    324323                A7D649AA1015224E009B2E1B /* PossiblyNull.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D649A91015224E009B2E1B /* PossiblyNull.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    329328                A7FB60A4103F7DC20017A286 /* PropertyDescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7FB60A3103F7DC20017A286 /* PropertyDescriptor.cpp */; };
    330329                A7FB61001040C38B0017A286 /* PropertyDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FB604B103F5EAB0017A286 /* PropertyDescriptor.h */; settings = {ATTRIBUTES = (Private, ); }; };
     330                BC01D4F111A8F1FF00A54B2A /* JSZombie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC01D4EF11A8F1FF00A54B2A /* JSZombie.cpp */; };
     331                BC01D4F211A8F1FF00A54B2A /* JSZombie.h in Headers */ = {isa = PBXBuildFile; fileRef = BC01D4F011A8F1FF00A54B2A /* JSZombie.h */; };
    331332                BC02E90D0E1839DB000F9297 /* ErrorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9050E1839DB000F9297 /* ErrorConstructor.h */; };
    332333                BC02E90F0E1839DB000F9297 /* ErrorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9070E1839DB000F9297 /* ErrorPrototype.h */; };
     
    915916                A7B48DB60EE74CFC00DCBDB6 /* ExecutableAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExecutableAllocator.cpp; sourceTree = "<group>"; };
    916917                A7C1E8C8112E701C00A37F98 /* JITPropertyAccess32_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITPropertyAccess32_64.cpp; sourceTree = "<group>"; };
    917                 A7C2216810C745E000F97913 /* JSZombie.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSZombie.h; sourceTree = "<group>"; };
    918                 A7C2216B10C7469C00F97913 /* JSZombie.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSZombie.cpp; sourceTree = "<group>"; };
    919918                A7C530E3102A3813005BC741 /* MarkStackPosix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkStackPosix.cpp; sourceTree = "<group>"; };
    920919                A7D649A91015224E009B2E1B /* PossiblyNull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PossiblyNull.h; sourceTree = "<group>"; };
     
    931930                A8E894310CD0602400367179 /* JSCallbackObjectFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCallbackObjectFunctions.h; sourceTree = "<group>"; };
    932931                A8E894330CD0603F00367179 /* JSGlobalObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGlobalObject.h; sourceTree = "<group>"; };
     932                BC01D4EF11A8F1FF00A54B2A /* JSZombie.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSZombie.cpp; sourceTree = "<group>"; };
     933                BC01D4F011A8F1FF00A54B2A /* JSZombie.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSZombie.h; sourceTree = "<group>"; };
    933934                BC02E9040E1839DB000F9297 /* ErrorConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ErrorConstructor.cpp; sourceTree = "<group>"; };
    934935                BC02E9050E1839DB000F9297 /* ErrorConstructor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ErrorConstructor.h; sourceTree = "<group>"; };
     
    16211622                                BC22A3980E16E14800AF21C8 /* JSObject.cpp */,
    16221623                                BC22A3990E16E14800AF21C8 /* JSObject.h */,
     1624                                A783A2AA11A5BE8400563D20 /* JSObjectWithGlobalObject.cpp */,
     1625                                A783A0D011A36DCA00563D20 /* JSObjectWithGlobalObject.h */,
    16231626                                A7F9935E0FD7325100A0B2D0 /* JSONObject.cpp */,
    16241627                                A7F9935D0FD7325100A0B2D0 /* JSONObject.h */,
     
    16381641                                65C7A1710A8EAACB00FA37EA /* JSWrapperObject.cpp */,
    16391642                                65C7A1720A8EAACB00FA37EA /* JSWrapperObject.h */,
    1640                                 A7C2216B10C7469C00F97913 /* JSZombie.cpp */,
    1641                                 A7C2216B10C7469C00F97913 /* JSZombie.cpp */,
    1642                                 A7C2216810C745E000F97913 /* JSZombie.h */,
    1643                                 A7C2216810C745E000F97913 /* JSZombie.h */,
     1643                                BC01D4EF11A8F1FF00A54B2A /* JSZombie.cpp */,
     1644                                BC01D4F011A8F1FF00A54B2A /* JSZombie.h */,
    16441645                                A7E2EA6A0FB460CF00601F06 /* LiteralParser.cpp */,
    16451646                                A7E2EA690FB460CF00601F06 /* LiteralParser.h */,
     
    17211722                                14035DB010DBFB2A00FFFFE7 /* WeakGCPtr.h */,
    17221723                                1420BE7A10AA6DDB00F455D2 /* WeakRandom.h */,
    1723                                 A783A0D011A36DCA00563D20 /* JSObjectWithGlobalObject.h */,
    1724                                 A783A2AA11A5BE8400563D20 /* JSObjectWithGlobalObject.cpp */,
    17251724                        );
    17261725                        path = runtime;
     
    21612160                                86C568E211A213EE0007F7F0 /* MIPSAssembler.h in Headers */,
    21622161                                A783A0D111A36DCA00563D20 /* JSObjectWithGlobalObject.h in Headers */,
     2162                                BC01D4F211A8F1FF00A54B2A /* JSZombie.h in Headers */,
    21632163                        );
    21642164                        runOnlyForDeploymentPostprocessing = 0;
     
    25362536                                147F39D7107EC37600427A48 /* JSVariableObject.cpp in Sources */,
    25372537                                14280870107EC1340013E7B2 /* JSWrapperObject.cpp in Sources */,
    2538                                 A7C2217810C7479400F97913 /* JSZombie.cpp in Sources */,
    25392538                                BCFD8C920EEB2EE700283848 /* JumpTable.cpp in Sources */,
    25402539                                148F21B0107EC5410042EC2C /* Lexer.cpp in Sources */,
     
    26172616                                146FE51211A710430087AE66 /* JITCall32_64.cpp in Sources */,
    26182617                                A783A2AB11A5BE8400563D20 /* JSObjectWithGlobalObject.cpp in Sources */,
     2618                                BC01D4F111A8F1FF00A54B2A /* JSZombie.cpp in Sources */,
    26192619                        );
    26202620                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/JavaScriptCore/runtime/JSObjectWithGlobalObject.cpp

    r59941 r60057  
    3434    : JSObject(structure)
    3535{
     36    COMPILE_ASSERT(AnonymousSlotCount == 1, AnonymousSlotCount_must_be_one);
    3637    ASSERT(!globalObject || globalObject->isGlobalObject());
    37     putAnonymousValue(0, globalObject);
     38    putAnonymousValue(GlobalObjectSlot, globalObject);
    3839}
    3940
     41JSGlobalObject* JSObjectWithGlobalObject::globalObject() const
     42{
     43    return asGlobalObject((getAnonymousValue(GlobalObjectSlot).asCell()));
    4044}
     45
     46} // namespace JSC
  • trunk/JavaScriptCore/runtime/JSObjectWithGlobalObject.h

    r59941 r60057  
    4040    }
    4141
     42    JSGlobalObject* globalObject() const;
     43
    4244protected:
    4345    JSObjectWithGlobalObject(JSGlobalObject*, NonNullPassRefPtr<Structure>);
     
    4951    }
    5052    static const unsigned AnonymousSlotCount = JSObject::AnonymousSlotCount + 1;
     53    static const unsigned GlobalObjectSlot = 0;
    5154};
    5255
    53 }
     56} // namespace JSC
    5457
    5558#endif // JSObjectWithGlobalObject_h
  • trunk/WebCore/ChangeLog

    r60056 r60057  
     12010-05-23  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Fix for https://bugs.webkit.org/show_bug.cgi?id=39575
     6        Make JS DOMObject inherit from JSObjectWithGlobalObject instead of JSObject
     7
     8        - Changes JSDOMWindowShell to inherit from JSObject instead of
     9          DOMObject since it doesn't ever go into any DOMObject tables.
     10          In a separate change, we may want to make this inherit from
     11          JSObjectWithGlobalObject since JSDOMWindowShell does store a
     12          global object pointer.
     13        - Change DOMObject to inherit from JSObjectWithGlobalObject
     14          instead of JSObject. In this change I am keeping around
     15          DOMObjectWithGlobalPointer, which now just uses the capabilities
     16          of JSObjectWithGlobalObject instead of implementing them
     17          itself.  DOMObjectWithGlobalPointer will go away in a subsequent
     18          patch.
     19
     20        * bindings/js/JSDOMBinding.h:
     21        (WebCore::DOMObjectWithGlobalPointer::globalObject):
     22        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
     23        * bindings/js/JSDOMWindowShell.h:
     24        * bindings/js/JSDOMWrapper.h:
     25        (WebCore::DOMObject::DOMObject):
     26
    1272010-05-23  Eric Seidel  <eric@webkit.org>
    228
  • trunk/WebCore/bindings/js/JSDOMBinding.h

    r58027 r60057  
    5959    class DOMObjectWithGlobalPointer : public DOMObject {
    6060    public:
    61         JSDOMGlobalObject* globalObject() const { return static_cast<JSDOMGlobalObject*>(getAnonymousValue(GlobalObjectSlot).asCell()); }
     61        JSDOMGlobalObject* globalObject() const
     62        {
     63            return static_cast<JSDOMGlobalObject*>(DOMObject::globalObject());
     64        }
    6265
    6366        ScriptExecutionContext* scriptExecutionContext() const
     
    7376
    7477    protected:
    75         static const unsigned AnonymousSlotCount = 1 + DOMObject::AnonymousSlotCount;
    76         static const unsigned GlobalObjectSlot = AnonymousSlotCount - 1;
    77 
    7878        DOMObjectWithGlobalPointer(NonNullPassRefPtr<JSC::Structure> structure, JSDOMGlobalObject* globalObject)
    79             : DOMObject(structure)
     79            : DOMObject(globalObject, structure)
    8080        {
    8181            // FIXME: This ASSERT is valid, but fires in fast/dom/gc-6.html when trying to create
     
    8383            // needing to reach through the frame to get to the Document*.  See bug 27640.
    8484            // ASSERT(globalObject->scriptExecutionContext());
    85             putAnonymousValue(GlobalObjectSlot, globalObject);
    86         }
    87         virtual ~DOMObjectWithGlobalPointer() { }
     85        }
    8886    };
    8987
  • trunk/WebCore/bindings/js/JSDOMWindowShell.h

    r54022 r60057  
    3838    class Frame;
    3939
    40     class JSDOMWindowShell : public DOMObject {
    41         typedef DOMObject Base;
     40    class JSDOMWindowShell : public JSC::JSObject {
     41        typedef JSC::JSObject Base;
    4242    public:
    4343        JSDOMWindowShell(PassRefPtr<DOMWindow>, DOMWrapperWorld* world);
     
    6767
    6868    private:
    69         static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesMarkChildren | JSC::OverridesGetPropertyNames | DOMObject::StructureFlags;
     69        static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesMarkChildren | JSC::OverridesGetPropertyNames | Base::StructureFlags;
    7070
    7171        virtual void markChildren(JSC::MarkStack&);
  • trunk/WebCore/bindings/js/JSDOMWrapper.h

    r55216 r60057  
    2323#define JSDOMWrapper_h
    2424
    25 #include <runtime/JSObject.h>
     25#include <runtime/JSObjectWithGlobalObject.h>
    2626
    2727namespace WebCore {
    2828
    29 // Base class for all objects in this binding except Window.
    30 class DOMObject : public JSC::JSObject {
     29// FIXME: Rename to JSDOMWrapper.
     30class DOMObject : public JSC::JSObjectWithGlobalObject {
    3131protected:
    32     explicit DOMObject(NonNullPassRefPtr<JSC::Structure> structure)
    33         : JSObject(structure)
     32    explicit DOMObject(JSC::JSGlobalObject* globalObject, NonNullPassRefPtr<JSC::Structure> structure)
     33        : JSObjectWithGlobalObject(globalObject, structure)
    3434    {
    3535    }
Note: See TracChangeset for help on using the changeset viewer.