Title: [188824] trunk/Source
Revision
188824
Author
[email protected]
Date
2015-08-22 11:05:50 -0700 (Sat, 22 Aug 2015)

Log Message

[JSC] Static hash tables should be 100% compile-time constant.
<https://webkit.org/b/148359>

Reviewed by Michael Saboff.

Source/_javascript_Core:

We were dirtying the memory pages containing static hash tables the
first time they were used, when a dynamically allocated index-to-key
table was built and cached in the HashTable struct.

It turns out that this "optimization" was completely useless, since
we've long since decoupled static hash tables from the JSC::VM and
we can get the key for an index via HashTable::values[index].m_key!

We also get rid of VM::keywords which was a little wrapper around
a VM-specific copy of JSC::mainTable. There was nothing VM-specific
about it at all, so clients now use JSC::mainTable directly.

After this change all fooHashTable structs end up in __DATA __const
and no runtime initialization/allocation takes place.

* create_hash_table:
* jsc.cpp:
* parser/Lexer.cpp:
(JSC::isLexerKeyword):
(JSC::Lexer<LChar>::parseIdentifier):
(JSC::Lexer<UChar>::parseIdentifier):
(JSC::Lexer<CharacterType>::parseIdentifierSlowCase):
(JSC::Keywords::Keywords): Deleted.
* parser/Lexer.h:
(JSC::Keywords::isKeyword): Deleted.
(JSC::Keywords::getKeyword): Deleted.
(JSC::Keywords::~Keywords): Deleted.
* runtime/LiteralParser.cpp:
(JSC::LiteralParser<CharType>::tryJSONPParse):
* runtime/Lookup.cpp:
(JSC::HashTable::createTable): Deleted.
(JSC::HashTable::deleteTable): Deleted.
* runtime/Lookup.h:
(JSC::HashTable::entry):
(JSC::HashTable::ConstIterator::key):
(JSC::HashTable::ConstIterator::skipInvalidKeys):
(JSC::HashTable::copy): Deleted.
(JSC::HashTable::initializeIfNeeded): Deleted.
(JSC::HashTable::begin): Deleted.
(JSC::HashTable::end): Deleted.
* runtime/VM.cpp:
(JSC::VM::VM): Deleted.
* runtime/VM.h:
* testRegExp.cpp:

Source/WebCore:

Adjust WebCore bindings generator for new JSC::HashTable layout
and rebaseline the bindings tests for that change.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHashTable):
* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
* bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
* bindings/scripts/test/JS/JSTestEventTarget.cpp:
* bindings/scripts/test/JS/JSTestException.cpp:
* bindings/scripts/test/JS/JSTestInterface.cpp:
* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
* bindings/scripts/test/JS/JSTestTypedefs.cpp:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (188823 => 188824)


--- trunk/Source/_javascript_Core/ChangeLog	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-08-22 18:05:50 UTC (rev 188824)
@@ -1,3 +1,55 @@
+2015-08-22  Andreas Kling  <[email protected]>
+
+        [JSC] Static hash tables should be 100% compile-time constant.
+        <https://webkit.org/b/148359>
+
+        Reviewed by Michael Saboff.
+
+        We were dirtying the memory pages containing static hash tables the
+        first time they were used, when a dynamically allocated index-to-key
+        table was built and cached in the HashTable struct.
+
+        It turns out that this "optimization" was completely useless, since
+        we've long since decoupled static hash tables from the JSC::VM and
+        we can get the key for an index via HashTable::values[index].m_key!
+
+        We also get rid of VM::keywords which was a little wrapper around
+        a VM-specific copy of JSC::mainTable. There was nothing VM-specific
+        about it at all, so clients now use JSC::mainTable directly.
+
+        After this change all fooHashTable structs end up in __DATA __const
+        and no runtime initialization/allocation takes place.
+
+        * create_hash_table:
+        * jsc.cpp:
+        * parser/Lexer.cpp:
+        (JSC::isLexerKeyword):
+        (JSC::Lexer<LChar>::parseIdentifier):
+        (JSC::Lexer<UChar>::parseIdentifier):
+        (JSC::Lexer<CharacterType>::parseIdentifierSlowCase):
+        (JSC::Keywords::Keywords): Deleted.
+        * parser/Lexer.h:
+        (JSC::Keywords::isKeyword): Deleted.
+        (JSC::Keywords::getKeyword): Deleted.
+        (JSC::Keywords::~Keywords): Deleted.
+        * runtime/LiteralParser.cpp:
+        (JSC::LiteralParser<CharType>::tryJSONPParse):
+        * runtime/Lookup.cpp:
+        (JSC::HashTable::createTable): Deleted.
+        (JSC::HashTable::deleteTable): Deleted.
+        * runtime/Lookup.h:
+        (JSC::HashTable::entry):
+        (JSC::HashTable::ConstIterator::key):
+        (JSC::HashTable::ConstIterator::skipInvalidKeys):
+        (JSC::HashTable::copy): Deleted.
+        (JSC::HashTable::initializeIfNeeded): Deleted.
+        (JSC::HashTable::begin): Deleted.
+        (JSC::HashTable::end): Deleted.
+        * runtime/VM.cpp:
+        (JSC::VM::VM): Deleted.
+        * runtime/VM.h:
+        * testRegExp.cpp:
+
 2015-08-21  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r188792 and r188803.

