Title: [194369] trunk/Source
Revision
194369
Author
[email protected]
Date
2015-12-22 12:04:56 -0800 (Tue, 22 Dec 2015)

Log Message

Remove OverridesHasInstance from TypeInfoFlags
https://bugs.webkit.org/show_bug.cgi?id=152005

Reviewed by Saam Barati.

Currently, we have three TypeInfo flags associated with instanceof behavior,
ImplementsHasInstance, ImplementDefaultHasInstance, and OverridesHasInstance. This patch
removes the third and moves the first to the out of line flags. In theory, we should only
need one flag but removing ImplementsHasInstance is more involved and should be done in a
separate patch.

Source/_javascript_Core:

* API/JSCallbackConstructor.h:
* API/JSCallbackObject.h:
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_overrides_has_instance):
* jit/JITOpcodes32_64.cpp:
(JSC::JIT::emit_op_overrides_has_instance):
* llint/LLIntData.cpp:
(JSC::LLInt::Data::performAssertions):
* llint/LowLevelInterpreter.asm:
* runtime/InternalFunction.h:
* runtime/JSBoundFunction.h:
* runtime/JSCallee.h:
* runtime/JSTypeInfo.h:
(JSC::TypeInfo::implementsHasInstance):
(JSC::TypeInfo::TypeInfo): Deleted.
(JSC::TypeInfo::overridesHasInstance): Deleted.
* runtime/NumberConstructor.h:

Source/WebCore:

* bindings/js/JSDOMBinding.h:
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/API/JSCallbackConstructor.h (194368 => 194369)


