Changeset 95340 in webkit


Ignore:
Timestamp:
Sep 16, 2011 5:22:50 PM (13 years ago)
Author:
weinig@apple.com
Message:

Cleanup JSTypeInfo a bit
https://bugs.webkit.org/show_bug.cgi?id=68289

Reviewed by Anders Carlsson.

  • dfg/DFGOperations.cpp:
  • jit/JITStubs.cpp:

(JSC::DEFINE_STUB_FUNCTION):
Replace direct access to flags() with predicate.

  • runtime/JSObject.h:

(JSC::JSFinalObject::createStructure):
Pass FinalObjectType instead of using special IsJSFinalObject.

  • runtime/JSTypeInfo.h:

(JSC::TypeInfo::TypeInfo):
Add additional assert that you should no object should OverridesHasInstance but not have ImplementsHasInstance set.

(JSC::TypeInfo::isFinalObject):
Added.

(JSC::TypeInfo::masqueradesAsUndefined):
(JSC::TypeInfo::implementsHasInstance):
(JSC::TypeInfo::isEnvironmentRecord):
(JSC::TypeInfo::overridesHasInstance):
(JSC::TypeInfo::implementsDefaultHasInstance):
(JSC::TypeInfo::overridesGetOwnPropertySlot):
(JSC::TypeInfo::overridesVisitChildren):
(JSC::TypeInfo::overridesGetPropertyNames):
(JSC::TypeInfo::prohibitsPropertyCaching):
(JSC::TypeInfo::isSetOnFlags1):
(JSC::TypeInfo::isSetOnFlags2):
Replace direct bit twiddling with helper functions.

  • runtime/Structure.cpp:

(JSC::Structure::Structure):
Use new isFinalObject() predicate.

