Changeset 95340 in webkit
- Timestamp:
- Sep 16, 2011 5:22:50 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r95338 r95340 1 2011-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 1 41 2011-09-16 Gavin Barraclough <barraclough@apple.com> 2 42 -
trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp
r95147 r95340 610 610 ASSERT(!value.isCell() 611 611 || !prototype.isCell() 612 || !prototype.isObject() 613 || (base.asCell()->structure()->typeInfo().flags() & (ImplementsHasInstance | OverridesHasInstance)) != ImplementsHasInstance);612 || !prototype.isObject() 613 || !base.asCell()->structure()->typeInfo().implementsDefaultHasInstance()); 614 614 615 615 -
trunk/Source/JavaScriptCore/jit/JITStubs.cpp
r95310 r95340 1931 1931 ASSERT(!value.isCell() || !baseVal.isCell() || !proto.isCell() 1932 1932 || !value.isObject() || !baseVal.isObject() || !proto.isObject() 1933 || (asObject(baseVal)->structure()->typeInfo().flags() & (ImplementsHasInstance | OverridesHasInstance)) != ImplementsHasInstance);1933 || !asObject(baseVal)->structure()->typeInfo().implementsDefaultHasInstance()); 1934 1934 1935 1935 -
trunk/Source/JavaScriptCore/runtime/JSObject.h
r95326 r95340 373 373 static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) 374 374 { 375 return Structure::create(globalData, globalObject, prototype, TypeInfo( ObjectType, StructureFlags), &s_info);375 return Structure::create(globalData, globalObject, prototype, TypeInfo(FinalObjectType, StructureFlags), &s_info); 376 376 } 377 377 … … 390 390 } 391 391 392 static const unsigned StructureFlags = JSObject::StructureFlags | IsJSFinalObject;392 static const unsigned StructureFlags = JSObject::StructureFlags; 393 393 394 394 WriteBarrierBase<Unknown> m_inlineStorage[JSFinalObject_inlineStorageCapacity]; -
trunk/Source/JavaScriptCore/runtime/JSTypeInfo.h
r95331 r95340 43 43 static const unsigned OverridesVisitChildren = 1 << 6; 44 44 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; 47 46 48 47 class TypeInfo { … … 56 55 ASSERT(type <= 0xff); 57 56 ASSERT(type >= CompoundType || !(flags & OverridesVisitChildren)); 57 // No object that doesn't ImplementsHasInstance should override it! 58 ASSERT((m_flags & (ImplementsHasInstance | OverridesHasInstance)) != OverridesHasInstance); 58 59 // ImplementsDefaultHasInstance means (ImplementsHasInstance & !OverridesHasInstance) 59 60 if ((m_flags & (ImplementsHasInstance | OverridesHasInstance)) == ImplementsHasInstance) … … 63 64 JSType type() const { return static_cast<JSType>(m_type); } 64 65 bool isObject() const { return type() >= ObjectType; } 66 bool isFinalObject() const { return type() == FinalObjectType; } 65 67 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); } 77 77 78 78 static ptrdiff_t flagsOffset() … … 87 87 88 88 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 89 92 unsigned char m_type; 90 93 unsigned char m_flags; -
trunk/Source/JavaScriptCore/runtime/Structure.cpp
r95326 r95340 166 166 , m_prototype(globalData, this, prototype) 167 167 , m_classInfo(classInfo) 168 , m_propertyStorageCapacity(typeInfo.isFinal () ? JSFinalObject_inlineStorageCapacity : JSNonFinalObject_inlineStorageCapacity)168 , m_propertyStorageCapacity(typeInfo.isFinalObject() ? JSFinalObject_inlineStorageCapacity : JSNonFinalObject_inlineStorageCapacity) 169 169 , m_offset(noOffset) 170 170 , m_dictionaryKind(NoneDictionaryKind)
Note: See TracChangeset
for help on using the changeset viewer.