Reviewed by Maciej.
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Jul 2006 10:01:06 +0000 (10:01 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Jul 2006 10:01:06 +0000 (10:01 +0000)
        - Removed context and exception parameters from JSObjectGetPropertyEnumerator,
        removing the spurious use of ExecState inside JavaScriptCore that made
        us think this was necessary in the first place.

        (StringInstance::getPropertyList): Use getString instead of toString because
        we know we're dealing with a string -- we put it there in the first place.
        While we're at it, store the string's size instead of retrieving it each time
        through the loop, to avoid the unnecessary killing of puppies.
        * kjs/string_object.h:

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

16 files changed:
JavaScriptCore/API/JSCallbackObject.cpp
JavaScriptCore/API/JSCallbackObject.h
JavaScriptCore/API/JSObjectRef.cpp
JavaScriptCore/API/JSObjectRef.h
JavaScriptCore/API/testapi.c
JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCore.exp
JavaScriptCore/kjs/array_instance.h
JavaScriptCore/kjs/array_object.cpp
JavaScriptCore/kjs/nodes.cpp
JavaScriptCore/kjs/object.cpp
JavaScriptCore/kjs/object.h
JavaScriptCore/kjs/scope_chain.cpp
JavaScriptCore/kjs/scope_chain.h
JavaScriptCore/kjs/string_object.cpp
JavaScriptCore/kjs/string_object.h

index 06f2fd6c3b6cc34879bec5e95693e73eb5d32536..159f53df7b3eaa1d4af7e5464eaf539689d1edeb 100644 (file)
@@ -287,14 +287,13 @@ JSValue* JSCallbackObject::callAsFunction(ExecState* exec, JSObject* thisObj, co
     return 0;
 }
 
-void JSCallbackObject::getPropertyList(ExecState* exec, ReferenceList& propertyList, bool recursive)
+void JSCallbackObject::getPropertyList(ReferenceList& propertyList, bool recursive)
 {
-    JSContextRef context = toRef(exec);
     JSObjectRef thisRef = toRef(this);
 
     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent) {
         if (JSObjectAddPropertiesToListCallback addPropertiesToList = jsClass->callbacks.addPropertiesToList)
-            addPropertiesToList(context, thisRef, toRef(&propertyList), toRef(exec->exceptionSlot()));
+            addPropertiesToList(thisRef, toRef(&propertyList));
 
         if (__JSClass::StaticValuesTable* staticValues = jsClass->staticValues) {
             typedef __JSClass::StaticValuesTable::const_iterator iterator;
@@ -319,7 +318,7 @@ void JSCallbackObject::getPropertyList(ExecState* exec, ReferenceList& propertyL
         }
     }
 
-    JSObject::getPropertyList(exec, propertyList, recursive);
+    JSObject::getPropertyList(propertyList, recursive);
 }
 
 bool JSCallbackObject::toBoolean(ExecState* exec) const
index 226427b2d11eb61556a62a3bf14d71f5dfd5a121..b9e554ad3a039471ac37a50de9aef1b3022847da 100644 (file)
@@ -60,7 +60,7 @@ public:
     virtual bool implementsCall() const;
     virtual JSValue* callAsFunction(ExecState*, JSObject* thisObj, const List &args);
 
-    virtual void getPropertyList(ExecState*, ReferenceList& propertyList, bool recursive);
+    virtual void getPropertyList(ReferenceList& propertyList, bool recursive);
 
     virtual bool toBoolean(ExecState*) const;
     virtual double toNumber(ExecState*) const;
index 8592fd338551e5eb62c3cdc05ef1170bf544827d..216dad15d1cba7c3d41182b1677c36d8bbeaf76f 100644 (file)
@@ -271,14 +271,13 @@ struct __JSPropertyEnumerator
     ReferenceListIterator iterator;
 };
 
