Reviewed by Darin, Maciej.
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Feb 2006 19:52:25 +0000 (19:52 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Feb 2006 19:52:25 +0000 (19:52 +0000)
        - Inline some functions suggested by Shark. 2.9% speedup on super
        accurate JS iBench.

        http://bugzilla.opendarwin.org/show_bug.cgi?id=7411
        <rdar://problem/4448116>

        * kjs/nodes.h:
        (KJS::ArgumentsNode::evaluateList):
        * kjs/object.cpp:
        * kjs/object.h:
        (KJS::ScopeChain::release):
        (KJS::JSObject::toPrimitive):
        * kjs/scope_chain.cpp:
        * kjs/ustring.cpp:
        * kjs/ustring.h:
        (KJS::UString::toArrayIndex):
        * kjs/value.cpp:
        * kjs/value.h:
        (KJS::JSValue::toObject):
        * kxmlcore/FastMalloc.cpp:
        (KXMLCore::TCMalloc_ThreadCache_FreeList::Push):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::Pop):

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/nodes.cpp
JavaScriptCore/kjs/nodes.h
JavaScriptCore/kjs/object.cpp
JavaScriptCore/kjs/object.h
JavaScriptCore/kjs/scope_chain.cpp
JavaScriptCore/kjs/ustring.cpp
JavaScriptCore/kjs/ustring.h
JavaScriptCore/kjs/value.cpp
JavaScriptCore/kjs/value.h
JavaScriptCore/kxmlcore/FastMalloc.cpp

index 3faaaafaad33117dc7e57e4e23aed05ae87b0537..8b881bac42b38459209944f662735f239ad4a645 100644 (file)
@@ -1,3 +1,30 @@
+2006-02-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin, Maciej.
+
+        - Inline some functions suggested by Shark. 2.9% speedup on super
+        accurate JS iBench.
+
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=7411
+        <rdar://problem/4448116>
+
+        * kjs/nodes.h:
+        (KJS::ArgumentsNode::evaluateList):
+        * kjs/object.cpp:
+        * kjs/object.h:
+        (KJS::ScopeChain::release):
+        (KJS::JSObject::toPrimitive):
+        * kjs/scope_chain.cpp:
+        * kjs/ustring.cpp:
+        * kjs/ustring.h:
+        (KJS::UString::toArrayIndex):
+        * kjs/value.cpp:
+        * kjs/value.h:
+        (KJS::JSValue::toObject):
+        * kxmlcore/FastMalloc.cpp:
+        (KXMLCore::TCMalloc_ThreadCache_FreeList::Push):
+        (KXMLCore::TCMalloc_ThreadCache_FreeList::Pop):
+
 2006-02-21  Eric Seidel  <eseidel@apple.com>
 
         Added *.user to ignore list.
index a5c894cb828643da059aab41472baccaa1728111..b41b8abafef0e2ed4b8596759649bb98af5d0d52 100644 (file)
@@ -498,15 +498,6 @@ JSValue *ArgumentsNode::evaluate(ExecState *)
   return 0; // dummy, see evaluateList()
 }
 
-// ECMA 11.2.4
-List ArgumentsNode::evaluateList(ExecState *exec)
-{
-  if (!list)
-    return List();
-
-  return list->evaluateList(exec);
-}
-
 // ------------------------------ NewExprNode ----------------------------------
 
 // ECMA 11.2.2
index 1a8cffa78f71c9d9843532e9d619f825bfed82bb..264bba14c3f45ee70063d3dad45d2cfea899f3d1 100644 (file)
@@ -358,7 +358,7 @@ namespace KJS {
     ArgumentsNode(ArgumentListNode *l)
       : list(l->next) { Parser::removeNodeCycle(list.get()); l->next = 0; }
     JSValue *evaluate(ExecState *exec);
-    List evaluateList(ExecState *exec);
+    List evaluateList(ExecState *exec) { return list ? list->evaluateList(exec) : List(); }
     virtual void streamTo(SourceStream &s) const;
   private:
     RefPtr<ArgumentListNode> list;
index a4ddbfcbd208edee3bc692ba936e6c9142d7815b..fd1f33a275c6461b9f799b2ae6921aca8e7dd0fa 100644 (file)
@@ -500,11 +500,6 @@ ReferenceList JSObject::propList(ExecState *exec, bool recursive)
   return list;
 }
 
-JSValue *JSObject::toPrimitive(ExecState *exec, JSType preferredType) const
-{
-  return defaultValue(exec,preferredType);
-}
-
 bool JSObject::toBoolean(ExecState */*exec*/) const
 {
   return true;
index aa3a84b5f04a65b2588514e97ca6cf3479f851ba..6b1d3e8fe61d70308885ac1cf5396aa40c7629e6 100644 (file)
@@ -681,6 +681,24 @@ inline void ScopeChain::mark()
     }
 }
 