--- trunk/Source/_javascript_Core/API/JSCallbackConstructor.h	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/API/JSCallbackConstructor.h	2015-12-22 20:04:56 UTC (rev 194369)
@@ -34,7 +34,7 @@
 class JSCallbackConstructor : public JSDestructibleObject {
 public:
     typedef JSDestructibleObject Base;
-    static const unsigned StructureFlags = Base::StructureFlags | ImplementsHasInstance;
+    static const unsigned StructureFlags = Base::StructureFlags | ImplementsHasInstance | ImplementsDefaultHasInstance;
 
     static JSCallbackConstructor* create(ExecState* exec, JSGlobalObject* globalObject, Structure* structure, JSClassRef classRef, JSObjectCallAsConstructorCallback callback) 
     {

Modified: trunk/Source/_javascript_Core/API/JSCallbackObject.h (194368 => 194369)


--- trunk/Source/_javascript_Core/API/JSCallbackObject.h	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/API/JSCallbackObject.h	2015-12-22 20:04:56 UTC (rev 194369)
@@ -127,7 +127,7 @@
 
 public:
     typedef Parent Base;
-    static const unsigned StructureFlags = Base::StructureFlags | ProhibitsPropertyCaching | OverridesGetOwnPropertySlot | InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | ImplementsHasInstance | OverridesHasInstanceFlag | OverridesGetPropertyNames | TypeOfShouldCallGetCallData;
+    static const unsigned StructureFlags = Base::StructureFlags | ProhibitsPropertyCaching | OverridesGetOwnPropertySlot | InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | ImplementsHasInstance | OverridesGetPropertyNames | TypeOfShouldCallGetCallData;
 
     ~JSCallbackObject();
 

Modified: trunk/Source/_javascript_Core/ChangeLog (194368 => 194369)


--- trunk/Source/_javascript_Core/ChangeLog	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-12-22 20:04:56 UTC (rev 194369)
@@ -1,3 +1,34 @@
+2015-12-22  Keith Miller  <[email protected]>
+
+        Remove OverridesHasInstance from TypeInfoFlags
+        https://bugs.webkit.org/show_bug.cgi?id=152005
+
+        Reviewed by Saam Barati.
+
+        Currently, we have three TypeInfo flags associated with instanceof behavior,
+        ImplementsHasInstance, ImplementDefaultHasInstance, and OverridesHasInstance. This patch
+        removes the third and moves the first to the out of line flags. In theory, we should only
+        need one flag but removing ImplementsHasInstance is more involved and should be done in a
+        separate patch.
+
+        * API/JSCallbackConstructor.h:
+        * API/JSCallbackObject.h:
+        * jit/JITOpcodes.cpp:
+        (JSC::JIT::emit_op_overrides_has_instance):
+        * jit/JITOpcodes32_64.cpp:
+        (JSC::JIT::emit_op_overrides_has_instance):
+        * llint/LLIntData.cpp:
+        (JSC::LLInt::Data::performAssertions):
+        * llint/LowLevelInterpreter.asm:
+        * runtime/InternalFunction.h:
+        * runtime/JSBoundFunction.h:
+        * runtime/JSCallee.h:
+        * runtime/JSTypeInfo.h:
+        (JSC::TypeInfo::implementsHasInstance):
+        (JSC::TypeInfo::TypeInfo): Deleted.
+        (JSC::TypeInfo::overridesHasInstance): Deleted.
+        * runtime/NumberConstructor.h:
+
 2015-12-22  Filip Pizlo  <[email protected]>
 
         FTL B3 should do tail calls

Modified: trunk/Source/_javascript_Core/jit/JITOpcodes.cpp (194368 => 194369)


--- trunk/Source/_javascript_Core/jit/JITOpcodes.cpp	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/jit/JITOpcodes.cpp	2015-12-22 20:04:56 UTC (rev 194369)
@@ -118,7 +118,7 @@
 
     emitGetVirtualRegister(constructor, regT0);
 
-    // Check that constructor 'ImplementsHasInstance' i.e. the object is a C-API user or a bound function.
+    // Check that constructor 'ImplementsDefaultHasInstance' i.e. the object is not a C-API user nor a bound function.
     test8(Zero, Address(regT0, JSCell::typeInfoFlagsOffset()), TrustedImm32(ImplementsDefaultHasInstance), regT0);
     emitTagBool(regT0);
     Jump done = jump();

Modified: trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp (194368 => 194369)


--- trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp	2015-12-22 20:04:56 UTC (rev 194369)
@@ -197,7 +197,7 @@
     // We know that constructor is an object from the way bytecode is emitted for instanceof expressions.
     emitLoadPayload(constructor, regT0);
 
-    // Check that constructor 'ImplementsHasInstance' i.e. the object is a C-API user or a bound function.
+    // Check that constructor 'ImplementsDefaultHasInstance' i.e. the object is not a C-API user nor a bound function.
     test8(Zero, Address(regT0, JSCell::typeInfoFlagsOffset()), TrustedImm32(ImplementsDefaultHasInstance), regT0);
     Jump done = jump();
 

Modified: trunk/Source/_javascript_Core/llint/LLIntData.cpp (194368 => 194369)


--- trunk/Source/_javascript_Core/llint/LLIntData.cpp	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/llint/LLIntData.cpp	2015-12-22 20:04:56 UTC (rev 194369)
@@ -36,6 +36,8 @@
 #include "PropertyOffset.h"
 #include "WriteBarrier.h"
 
+#define STATIC_ASSERT(cond) static_assert(cond, "LLInt assumes " #cond)
+
 namespace JSC { namespace LLInt {
 
 Instruction* Data::s_exceptionInstructions = 0;
@@ -72,7 +74,6 @@
     // Assertions to match LowLevelInterpreter.asm.  If you change any of this code, be
     // prepared to change LowLevelInterpreter.asm as well!!
 
-#ifndef NDEBUG
 #if USE(JSVALUE64)
     const ptrdiff_t PtrSize = 8;
     const ptrdiff_t CallFrameHeaderSlots = 5;
@@ -81,20 +82,19 @@
     const ptrdiff_t CallFrameHeaderSlots = 4;
 #endif
     const ptrdiff_t SlotSize = 8;
-#endif
 
-    ASSERT(sizeof(void*) == PtrSize);
-    ASSERT(sizeof(Register) == SlotSize);
-    ASSERT(JSStack::CallFrameHeaderSize == CallFrameHeaderSlots);
+    STATIC_ASSERT(sizeof(void*) == PtrSize);
+    STATIC_ASSERT(sizeof(Register) == SlotSize);
+    STATIC_ASSERT(JSStack::CallFrameHeaderSize == CallFrameHeaderSlots);
 
     ASSERT(!CallFrame::callerFrameOffset());
-    ASSERT(JSStack::CallerFrameAndPCSize == (PtrSize * 2) / SlotSize);
+    STATIC_ASSERT(JSStack::CallerFrameAndPCSize == (PtrSize * 2) / SlotSize);
     ASSERT(CallFrame::returnPCOffset() == CallFrame::callerFrameOffset() + PtrSize);
     ASSERT(JSStack::CodeBlock * sizeof(Register) == CallFrame::returnPCOffset() + PtrSize);
-    ASSERT(JSStack::Callee * sizeof(Register) == JSStack::CodeBlock * sizeof(Register) + SlotSize);
-    ASSERT(JSStack::ArgumentCount * sizeof(Register) == JSStack::Callee * sizeof(Register) + SlotSize);
-    ASSERT(JSStack::ThisArgument * sizeof(Register) == JSStack::ArgumentCount * sizeof(Register) + SlotSize);
-    ASSERT(JSStack::CallFrameHeaderSize == JSStack::ThisArgument);
+    STATIC_ASSERT(JSStack::Callee * sizeof(Register) == JSStack::CodeBlock * sizeof(Register) + SlotSize);
+    STATIC_ASSERT(JSStack::ArgumentCount * sizeof(Register) == JSStack::Callee * sizeof(Register) + SlotSize);
+    STATIC_ASSERT(JSStack::ThisArgument * sizeof(Register) == JSStack::ArgumentCount * sizeof(Register) + SlotSize);
+    STATIC_ASSERT(JSStack::CallFrameHeaderSize == JSStack::ThisArgument);
 
     ASSERT(CallFrame::argumentOffsetIncludingThis(0) == JSStack::ThisArgument);
 
@@ -106,32 +106,32 @@
     ASSERT(OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload) == 0);
 #endif
 #if USE(JSVALUE32_64)
-    ASSERT(JSValue::Int32Tag == static_cast<unsigned>(-1));
-    ASSERT(JSValue::BooleanTag == static_cast<unsigned>(-2));
-    ASSERT(JSValue::NullTag == static_cast<unsigned>(-3));
-    ASSERT(JSValue::UndefinedTag == static_cast<unsigned>(-4));
-    ASSERT(JSValue::CellTag == static_cast<unsigned>(-5));
-    ASSERT(JSValue::EmptyValueTag == static_cast<unsigned>(-6));
-    ASSERT(JSValue::DeletedValueTag == static_cast<unsigned>(-7));
-    ASSERT(JSValue::LowestTag == static_cast<unsigned>(-7));
+    STATIC_ASSERT(JSValue::Int32Tag == static_cast<unsigned>(-1));
+    STATIC_ASSERT(JSValue::BooleanTag == static_cast<unsigned>(-2));
+    STATIC_ASSERT(JSValue::NullTag == static_cast<unsigned>(-3));
+    STATIC_ASSERT(JSValue::UndefinedTag == static_cast<unsigned>(-4));
+    STATIC_ASSERT(JSValue::CellTag == static_cast<unsigned>(-5));
+    STATIC_ASSERT(JSValue::EmptyValueTag == static_cast<unsigned>(-6));
+    STATIC_ASSERT(JSValue::DeletedValueTag == static_cast<unsigned>(-7));
+    STATIC_ASSERT(JSValue::LowestTag == static_cast<unsigned>(-7));
 #else
-    ASSERT(TagBitTypeOther == 0x2);
-    ASSERT(TagBitBool == 0x4);
-    ASSERT(TagBitUndefined == 0x8);
-    ASSERT(ValueEmpty == 0x0);
-    ASSERT(ValueFalse == (TagBitTypeOther | TagBitBool));
-    ASSERT(ValueTrue == (TagBitTypeOther | TagBitBool | 1));
-    ASSERT(ValueUndefined == (TagBitTypeOther | TagBitUndefined));
-    ASSERT(ValueNull == TagBitTypeOther);
+    STATIC_ASSERT(TagBitTypeOther == 0x2);
+    STATIC_ASSERT(TagBitBool == 0x4);
+    STATIC_ASSERT(TagBitUndefined == 0x8);
+    STATIC_ASSERT(ValueEmpty == 0x0);
+    STATIC_ASSERT(ValueFalse == (TagBitTypeOther | TagBitBool));
+    STATIC_ASSERT(ValueTrue == (TagBitTypeOther | TagBitBool | 1));
+    STATIC_ASSERT(ValueUndefined == (TagBitTypeOther | TagBitUndefined));
+    STATIC_ASSERT(ValueNull == TagBitTypeOther);
 #endif
 #if (CPU(X86_64) && !OS(WINDOWS)) || CPU(ARM64) || !ENABLE(JIT)
-    ASSERT(!maxFrameExtentForSlowPathCall);
+    STATIC_ASSERT(!maxFrameExtentForSlowPathCall);
 #elif CPU(ARM) || CPU(SH4)
-    ASSERT(maxFrameExtentForSlowPathCall == 24);
+    STATIC_ASSERT(maxFrameExtentForSlowPathCall == 24);
 #elif CPU(X86) || CPU(MIPS)
-    ASSERT(maxFrameExtentForSlowPathCall == 40);
+    STATIC_ASSERT(maxFrameExtentForSlowPathCall == 40);
 #elif CPU(X86_64) && OS(WINDOWS)
-    ASSERT(maxFrameExtentForSlowPathCall == 64);
+    STATIC_ASSERT(maxFrameExtentForSlowPathCall == 64);
 #endif
 
 #if !ENABLE(JIT) || USE(JSVALUE32_64)
@@ -142,18 +142,17 @@
     ASSERT(CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters() == 3);
 #endif
     
-    ASSERT(StringType == 6);
-    ASSERT(SymbolType == 7);
-    ASSERT(ObjectType == 21);
-    ASSERT(FinalObjectType == 22);
-    ASSERT(MasqueradesAsUndefined == 1);
-    ASSERT(ImplementsHasInstance == 2);
-    ASSERT(ImplementsDefaultHasInstance == 8);
-    ASSERT(FirstConstantRegisterIndex == 0x40000000);
-    ASSERT(GlobalCode == 0);
-    ASSERT(EvalCode == 1);
-    ASSERT(FunctionCode == 2);
-    ASSERT(ModuleCode == 3);
+    STATIC_ASSERT(StringType == 6);
+    STATIC_ASSERT(SymbolType == 7);
+    STATIC_ASSERT(ObjectType == 21);
+    STATIC_ASSERT(FinalObjectType == 22);
+    STATIC_ASSERT(MasqueradesAsUndefined == 1);
+    STATIC_ASSERT(ImplementsDefaultHasInstance == 2);
+    STATIC_ASSERT(FirstConstantRegisterIndex == 0x40000000);
+    STATIC_ASSERT(GlobalCode == 0);
+    STATIC_ASSERT(EvalCode == 1);
+    STATIC_ASSERT(FunctionCode == 2);
+    STATIC_ASSERT(ModuleCode == 3);
 
     ASSERT(!(reinterpret_cast<ptrdiff_t>((reinterpret_cast<WriteBarrier<JSCell>*>(0x4000)->slot())) - 0x4000));
     static_assert(PutByIdPrimaryTypeMask == 0x6, "LLInt assumes PutByIdPrimaryTypeMask is == 0x6");
@@ -185,11 +184,11 @@
 
     static_assert(InitializationMode::Initialization == 0, "LLInt assumes that InitializationMode::Initialization is 0");
     
-    ASSERT(GetPutInfo::typeBits == 0x3ff);
-    ASSERT(GetPutInfo::initializationShift == 10);
-    ASSERT(GetPutInfo::initializationBits == 0xffc00);
+    STATIC_ASSERT(GetPutInfo::typeBits == 0x3ff);
+    STATIC_ASSERT(GetPutInfo::initializationShift == 10);
+    STATIC_ASSERT(GetPutInfo::initializationBits == 0xffc00);
 
-    ASSERT(MarkedBlock::blockMask == ~static_cast<decltype(MarkedBlock::blockMask)>(0x3fff));
+    STATIC_ASSERT(MarkedBlock::blockMask == ~static_cast<decltype(MarkedBlock::blockMask)>(0x3fff));
 
     // FIXME: make these assertions less horrible.
 #if !ASSERT_DISABLED

Modified: trunk/Source/_javascript_Core/llint/LowLevelInterpreter.asm (194368 => 194369)


--- trunk/Source/_javascript_Core/llint/LowLevelInterpreter.asm	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/llint/LowLevelInterpreter.asm	2015-12-22 20:04:56 UTC (rev 194369)
@@ -333,8 +333,7 @@
 
 # Type flags constants.
 const MasqueradesAsUndefined = 1
-const ImplementsHasInstance = 2
-const ImplementsDefaultHasInstance = 8
+const ImplementsDefaultHasInstance = 2
 
 # Bytecode operand constants.
 const FirstConstantRegisterIndex = 0x40000000

Modified: trunk/Source/_javascript_Core/runtime/InternalFunction.h (194368 => 194369)


--- trunk/Source/_javascript_Core/runtime/InternalFunction.h	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/runtime/InternalFunction.h	2015-12-22 20:04:56 UTC (rev 194369)
@@ -34,7 +34,7 @@
 class InternalFunction : public JSDestructibleObject {
 public:
     typedef JSDestructibleObject Base;
-    static const unsigned StructureFlags = Base::StructureFlags | ImplementsHasInstance | TypeOfShouldCallGetCallData;
+    static const unsigned StructureFlags = Base::StructureFlags | ImplementsHasInstance | ImplementsDefaultHasInstance | TypeOfShouldCallGetCallData;
 
     DECLARE_EXPORT_INFO;
 

Modified: trunk/Source/_javascript_Core/runtime/JSBoundFunction.h (194368 => 194369)


--- trunk/Source/_javascript_Core/runtime/JSBoundFunction.h	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/runtime/JSBoundFunction.h	2015-12-22 20:04:56 UTC (rev 194369)
@@ -38,7 +38,7 @@
 class JSBoundFunction : public JSFunction {
 public:
     typedef JSFunction Base;
-    const static unsigned StructureFlags = OverridesHasInstanceFlag | Base::StructureFlags;
+    const static unsigned StructureFlags = ~ImplementsDefaultHasInstance & Base::StructureFlags;
 
     static JSBoundFunction* create(VM&, JSGlobalObject*, JSObject* targetFunction, JSValue boundThis, JSValue boundArgs, int, const String&);
     

Modified: trunk/Source/_javascript_Core/runtime/JSCallee.h (194368 => 194369)


--- trunk/Source/_javascript_Core/runtime/JSCallee.h	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/runtime/JSCallee.h	2015-12-22 20:04:56 UTC (rev 194369)
@@ -46,7 +46,7 @@
 
 public:
     typedef JSNonFinalObject Base;
-    const static unsigned StructureFlags = Base::StructureFlags | ImplementsHasInstance;
+    const static unsigned StructureFlags = Base::StructureFlags | ImplementsHasInstance | ImplementsDefaultHasInstance;
 
     static JSCallee* create(VM& vm, JSGlobalObject* globalObject, JSScope* scope)
     {

Modified: trunk/Source/_javascript_Core/runtime/JSTypeInfo.h (194368 => 194369)


--- trunk/Source/_javascript_Core/runtime/JSTypeInfo.h	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/runtime/JSTypeInfo.h	2015-12-22 20:04:56 UTC (rev 194369)
@@ -37,20 +37,20 @@
 class LLIntOffsetsExtractor;
 
 static const unsigned MasqueradesAsUndefined = 1; // WebCore uses MasqueradesAsUndefined to make document.all undetectable.
-static const unsigned ImplementsHasInstance = 1 << 1;
-static const unsigned OverridesHasInstanceFlag = 1 << 2; // FIXME: This is only trivially used by the runtime and should be removed: https://bugs.webkit.org/show_bug.cgi?id=152005
-static const unsigned ImplementsDefaultHasInstance = 1 << 3;
-static const unsigned TypeOfShouldCallGetCallData = 1 << 4; // Need this flag if you override getCallData() and you want typeof to use this to determine if it should say "function". Currently we always set this flag when we override getCallData().
-static const unsigned OverridesGetOwnPropertySlot = 1 << 5;
-static const unsigned InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero = 1 << 6;
-static const unsigned StructureIsImmortal = 1 << 7;
+static const unsigned ImplementsDefaultHasInstance = 1 << 1;
+static const unsigned TypeOfShouldCallGetCallData = 1 << 2; // Need this flag if you override getCallData() and you want typeof to use this to determine if it should say "function". Currently we always set this flag when we override getCallData().
+static const unsigned OverridesGetOwnPropertySlot = 1 << 3;
+static const unsigned InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero = 1 << 4;
+static const unsigned StructureIsImmortal = 1 << 5;
+// There are two free bits at the end of the InlineTypeFlags.
 
-static const unsigned OverridesGetPropertyNames = 1 << 8;
-static const unsigned ProhibitsPropertyCaching = 1 << 9;
-static const unsigned GetOwnPropertySlotIsImpure = 1 << 10;
-static const unsigned NewImpurePropertyFiresWatchpoints = 1 << 11;
-static const unsigned IsEnvironmentRecord = 1 << 12;
-static const unsigned GetOwnPropertySlotIsImpureForPropertyAbsence = 1 << 13;
+static const unsigned ImplementsHasInstance = 1 << 8;
+static const unsigned OverridesGetPropertyNames = 1 << 9;
+static const unsigned ProhibitsPropertyCaching = 1 << 10;
+static const unsigned GetOwnPropertySlotIsImpure = 1 << 11;
+static const unsigned NewImpurePropertyFiresWatchpoints = 1 << 12;
+static const unsigned IsEnvironmentRecord = 1 << 13;
+static const unsigned GetOwnPropertySlotIsImpureForPropertyAbsence = 1 << 14;
 
 class TypeInfo {
 public:
@@ -67,11 +67,6 @@
         , m_flags(inlineTypeFlags)
         , m_flags2(outOfLineTypeFlags)
     {
-        // No object that doesn't ImplementsHasInstance should override it!
-        ASSERT((m_flags & (ImplementsHasInstance | OverridesHasInstanceFlag)) != OverridesHasInstanceFlag);
-        // ImplementsDefaultHasInstance means (ImplementsHasInstance & !OverridesHasInstance)
-        if ((m_flags & (ImplementsHasInstance | OverridesHasInstanceFlag)) == ImplementsHasInstance)
-            m_flags |= ImplementsDefaultHasInstance;
     }
 
     JSType type() const { return static_cast<JSType>(m_type); }
@@ -82,8 +77,7 @@
 
     unsigned flags() const { return (static_cast<unsigned>(m_flags2) << 8) | static_cast<unsigned>(m_flags); }
     bool masqueradesAsUndefined() const { return isSetOnFlags1(MasqueradesAsUndefined); }
-    bool implementsHasInstance() const { return isSetOnFlags1(ImplementsHasInstance); }
-    bool overridesHasInstance() const { return isSetOnFlags1(OverridesHasInstanceFlag); }
+    bool implementsHasInstance() const { return isSetOnFlags2(ImplementsHasInstance); }
     bool implementsDefaultHasInstance() const { return isSetOnFlags1(ImplementsDefaultHasInstance); }
     bool typeOfShouldCallGetCallData() const { return isSetOnFlags1(TypeOfShouldCallGetCallData); }
     bool overridesGetOwnPropertySlot() const { return overridesGetOwnPropertySlot(inlineTypeFlags()); }

Modified: trunk/Source/_javascript_Core/runtime/NumberConstructor.h (194368 => 194369)


--- trunk/Source/_javascript_Core/runtime/NumberConstructor.h	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/_javascript_Core/runtime/NumberConstructor.h	2015-12-22 20:04:56 UTC (rev 194369)
@@ -30,7 +30,7 @@
 class NumberConstructor : public InternalFunction {
 public:
     typedef InternalFunction Base;
-    static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot | ImplementsHasInstance;
+    static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot | ImplementsHasInstance | ImplementsDefaultHasInstance;
 
     static NumberConstructor* create(VM& vm, Structure* structure, NumberPrototype* numberPrototype)
     {

Modified: trunk/Source/WebCore/ChangeLog (194368 => 194369)


--- trunk/Source/WebCore/ChangeLog	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/WebCore/ChangeLog	2015-12-22 20:04:56 UTC (rev 194369)
@@ -1,3 +1,20 @@
+2015-12-22  Keith Miller  <[email protected]>
+
+        Remove OverridesHasInstance from TypeInfoFlags
+        https://bugs.webkit.org/show_bug.cgi?id=152005
+
+        Reviewed by Saam Barati.
+
+        Currently, we have three TypeInfo flags associated with instanceof behavior,
+        ImplementsHasInstance, ImplementDefaultHasInstance, and OverridesHasInstance. This patch
+        removes the third and moves the first to the out of line flags. In theory, we should only
+        need one flag but removing ImplementsHasInstance is more involved and should be done in a
+        separate patch.
+
+        * bindings/js/JSDOMBinding.h:
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHeader):
+
 2015-12-22  Brent Fulgham  <[email protected]>
 
         Allow _javascript_ to iterate over plugins for local SecurityOrigins

Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (194368 => 194369)


--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h	2015-12-22 20:04:56 UTC (rev 194369)
@@ -100,7 +100,7 @@
 class DOMConstructorObject : public JSDOMObject {
 public:
     typedef JSDOMObject Base;
-    static const unsigned StructureFlags = Base::StructureFlags | JSC::ImplementsHasInstance;
+    static const unsigned StructureFlags = Base::StructureFlags | JSC::ImplementsHasInstance | JSC::ImplementsDefaultHasInstance;
 
     static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
     {

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (194368 => 194369)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2015-12-22 20:03:13 UTC (rev 194368)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2015-12-22 20:04:56 UTC (rev 194369)
@@ -1045,7 +1045,7 @@
     }
     # Structure ID
     if ($interfaceName eq "DOMWindow") {
-        $structureFlags{"JSC::ImplementsHasInstance"} = 1;
+        $structureFlags{"JSC::ImplementsHasInstance | JSC::ImplementsDefaultHasInstance"} = 1;
     }
     push(@headerContent, "    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)\n");
     push(@headerContent, "    {\n");
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to