Location:
trunk/Source/JavaScriptCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r95338 r95340  
     12011-09-16  Sam Weinig  <sam@webkit.org>
     2
     3        Cleanup JSTypeInfo a bit
     4        https://bugs.webkit.org/show_bug.cgi?id=68289
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * dfg/DFGOperations.cpp:
     9        * jit/JITStubs.cpp:
     10        (JSC::DEFINE_STUB_FUNCTION):
     11        Replace direct access to flags() with predicate.
     12
     13        * runtime/JSObject.h:
     14        (JSC::JSFinalObject::createStructure):
     15        Pass FinalObjectType instead of using special IsJSFinalObject.
     16
     17        * runtime/JSTypeInfo.h:
     18        (JSC::TypeInfo::TypeInfo):
     19        Add additional assert that you should no object should OverridesHasInstance but not have ImplementsHasInstance set.
     20
     21        (JSC::TypeInfo::isFinalObject):
     22        Added.
     23
     24        (JSC::TypeInfo::masqueradesAsUndefined):
     25        (JSC::TypeInfo::implementsHasInstance):
     26        (JSC::TypeInfo::isEnvironmentRecord):
     27        (JSC::TypeInfo::overridesHasInstance):
     28        (JSC::TypeInfo::implementsDefaultHasInstance):
     29        (JSC::TypeInfo::overridesGetOwnPropertySlot):
     30        (JSC::TypeInfo::overridesVisitChildren):
     31        (JSC::TypeInfo::overridesGetPropertyNames):
     32        (JSC::TypeInfo::prohibitsPropertyCaching):
     33        (JSC::TypeInfo::isSetOnFlags1):
     34        (JSC::TypeInfo::isSetOnFlags2):
     35        Replace direct bit twiddling with helper functions.
     36
     37        * runtime/Structure.cpp:
     38        (JSC::Structure::Structure):
     39        Use new isFinalObject() predicate.
     40
    1412011-09-16  Gavin Barraclough  <barraclough@apple.com>
    242
  • trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp

    r95147 r95340  
    610610    ASSERT(!value.isCell()
    611611        || !prototype.isCell()
    612         || !prototype.isObject() 
    613         || (base.asCell()->structure()->typeInfo().flags() & (ImplementsHasInstance | OverridesHasInstance)) != ImplementsHasInstance);
     612        || !prototype.isObject()
     613        || !base.asCell()->structure()->typeInfo().implementsDefaultHasInstance());
    614614
    615615
  • trunk/Source/JavaScriptCore/jit/JITStubs.cpp

    r95310 r95340  
    19311931    ASSERT(!value.isCell() || !baseVal.isCell() || !proto.isCell()
    19321932           || !value.isObject() || !baseVal.isObject() || !proto.isObject()
    1933            || (asObject(baseVal)->structure()->typeInfo().flags() & (ImplementsHasInstance | OverridesHasInstance)) != ImplementsHasInstance);
     1933           || !asObject(baseVal)->structure()->typeInfo().implementsDefaultHasInstance());
    19341934
    19351935
  • trunk/Source/JavaScriptCore/runtime/JSObject.h

    r95326 r95340  
    373373        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype)
    374374        {
    375             return Structure::create(globalData, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), &s_info);
     375            return Structure::create(globalData, globalObject, prototype, TypeInfo(FinalObjectType, StructureFlags), &s_info);
    376376        }
    377377
     
    390390        }
    391391
    392         static const unsigned StructureFlags = JSObject::StructureFlags | IsJSFinalObject;
     392        static const unsigned StructureFlags = JSObject::StructureFlags;
    393393
    394394        WriteBarrierBase<Unknown> m_inlineStorage[JSFinalObject_inlineStorageCapacity];
  • trunk/Source/JavaScriptCore/runtime/JSTypeInfo.h

    r95331 r95340  
    4343    static const unsigned OverridesVisitChildren = 1 << 6;
    4444    static const unsigned OverridesGetPropertyNames = 1 << 7;
    45     static const unsigned IsJSFinalObject = 1 << 8;
    46     static const unsigned ProhibitsPropertyCaching = 1 << 9;
     45    static const unsigned ProhibitsPropertyCaching = 1 << 8;
    4746
    4847    class TypeInfo {
     
    5655            ASSERT(type <= 0xff);
    5756            ASSERT(type >= CompoundType || !(flags & OverridesVisitChildren));
     57            // No object that doesn't ImplementsHasInstance should override it!
     58            ASSERT((m_flags & (ImplementsHasInstance | OverridesHasInstance)) != OverridesHasInstance);
    5859            // ImplementsDefaultHasInstance means (ImplementsHasInstance & !OverridesHasInstance)
    5960            if ((m_flags & (ImplementsHasInstance | OverridesHasInstance)) == ImplementsHasInstance)
     
    6364        JSType type() const { return static_cast<JSType>(m_type); }
    6465        bool isObject() const { return type() >= ObjectType; }
     66        bool isFinalObject() const { return type() == FinalObjectType; }
    6567
    66         bool masqueradesAsUndefined() const { return m_flags & MasqueradesAsUndefined; }
    67         bool implementsHasInstance() const { return m_flags & ImplementsHasInstance; }
    68         bool isEnvironmentRecord() const { return m_flags & IsEnvironmentRecord; }
    69         bool overridesHasInstance() const { return m_flags & OverridesHasInstance; }
    70         bool overridesGetOwnPropertySlot() const { return m_flags & OverridesGetOwnPropertySlot; }
    71         bool overridesVisitChildren() const { return m_flags & OverridesVisitChildren; }
    72         bool overridesGetPropertyNames() const { return m_flags & OverridesGetPropertyNames; }
    73         bool isFinal() const { return m_flags2 & (IsJSFinalObject >> 8); }
    74         bool prohibitsPropertyCaching() const { return m_flags2 & (ProhibitsPropertyCaching >> 8); }
    75        
    76         unsigned flags() const { return m_flags; }
     68        bool masqueradesAsUndefined() const { return isSetOnFlags1(MasqueradesAsUndefined); }
     69        bool implementsHasInstance() const { return isSetOnFlags1(ImplementsHasInstance); }
     70        bool isEnvironmentRecord() const { return isSetOnFlags1(IsEnvironmentRecord); }
     71        bool overridesHasInstance() const { return isSetOnFlags1(OverridesHasInstance); }
     72        bool implementsDefaultHasInstance() const { return isSetOnFlags1(ImplementsDefaultHasInstance); }
     73        bool overridesGetOwnPropertySlot() const { return isSetOnFlags1(OverridesGetOwnPropertySlot); }
     74        bool overridesVisitChildren() const { return isSetOnFlags1(OverridesVisitChildren); }
     75        bool overridesGetPropertyNames() const { return isSetOnFlags1(OverridesGetPropertyNames); }
     76        bool prohibitsPropertyCaching() const { return isSetOnFlags2(ProhibitsPropertyCaching); }
    7777
    7878        static ptrdiff_t flagsOffset()
     
    8787
    8888    private:
     89        bool isSetOnFlags1(unsigned flag) const { ASSERT(flag <= (1 << 7)); return m_flags & flag; }
     90        bool isSetOnFlags2(unsigned flag) const { ASSERT(flag >= (1 << 8)); return m_flags2 & (flag >> 8); }
     91
    8992        unsigned char m_type;
    9093        unsigned char m_flags;
  • trunk/Source/JavaScriptCore/runtime/Structure.cpp

    r95326 r95340  
    166166    , m_prototype(globalData, this, prototype)
    167167    , m_classInfo(classInfo)
    168     , m_propertyStorageCapacity(typeInfo.isFinal() ? JSFinalObject_inlineStorageCapacity : JSNonFinalObject_inlineStorageCapacity)
     168    , m_propertyStorageCapacity(typeInfo.isFinalObject() ? JSFinalObject_inlineStorageCapacity : JSNonFinalObject_inlineStorageCapacity)
    169169    , m_offset(noOffset)
    170170    , m_dictionaryKind(NoneDictionaryKind)
Note: See TracChangeset for help on using the changeset viewer.