Modified: trunk/Source/_javascript_Core/create_hash_table (188823 => 188824)


--- trunk/Source/_javascript_Core/create_hash_table	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/create_hash_table	2015-08-22 18:05:50 UTC (rev 188824)
@@ -330,7 +330,7 @@
         $i++;
     }
     print "};\n\n";
-    print "JS_EXPORT_PRIVATE extern const struct HashTable $name =\n";
-    print "    \{ $packedSize, $compactHashSizeMask, $hasSetter, $nameEntries, 0, $nameIndex \};\n";
+    print "static const struct HashTable $name =\n";
+    print "    \{ $packedSize, $compactHashSizeMask, $hasSetter, $nameEntries, $nameIndex \};\n";
     print "} // namespace\n";
 }

Modified: trunk/Source/_javascript_Core/jsc.cpp (188823 => 188824)


--- trunk/Source/_javascript_Core/jsc.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/jsc.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -103,10 +103,6 @@
 using namespace JSC;
 using namespace WTF;
 
-namespace JSC {
-WTF_IMPORT extern const struct HashTable globalObjectTable;
-}
-
 namespace {
 
 NO_RETURN_WITH_VALUE static void jscExit(int status)
@@ -720,7 +716,7 @@
     }
 };
 
-const ClassInfo GlobalObject::s_info = { "global", &JSGlobalObject::s_info, &globalObjectTable, CREATE_METHOD_TABLE(GlobalObject) };
+const ClassInfo GlobalObject::s_info = { "global", &JSGlobalObject::s_info, nullptr, CREATE_METHOD_TABLE(GlobalObject) };
 const GlobalObjectMethodTable GlobalObject::s_globalObjectMethodTable = { &allowsAccessFrom, &supportsProfiling, &supportsRichSourceInfo, &shouldInterruptScript, &_javascript_RuntimeFlags, 0, &shouldInterruptScriptBeforeTimeout, nullptr, &moduleLoaderFetch, nullptr, nullptr };
 
 

Modified: trunk/Source/_javascript_Core/parser/Lexer.cpp (188823 => 188824)


