2007-10-28 Mark Rowe <mrowe@apple.com>
authormrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 29 Oct 2007 01:56:05 +0000 (01:56 +0000)
committermrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 29 Oct 2007 01:56:05 +0000 (01:56 +0000)
        Reviewed by Maciej.

        Fix "AllInOneFile.o has a global initializer in it".

        Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max().
        We can avoid this by moving it inside an inline function.

        * kjs/SymbolTable.h:
        (KJS::missingSymbolMarker):
        * kjs/function.cpp:
        (KJS::ActivationImp::getOwnPropertySlot):
        (KJS::ActivationImp::put):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27198 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/SymbolTable.h
JavaScriptCore/kjs/function.cpp

index d47bba4cde7f5eb5fd2541890cacda9f3bdfeaa2..c0211518449e337e31e4995079f9a84a7a0cacd5 100644 (file)
@@ -1,3 +1,18 @@
+2007-10-28  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej.
+
+        Fix "AllInOneFile.o has a global initializer in it".
+
+        Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max().
+        We can avoid this by moving it inside an inline function.
+
+        * kjs/SymbolTable.h:
+        (KJS::missingSymbolMarker):
+        * kjs/function.cpp:
+        (KJS::ActivationImp::getOwnPropertySlot):
+        (KJS::ActivationImp::put):
+
 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Mark.
index a0b6015f2b60597e8e0c976158eea2f59e078fe0..db208775fafbeae14d1a46b61c0c09153be78b34 100644 (file)
@@ -30,6 +30,7 @@
 #define SymbolTable_h
 
 #include "property_map.h"
+#include "AlwaysInline.h"
 
 namespace KJS {
 
@@ -41,12 +42,12 @@ namespace KJS {
         static const bool safeToCompareToEmptyOrDeleted = true;
     };
 
-    static const size_t missingSymbolMarker = std::numeric_limits<size_t>::max();
+    static ALWAYS_INLINE size_t missingSymbolMarker() { return std::numeric_limits<size_t>::max(); }
 
     struct SymbolTableIndexHashTraits {
         typedef size_t TraitType;
         typedef SymbolTableIndexHashTraits StorageTraits;
-        static size_t emptyValue() { return missingSymbolMarker; }
+        static size_t emptyValue() { return missingSymbolMarker(); }
         static const bool emptyValueIsZero = false;
         static const bool needsDestruction = false;
         static const bool needsRef = false;
index 648ba3ae35060b1722c4e7ecd0493ce75bc4c87c..8d46a5d7ee1126c3a871cad1a6c65044939c8bfe 100644 (file)
@@ -423,7 +423,7 @@ bool ActivationImp::getOwnPropertySlot(ExecState* exec, const Identifier& proper
     // it's more efficient to just get and check for a special empty
     // value than to do a separate contains check
     size_t index = symbolTable->get(propertyName.ustring().rep());
-    if (index != missingSymbolMarker) {
+    if (index != missingSymbolMarker()) {
         slot.setValueSlot(this, &d->localStorage[index].value);
         return true;
     }
@@ -462,7 +462,7 @@ void ActivationImp::put(ExecState*, const Identifier& propertyName, JSValue* val
   // it's more efficient to just get and check for a special empty
   // value than to do a separate contains check
   size_t index = symbolTable->get(propertyName.ustring().rep());
-  if (index != missingSymbolMarker) {
+  if (index != missingSymbolMarker()) {
     LocalStorageEntry& entry = d->localStorage[index];
     entry.value = value;
     entry.attributes = attr;