-JSPropertyEnumeratorRef JSObjectCreatePropertyEnumerator(JSContextRef context, JSObjectRef object)
+JSPropertyEnumeratorRef JSObjectCreatePropertyEnumerator(JSObjectRef object)
 {
     JSLock lock;
-    ExecState* exec = toJS(context);
     JSObject* jsObject = toJS(object);
     
     JSPropertyEnumeratorRef enumerator = new __JSPropertyEnumerator();
-    jsObject->getPropertyList(exec, enumerator->list);
+    jsObject->getPropertyList(enumerator->list);
     enumerator->iterator = enumerator->list.begin();
     
     return JSPropertyEnumeratorRetain(enumerator);
index c2c384830702df997a60452f4b0183da1b0d3ab3..ad770e0b909d586a0115e889354051c63883f0da 100644 (file)
@@ -155,20 +155,18 @@ typedef bool
 /*! 
 @typedef JSObjectAddPropertiesToListCallback
 @abstract The callback invoked when adding an object's properties to a property list.
-@param context The current execution context.
 @param object The JSObject whose properties need to be added to propertyList.
 @param propertyList A JavaScript property list that will be used to enumerate object's properties.
-@param exception A pointer to a JSValueRef in which to return an exception, if any.
 @discussion If you named your function GetPropertyList, you would declare it like this:
 
-void AddPropertiesToList(JSContextRef context, JSObjectRef object, JSPropertyListRef propertyList, JSValueRef* exception);
+void AddPropertiesToList(JSObjectRef object, JSPropertyListRef propertyList);
 
 Use JSPropertyListAdd to add properties to propertyList.
 
 Property lists are used by JSPropertyEnumerators and JavaScript for...in loops.
 */
 typedef void
-(*JSObjectAddPropertiesToListCallback) (JSContextRef context, JSObjectRef object, JSPropertyListRef propertyList, JSValueRef* exception);
+(*JSObjectAddPropertiesToListCallback) (JSObjectRef object, JSPropertyListRef propertyList);
 
 /*! 
 @typedef JSObjectCallAsFunctionCallback
@@ -260,7 +258,7 @@ typedef JSValueRef
 @field getProperty The callback invoked when getting the value of a given property.
 @field setProperty The callback invoked when setting the value of a given property.
 @field deleteProperty The callback invoked when deleting a given property.
-@field getPropertyList The callback invoked when adding an object's properties to a property list.
+@field addPropertiesToList The callback invoked when adding an object's properties to a property list.
 @field callAsFunction The callback invoked when an object is called as a function.
 @field hasInstance The callback invoked when an object is used in an 'instanceof' expression.
 @field callAsConstructor The callback invoked when an object is used as a constructor in a 'new' expression.
@@ -506,11 +504,10 @@ JSObjectRef JSObjectCallAsConstructor(JSContextRef context, JSObjectRef object,
 /*!
 @function
 @abstract Creates an enumerator for an object's properties.
-@param context The execution context to use.
 @param object The object whose properties you want to enumerate.
 @result A JSPropertyEnumerator with a list of object's properties. Ownership follows the Create Rule.
 */
-JSPropertyEnumeratorRef JSObjectCreatePropertyEnumerator(JSContextRef context, JSObjectRef object);
+JSPropertyEnumeratorRef JSObjectCreatePropertyEnumerator(JSObjectRef object);
 /*!
 @function
 @abstract Retains a property enumerator.
index 8714ee0e4429d4f45fbf5d0774cc91dc47111f0a..8dfc46994c64a256254fc4de749a354d9d9ebf86 100644 (file)
@@ -162,7 +162,7 @@ static bool MyObject_deleteProperty(JSContextRef context, JSObjectRef object, JS
     return false;
 }
 
-static void MyObject_getPropertyList(JSContextRef context, JSObjectRef object, JSPropertyListRef propertyList, JSValueRef* exception)
+static void MyObject_addPropertiesToList(JSObjectRef object, JSPropertyListRef propertyList)
 {
     UNUSED_PARAM(context);
     
@@ -245,7 +245,7 @@ JSObjectCallbacks MyObject_callbacks = {
     MyObject_getProperty,
     MyObject_setProperty,
     MyObject_deleteProperty,
-    MyObject_getPropertyList,
+    MyObject_addPropertiesToList,
     MyObject_callAsFunction,
     MyObject_callAsConstructor,
     MyObject_hasInstance,
@@ -537,7 +537,7 @@ int main(int argc, char* argv[])
     o = JSObjectMake(context, NULL, NULL);
     JSObjectSetProperty(context, o, jsOneIString, JSValueMakeNumber(1), kJSPropertyAttributeNone);
     JSObjectSetProperty(context, o, jsCFIString,  JSValueMakeNumber(1), kJSPropertyAttributeDontEnum);
-    JSPropertyEnumeratorRef enumerator = JSObjectCreatePropertyEnumerator(context, o);
+    JSPropertyEnumeratorRef enumerator = JSObjectCreatePropertyEnumerator(o);
     int count = 0;
     while (JSPropertyEnumeratorGetNextName(enumerator))
         ++count;
index 2ec36cb9ff41be99386743be9c58000964e09515..1e082d0c9bafaef415507c2488fdec88189efd56 100644 (file)
@@ -1,3 +1,17 @@
+2006-07-12  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej.
+        
+        - Removed context and exception parameters from JSObjectGetPropertyEnumerator,
+        removing the spurious use of ExecState inside JavaScriptCore that made
+        us think this was necessary in the first place.
+
+        (StringInstance::getPropertyList): Use getString instead of toString because
+        we know we're dealing with a string -- we put it there in the first place.
+        While we're at it, store the string's size instead of retrieving it each time 
+        through the loop, to avoid the unnecessary killing of puppies.
+        * kjs/string_object.h:
+
 2006-07-12  Maciej Stachowiak  <mjs@apple.com>
 
         4eviewed by Geoff.
index 620bb1923d1091205ff5dc0971aae06d63b96292..6f0045b8bcc2421c3497e2f33ca1cbb8b8f0f31b 100644 (file)
@@ -186,7 +186,7 @@ __ZN3KJS8JSObject11hasInstanceEPNS_9ExecStateEPNS_7JSValueE
 __ZN3KJS8JSObject14callAsFunctionEPNS_9ExecStateEPS0_RKNS_4ListE
 __ZN3KJS8JSObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE
 __ZN3KJS8JSObject14deletePropertyEPNS_9ExecStateEj
-__ZN3KJS8JSObject15getPropertyListEPNS_9ExecStateERNS_13ReferenceListEb
+__ZN3KJS8JSObject15getPropertyListERNS_13ReferenceListEb
 __ZN3KJS8JSObject18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE
 __ZN3KJS8JSObject22fillGetterPropertySlotERNS_12PropertySlotEPPNS_7JSValueE
 __ZN3KJS8JSObject3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi
index f3b13e6704f3b153c53f0ee050cea9194474ee8a..a71bcf1b12b3175da68be7cdbe5310f06e76e237 100644 (file)
@@ -39,7 +39,7 @@ namespace KJS {
     virtual void put(ExecState *exec, unsigned propertyName, JSValue *value, int attr = None);
     virtual bool deleteProperty(ExecState *exec, const Identifier &propertyName);
     virtual bool deleteProperty(ExecState *exec, unsigned propertyName);
-    virtual void getPropertyList(ExecState*, ReferenceList& propertyList, bool recursive);
+    virtual void getPropertyList(ReferenceList& propertyList, bool recursive);
 
     virtual void mark();
 
index 538607ba9f0a0a0f2ad612c4a75e4afb1b149fd8..8f5b1c16d89737812f0bab80544c35b69dc342f7 100644 (file)
@@ -199,7 +199,7 @@ bool ArrayInstance::deleteProperty(ExecState *exec, unsigned index)
   return JSObject::deleteProperty(exec, Identifier::from(index));
 }
 
-void ArrayInstance::getPropertyList(ExecState* exec, ReferenceList& propertyList, bool recursive)
+void ArrayInstance::getPropertyList(ReferenceList& propertyList, bool recursive)
 {
   // avoid fetching this every time through the loop
   JSValue *undefined = jsUndefined();
@@ -211,7 +211,7 @@ void ArrayInstance::getPropertyList(ExecState* exec, ReferenceList& propertyList
       propertyList.append(Reference(this, i));
     }
   }
-  return JSObject::getPropertyList(exec, propertyList, recursive);
+  return JSObject::getPropertyList(propertyList, recursive);
 }
 
 void ArrayInstance::resizeStorage(unsigned newLength)
index 3ff16bc61f5f1fd57f455eb582452bd8f36036de..ef11c7089172b3862b7348f4a5b6874ddfc4d1fe 100644 (file)
@@ -1878,7 +1878,7 @@ Completion ForInNode::execute(ExecState *exec)
 
   KJS_CHECKEXCEPTION
   v = e->toObject(exec);
-  v->getPropertyList(exec, propertyList);
+  v->getPropertyList(propertyList);
 
   ReferenceListIterator propIt = propertyList.begin();
 
index 244300041f2adf419e2b2c73a97da6f95f9fa597..e11df88df84bd90846bf6ae6c2fd15935a00f477 100644 (file)
@@ -475,7 +475,7 @@ bool JSObject::getPropertyAttributes(const Identifier& propertyName, unsigned& a
   return false;
 }
 
-void JSObject::getPropertyList(ExecState *exec, ReferenceList& propertyList, bool recursive)
+void JSObject::getPropertyList(ReferenceList& propertyList, bool recursive)
 {
   _prop.addEnumerablesToReferenceList(propertyList, this);
 
@@ -493,7 +493,7 @@ void JSObject::getPropertyList(ExecState *exec, ReferenceList& propertyList, boo
     info = info->parentClass;
   }
   if (_proto->isObject() && recursive)
-      static_cast<JSObject*>(_proto)->getPropertyList(exec, propertyList, recursive);
+      static_cast<JSObject*>(_proto)->getPropertyList(propertyList, recursive);
 }
 
 bool JSObject::toBoolean(ExecState */*exec*/) const