--- trunk/Source/_javascript_Core/parser/Lexer.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/parser/Lexer.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -44,10 +44,9 @@
 
 namespace JSC {
 
-Keywords::Keywords(VM& vm)
-    : m_vm(vm)
-    , m_keywordTable(JSC::mainTable)
+bool isLexerKeyword(const Identifier& identifier)
 {
+    return JSC::mainTable.entry(identifier);
 }
 
 enum CharacterType {
@@ -948,7 +947,7 @@
     if (UNLIKELY((remaining < maxTokenLength) && !(lexerFlags & LexerFlagsIgnoreReservedWords)) && !isPrivateName) {
         ASSERT(shouldCreateIdentifier);
         if (remaining < maxTokenLength) {
-            const HashTableValue* entry = m_vm->keywords->getKeyword(*ident);
+            const HashTableValue* entry = JSC::mainTable.entry(*ident);
             ASSERT((remaining < maxTokenLength) || !entry);
             if (!entry)
                 return IDENT;
@@ -1025,7 +1024,7 @@
     if (UNLIKELY((remaining < maxTokenLength) && !(lexerFlags & LexerFlagsIgnoreReservedWords)) && !isPrivateName) {
         ASSERT(shouldCreateIdentifier);
         if (remaining < maxTokenLength) {
-            const HashTableValue* entry = m_vm->keywords->getKeyword(*ident);
+            const HashTableValue* entry = JSC::mainTable.entry(*ident);
             ASSERT((remaining < maxTokenLength) || !entry);
             if (!entry)
                 return IDENT;
@@ -1089,7 +1088,7 @@
 
     if (LIKELY(!(lexerFlags & LexerFlagsIgnoreReservedWords))) {
         ASSERT(shouldCreateIdentifier);
-        const HashTableValue* entry = m_vm->keywords->getKeyword(*ident);
+        const HashTableValue* entry = JSC::mainTable.entry(*ident);
         if (!entry)
             return IDENT;
         JSTokenType token = static_cast<JSTokenType>(entry->lexerValue());

Modified: trunk/Source/_javascript_Core/parser/Lexer.h (188823 => 188824)


--- trunk/Source/_javascript_Core/parser/Lexer.h	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/parser/Lexer.h	2015-08-22 18:05:50 UTC (rev 188824)
@@ -33,33 +33,6 @@
 
 namespace JSC {
 
-class Keywords {
-    WTF_MAKE_FAST_ALLOCATED;
-public:
-    bool isKeyword(const Identifier& ident) const
-    {
-        return m_keywordTable.entry(ident);
-    }
-    
-    const HashTableValue* getKeyword(const Identifier& ident) const
-    {
-        return m_keywordTable.entry(ident);
-    }
-
-    explicit Keywords(VM&);
-
-    ~Keywords()
-    {
-        m_keywordTable.deleteTable();
-    }
-    
-private:
-    friend class VM;
-    
-    VM& m_vm;
-    const HashTable m_keywordTable;
-};
-
 enum LexerFlags {
     LexerFlagsIgnoreReservedWords = 1, 
     LexerFlagsDontBuildStrings = 2,
@@ -68,6 +41,8 @@
 
 struct ParsedUnicodeEscapeValue;
 
+bool isLexerKeyword(const Identifier&);
+
 template <typename T>
 class Lexer {
     WTF_MAKE_NONCOPYABLE(Lexer);

Modified: trunk/Source/_javascript_Core/runtime/LiteralParser.cpp (188823 => 188824)


--- trunk/Source/_javascript_Core/runtime/LiteralParser.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/runtime/LiteralParser.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -70,7 +70,7 @@
             entry.m_pathEntryName = Identifier::fromString(&m_exec->vm(), m_lexer.currentToken().start, m_lexer.currentToken().end - m_lexer.currentToken().start);
             path.append(entry);
         }
-        if (m_exec->vm().keywords->isKeyword(entry.m_pathEntryName))
+        if (isLexerKeyword(entry.m_pathEntryName))
             return false;
         TokenType tokenType = m_lexer.next();
         if (entry.m_type == JSONPPathEntryTypeDeclare && tokenType != TokAssign)

Modified: trunk/Source/_javascript_Core/runtime/Lookup.cpp (188823 => 188824)


--- trunk/Source/_javascript_Core/runtime/Lookup.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/runtime/Lookup.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -27,27 +27,6 @@
 
 namespace JSC {
 
-void HashTable::createTable() const
-{
-    ASSERT(!keys);
-    keys = static_cast<const char**>(fastMalloc(sizeof(char*) * numberOfValues));
-
-    for (int i = 0; i < numberOfValues; ++i) {
-        if (values[i].m_key)
-            keys[i] = values[i].m_key;
-        else
-            keys[i] = 0;
-    }
-}
-
-void HashTable::deleteTable() const
-{
-    if (keys) {
-        fastFree(keys);
-        keys = nullptr;
-    }
-}
-
 void reifyStaticAccessor(VM& vm, const HashTableValue& value, JSObject& thisObj, PropertyName propertyName)
 {
     JSGlobalObject* globalObject = thisObj.globalObject();

Modified: trunk/Source/_javascript_Core/runtime/Lookup.h (188823 => 188824)


--- trunk/Source/_javascript_Core/runtime/Lookup.h	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/runtime/Lookup.h	2015-08-22 18:05:50 UTC (rev 188824)
@@ -72,34 +72,16 @@
 };
 
 struct HashTable {
-    mutable int numberOfValues;
+    int numberOfValues;
     int indexMask;
     bool hasSetterOrReadonlyProperties;
 
     const HashTableValue* values; // Fixed values generated by script.
-    mutable const char** keys; // Table allocated at runtime.
     const CompactHashIndex* index;
 
-    ALWAYS_INLINE HashTable copy() const
-    {
-        // Don't copy dynamic table since it's thread specific.
-        HashTable result = { numberOfValues, indexMask, hasSetterOrReadonlyProperties, values, 0, index };
-        return result;
-    }
-
-    ALWAYS_INLINE void initializeIfNeeded() const
-    {
-        if (!keys)
-            createTable();
-    }
-
-    JS_EXPORT_PRIVATE void deleteTable() const;
-
     // Find an entry in the table, and return the entry.
     ALWAYS_INLINE const HashTableValue* entry(PropertyName propertyName) const
     {
-        initializeIfNeeded();
-
         if (propertyName.isSymbol())
             return nullptr;
 
@@ -107,15 +89,13 @@
         if (!uid)
             return nullptr;
 
-        ASSERT(keys);
-
         int indexEntry = IdentifierRepHash::hash(uid) & indexMask;
         int valueIndex = index[indexEntry].value;
         if (valueIndex == -1)
             return nullptr;
 
         while (true) {
-            if (WTF::equal(uid, keys[valueIndex]))
+            if (WTF::equal(uid, values[valueIndex].m_key))
                 return &values[valueIndex];
 
             indexEntry = index[indexEntry].next;
@@ -142,7 +122,7 @@
 
         const char* key()
         {
-            return m_table->keys[m_position];
+            return m_table->values[m_position].m_key;
         }
 
         const HashTableValue* operator->()
@@ -168,7 +148,7 @@
         void skipInvalidKeys()
         {
             ASSERT(m_position <= m_table->numberOfValues);
-            while (m_position < m_table->numberOfValues && !m_table->keys[m_position])
+            while (m_position < m_table->numberOfValues && !m_table->values[m_position].m_key)
                 ++m_position;
             ASSERT(m_position <= m_table->numberOfValues);
         }
@@ -179,18 +159,12 @@
 
     ConstIterator begin() const
     {
-        initializeIfNeeded();
         return ConstIterator(this, 0);
     }
     ConstIterator end() const
     {
-        initializeIfNeeded();
         return ConstIterator(this, numberOfValues);
     }
-
-private:
-    // Convert the hash table keys to identifiers.
-    JS_EXPORT_PRIVATE void createTable() const;
 };
 
 JS_EXPORT_PRIVATE bool setUpStaticFunctionSlot(ExecState*, const HashTableValue*, JSObject* thisObject, PropertyName, PropertySlot&);

Modified: trunk/Source/_javascript_Core/runtime/VM.cpp (188823 => 188824)


--- trunk/Source/_javascript_Core/runtime/VM.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/runtime/VM.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -154,7 +154,6 @@
     , emptyList(new MarkedArgumentBuffer)
     , stringCache(*this)
     , prototypeMap(*this)
-    , keywords(std::make_unique<Keywords>(*this))
     , interpreter(0)
     , jsArrayClassInfo(JSArray::info())
     , jsFinalObjectClassInfo(JSFinalObject::info())

Modified: trunk/Source/_javascript_Core/runtime/VM.h (188823 => 188824)


--- trunk/Source/_javascript_Core/runtime/VM.h	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/runtime/VM.h	2015-08-22 18:05:50 UTC (rev 188824)
@@ -86,7 +86,6 @@
 class Interpreter;
 class JSGlobalObject;
 class JSObject;
-class Keywords;
 class LLIntOffsetsExtractor;
 class LegacyProfiler;
 class NativeExecutable;
@@ -349,7 +348,6 @@
 
     typedef HashMap<RefPtr<SourceProvider>, RefPtr<SourceProviderCache>> SourceProviderCacheMap;
     SourceProviderCacheMap sourceProviderCacheMap;
-    std::unique_ptr<Keywords> keywords;
     Interpreter* interpreter;
 #if ENABLE(JIT)
     std::unique_ptr<JITThunks> jitStubs;

Modified: trunk/Source/_javascript_Core/testRegExp.cpp (188823 => 188824)


--- trunk/Source/_javascript_Core/testRegExp.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/_javascript_Core/testRegExp.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -45,10 +45,6 @@
 #include <windows.h>
 #endif
 
-namespace JSC {
-WTF_IMPORT extern const struct HashTable globalObjectTable;
-}
-
 const int MaxLineLength = 100 * 1024;
 
 using namespace JSC;
@@ -137,7 +133,7 @@
     }
 };
 
-const ClassInfo GlobalObject::s_info = { "global", &JSGlobalObject::s_info, &globalObjectTable, CREATE_METHOD_TABLE(GlobalObject) };
+const ClassInfo GlobalObject::s_info = { "global", &JSGlobalObject::s_info, nullptr, CREATE_METHOD_TABLE(GlobalObject) };
 
 GlobalObject::GlobalObject(VM& vm, Structure* structure, const Vector<String>& arguments)
     : JSGlobalObject(vm, structure)

Modified: trunk/Source/WebCore/ChangeLog (188823 => 188824)


--- trunk/Source/WebCore/ChangeLog	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/ChangeLog	2015-08-22 18:05:50 UTC (rev 188824)
@@ -1,3 +1,24 @@
+2015-08-22  Andreas Kling  <[email protected]>
+
+        [JSC] Static hash tables should be 100% compile-time constant.
+        <https://webkit.org/b/148359>
+
+        Reviewed by Michael Saboff.
+
+        Adjust WebCore bindings generator for new JSC::HashTable layout
+        and rebaseline the bindings tests for that change.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHashTable):
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
+        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
+        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
+        * bindings/scripts/test/JS/JSTestException.cpp:
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+
 2015-08-22  Michael Catanzaro  <[email protected]>
 
         Unreviewed, fix build without ENABLE_CSS_GRID_LAYOUT after r188582

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2015-08-22 18:05:50 UTC (rev 188824)
@@ -4228,7 +4228,7 @@
     my $packedSize = scalar @{$keys};
 
     my $compactSizeMask = $numEntries - 1;
-    push(@implContent, "static const HashTable $name = { $packedSize, $compactSizeMask, $hasSetter, $nameEntries, 0, $nameIndex };\n");
+    push(@implContent, "static const HashTable $name = { $packedSize, $compactSizeMask, $hasSetter, $nameEntries, $nameIndex };\n");
 }
 
 sub WriteData

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -104,7 +104,7 @@
     { "excitingAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestActiveDOMObjectExcitingAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
 };
 
-static const HashTable JSTestActiveDOMObjectTable = { 2, 3, true, JSTestActiveDOMObjectTableValues, 0, JSTestActiveDOMObjectTableIndex };
+static const HashTable JSTestActiveDOMObjectTable = { 2, 3, true, JSTestActiveDOMObjectTableValues, JSTestActiveDOMObjectTableIndex };
 const ClassInfo JSTestActiveDOMObjectConstructor::s_info = { "TestActiveDOMObjectConstructor", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestActiveDOMObjectConstructor) };
 
 JSTestActiveDOMObjectConstructor::JSTestActiveDOMObjectConstructor(Structure* structure, JSDOMGlobalObject* globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -99,7 +99,7 @@
     { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCustomNamedGetterConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
 };
 
-static const HashTable JSTestCustomNamedGetterTable = { 1, 1, true, JSTestCustomNamedGetterTableValues, 0, JSTestCustomNamedGetterTableIndex };
+static const HashTable JSTestCustomNamedGetterTable = { 1, 1, true, JSTestCustomNamedGetterTableValues, JSTestCustomNamedGetterTableIndex };
 const ClassInfo JSTestCustomNamedGetterConstructor::s_info = { "TestCustomNamedGetterConstructor", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestCustomNamedGetterConstructor) };
 
 JSTestCustomNamedGetterConstructor::JSTestCustomNamedGetterConstructor(Structure* structure, JSDOMGlobalObject* globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -108,7 +108,7 @@
     { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventTargetConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
 };
 
-static const HashTable JSTestEventTargetTable = { 1, 1, true, JSTestEventTargetTableValues, 0, JSTestEventTargetTableIndex };
+static const HashTable JSTestEventTargetTable = { 1, 1, true, JSTestEventTargetTableValues, JSTestEventTargetTableIndex };
 const ClassInfo JSTestEventTargetConstructor::s_info = { "TestEventTargetConstructor", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestEventTargetConstructor) };
 
 JSTestEventTargetConstructor::JSTestEventTargetConstructor(Structure* structure, JSDOMGlobalObject* globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -95,7 +95,7 @@
     { "name", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestExceptionName), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
 };
 
-static const HashTable JSTestExceptionTable = { 1, 1, true, JSTestExceptionTableValues, 0, JSTestExceptionTableIndex };
+static const HashTable JSTestExceptionTable = { 1, 1, true, JSTestExceptionTableValues, JSTestExceptionTableIndex };
 const ClassInfo JSTestExceptionConstructor::s_info = { "TestExceptionConstructor", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestExceptionConstructor) };
 
 JSTestExceptionConstructor::JSTestExceptionConstructor(Structure* structure, JSDOMGlobalObject* globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -194,7 +194,7 @@
 #endif
 };
 
-static const HashTable JSTestInterfaceTable = { 2, 3, true, JSTestInterfaceTableValues, 0, JSTestInterfaceTableIndex };
+static const HashTable JSTestInterfaceTable = { 2, 3, true, JSTestInterfaceTableValues, JSTestInterfaceTableIndex };
 /* Hash table for constructor */
 
 static const HashTableValue JSTestInterfaceConstructorTableValues[] =

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -394,7 +394,7 @@
     { "contentDocument", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjContentDocument), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
 };
 
-static const HashTable JSTestObjTable = { 6, 15, true, JSTestObjTableValues, 0, JSTestObjTableIndex };
+static const HashTable JSTestObjTable = { 6, 15, true, JSTestObjTableValues, JSTestObjTableIndex };
 /* Hash table for constructor */
 
 static const HashTableValue JSTestObjConstructorTableValues[] =

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -101,7 +101,7 @@
     { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestOverrideBuiltinsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
 };
 
-static const HashTable JSTestOverrideBuiltinsTable = { 1, 1, true, JSTestOverrideBuiltinsTableValues, 0, JSTestOverrideBuiltinsTableIndex };
+static const HashTable JSTestOverrideBuiltinsTable = { 1, 1, true, JSTestOverrideBuiltinsTableValues, JSTestOverrideBuiltinsTableIndex };
 const ClassInfo JSTestOverrideBuiltinsConstructor::s_info = { "TestOverrideBuiltinsConstructor", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestOverrideBuiltinsConstructor) };
 
 JSTestOverrideBuiltinsConstructor::JSTestOverrideBuiltinsConstructor(Structure* structure, JSDOMGlobalObject* globalObject)

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (188823 => 188824)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp	2015-08-22 17:42:46 UTC (rev 188823)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp	2015-08-22 18:05:50 UTC (rev 188824)
@@ -135,7 +135,7 @@
     { 0, 0, NoIntrinsic, 0, 0 }
 };
 
-static const HashTable JSTestTypedefsTable = { 0, 1, false, JSTestTypedefsTableValues, 0, JSTestTypedefsTableIndex };
+static const HashTable JSTestTypedefsTable = { 0, 1, false, JSTestTypedefsTableValues, JSTestTypedefsTableIndex };
 /* Hash table for constructor */
 
 static const HashTableValue JSTestTypedefsConstructorTableValues[] =
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to