+inline void ScopeChain::release()
+{
+    // This function is only called by deref(),
+    // Deref ensures these conditions are true.
+    assert(_node && _node->refCount == 0);
+    ScopeChainNode *n = _node;
+    do {
+        ScopeChainNode *next = n->next;
+        delete n;
+        n = next;
+    } while (n && --n->refCount == 0);
+}
+
+inline JSValue* JSObject::toPrimitive(ExecState* exec, JSType preferredType) const
+{
+    return defaultValue(exec, preferredType);
+}
+
 } // namespace
 
 #endif // KJS_OBJECT_H
index 40413750d7ab360c079c58481bec724adf6af22b..229fc22d8f23801f26b9bd101961962891a8362c 100644 (file)
@@ -34,17 +34,4 @@ void ScopeChain::push(const ScopeChain &c)
     }
 }
 
-void ScopeChain::release()
-{
-    // This function is only called by deref(),
-    // Deref ensures these conditions are true.
-    assert(_node && _node->refCount == 0);
-    ScopeChainNode *n = _node;
-    do {
-        ScopeChainNode *next = n->next;
-        delete n;
-        n = next;
-    } while (n && --n->refCount == 0);
-}
-
 } // namespace KJS
index 650e994d17b4b50eb6a165bcc3ed4f417438bcb7..92250d391907c135e853796008385edee9d4c242 100644 (file)
@@ -837,12 +837,6 @@ UString &UString::operator=(const char *c)
   return *this;
 }
 
-UString &UString::operator=(const UString &str)
-{
-  m_rep = str.m_rep;
-  return *this;
-}
-
 bool UString::is8Bit() const
 {
   const UChar *u = data();
@@ -1024,16 +1018,6 @@ uint32_t UString::toStrictUInt32(bool *ok) const
   }
 }
 
-// Rule from ECMA 15.2 about what an array index is.
-// Must exactly match string form of an unsigned integer, and be less than 2^32 - 1.
-unsigned UString::toArrayIndex(bool *ok) const
-{
-  unsigned i = toStrictUInt32(ok);
-  if (i >= 0xFFFFFFFFU && ok)
-    *ok = false;
-  return i;
-}
-
 int UString::find(const UString &f, int pos) const
 {
   int sz = size();
index 6907f2ef664f916a198cc41dcc6db8df4af6197f..e2e311d88fa6e23593e643fc7800ca5f48c79e6d 100644 (file)
@@ -370,7 +370,6 @@ namespace KJS {
      * Assignment operator.
      */
     UString &operator=(const char *c);
-    UString &operator=(const UString &);
     /**
      * Appends the specified string.
      */
@@ -522,6 +521,16 @@ inline UString::UString()
 {
 }
 
+// Rule from ECMA 15.2 about what an array index is.
+// Must exactly match string form of an unsigned integer, and be less than 2^32 - 1.
+inline unsigned UString::toArrayIndex(bool *ok) const
+{
+    unsigned i = toStrictUInt32(ok);
+    if (ok && i >= 0xFFFFFFFFU)
+        *ok = false;
+    return i;
+}
+
 } // namespace
 
 #endif
index 2ef9324d47f1f9854f942a4c71938e93d7f48042..11c2bc05e603efe19dc3bec20325fcdef3b6c11a 100644 (file)
@@ -115,11 +115,6 @@ uint16_t JSValue::toUInt16(ExecState *exec) const
     return static_cast<uint16_t>(d16);
 }
 
-JSObject *JSValue::toObject(ExecState *exec) const
-{
-    return JSImmediate::isImmediate(this) ? JSImmediate::toObject(this, exec) : downcast()->toObject(exec);
-}
-
 bool JSCell::getNumber(double &numericValue) const
 {
     if (!isNumber())
index 452dcaf6c24f013ba430b69156b5fcdaabfcf0b1..1293434cec0aae0018bc6761d0f037181085d0be 100644 (file)
@@ -386,6 +386,11 @@ inline UString JSValue::toString(ExecState *exec) const
     return JSImmediate::isImmediate(this) ? JSImmediate::toString(this) : downcast()->toString(exec);
 }
 
+inline JSObject* JSValue::toObject(ExecState* exec) const
+{
+    return JSImmediate::isImmediate(this) ? JSImmediate::toObject(this, exec) : downcast()->toObject(exec);
+}
+
 } // namespace
 
 #endif // KJS_VALUE_H
index 123ae6af968f8736b56e5de0774b8f5451ab3026..fd7125de09f256b6a7775c1fc871a8ff98400602 100644 (file)
@@ -975,13 +975,13 @@ class TCMalloc_ThreadCache_FreeList {
   int lowwatermark() const { return lowater_; }
   void clear_lowwatermark() { lowater_ = length_; }
 
-  void Push(void* ptr) {
+  ALWAYS_INLINE void Push(void* ptr) {
     *(reinterpret_cast<void**>(ptr)) = list_;
     list_ = ptr;
     length_++;
   }
 
-  void* Pop() {
+  ALWAYS_INLINE void* Pop() {
     ASSERT(list_ != NULL);
     void* result = list_;
     list_ = *(reinterpret_cast<void**>(result));