index 2c6f2c398332c6f101c74db9a04a8ecd65861d8d..cd7319f881caf5b3304a5f62e7cfae9d9188d26a 100644 (file)
@@ -456,7 +456,7 @@ namespace KJS {
      * included in the list.
      * @return A List of References to properties of the object.
      **/
-    virtual void getPropertyList(ExecState *exec, ReferenceList& propertyList, bool recursive = true);
+    virtual void getPropertyList(ReferenceList& propertyList, bool recursive = true);
 
     /**
      * Returns the internal value of the object. This is used for objects such
index a8cf90f5051d98dd49792a6ccde27ab0afc10786..19b662e90ef1b8575a5c27a82b0ede11cc752051 100644 (file)
@@ -37,13 +37,13 @@ void ScopeChain::push(const ScopeChain &c)
 
 #ifndef NDEBUG
 
-void ScopeChain::print(ExecState* exec)
+void ScopeChain::print()
 {
     ScopeChainIterator scopeEnd = end();
     for (ScopeChainIterator scopeIter = begin(); scopeIter != scopeEnd; ++scopeIter) {
         JSObject* o = *scopeIter;
         ReferenceList propertyList;
-        o->getPropertyList(exec, propertyList, false);
+        o->getPropertyList(propertyList, false);
         ReferenceListIterator propEnd = propertyList.end();
 
         fprintf(stderr, "----- [scope %p] -----\n", o);
index f227dacf455dddb1b5709f20a5a3918aefe7595e..d9e4414489dfbf85d3c2ebe139dbbdc4dd9357d6 100644 (file)
@@ -82,7 +82,7 @@ namespace KJS {
         void mark();
 
 #ifndef NDEBUG        
-        void print(ExecState*);
+        void print();
 #endif
         
     private:
index 43c5afaf468ec388d611c098085bfae2fa389b30..564e2e150a4623e949ce9a7bb27759d455802cbe 100644 (file)
@@ -94,13 +94,13 @@ bool StringInstance::deleteProperty(ExecState *exec, const Identifier &propertyN
   return JSObject::deleteProperty(exec, propertyName);
 }
 
-void StringInstance::getPropertyList(ExecState *exec, ReferenceList& propertyList, bool recursive)
+void StringInstance::getPropertyList(ReferenceList& propertyList, bool recursive)
 {
   //### FIXME: should avoid duplicates with prototype
-  UString str = internalValue()->toString(exec);
-  for (int i = 0; i < str.size(); i++)
+  int size = internalValue()->getString().size();
+  for (int i = 0; i < size; i++)
     propertyList.append(Reference(this, i));
-  return JSObject::getPropertyList(exec, propertyList, recursive);
+  return JSObject::getPropertyList(propertyList, recursive);
 }
 
 // ------------------------------ StringPrototype ---------------------------
index e4f370e38cc1ae4cfba303a81c9f7f821fadc43a..77ef40330d86f44c79f220ad13603c48fc107209 100644 (file)
@@ -34,7 +34,7 @@ namespace KJS {
     virtual bool getOwnPropertySlot(ExecState *, const Identifier&, PropertySlot&);
     virtual void put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr = None);
     virtual bool deleteProperty(ExecState *exec, const Identifier &propertyName);
-    virtual void getPropertyList(ExecState *exec, ReferenceList& propertyList, bool recursive);
+    virtual void getPropertyList(ReferenceList& propertyList, bool recursive);
 
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;