Reviewed by Maciej.
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 8 Jul 2006 02:25:55 +0000 (02:25 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 8 Jul 2006 02:25:55 +0000 (02:25 +0000)
        - Standardized which functions take a JSContext as an argument. The rule is:
        if you might execute JavaScript, you take a JSContext, otherwise you don't.

        The FIXME in JSObjectRef.h requires refactoring some parts of Interpreter,
        but not API changes, so I'm putting it off until later.

        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::JSCallbackObject):
        (KJS::JSCallbackObject::init):
        * API/JSCallbackObject.h:
        * API/JSContextRef.cpp:
        (JSContextCreate):
        * API/JSContextRef.h:
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSPropertyEnumeratorGetNext):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (MyObject_initialize):
        (main):
        * JavaScriptCore.exp:
        * kjs/array_object.cpp:
        (ArrayInstance::setLength):
        (ArrayInstance::pushUndefinedObjectsToEnd):
        * kjs/nodes.cpp:
        (ForInNode::execute):
        * kjs/reference.cpp:
        (KJS::Reference::getPropertyName):
        (KJS::Reference::getValue):
        * kjs/reference.h:
        * kjs/scope_chain.cpp:
        (KJS::ScopeChain::print):

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

14 files changed:
JavaScriptCore/API/JSCallbackObject.cpp
JavaScriptCore/API/JSCallbackObject.h
JavaScriptCore/API/JSContextRef.cpp
JavaScriptCore/API/JSContextRef.h
JavaScriptCore/API/JSObjectRef.cpp
JavaScriptCore/API/JSObjectRef.h
JavaScriptCore/API/testapi.c
JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCore.exp
JavaScriptCore/kjs/array_object.cpp
JavaScriptCore/kjs/nodes.cpp
JavaScriptCore/kjs/reference.cpp
JavaScriptCore/kjs/reference.h
JavaScriptCore/kjs/scope_chain.cpp

index afd94cd10f80d6df3392d20a37d2339e67e77ee6..07bb2557282b22e8ba3fc0c37ce300cf1a238d6e 100644 (file)
@@ -37,19 +37,19 @@ namespace KJS {
 
 const ClassInfo JSCallbackObject::info = { "CallbackObject", 0, 0, 0 };
 
-JSCallbackObject::JSCallbackObject(JSClassRef jsClass)
+JSCallbackObject::JSCallbackObject(JSContextRef context, JSClassRef jsClass)
     : JSObject()
 {
-    init(jsClass);
+    init(context, jsClass);
 }
 
-JSCallbackObject::JSCallbackObject(JSClassRef jsClass, JSObject* prototype)
+JSCallbackObject::JSCallbackObject(JSContextRef context, JSClassRef jsClass, JSObject* prototype)
     : JSObject(prototype)
 {
-    init(jsClass);
+    init(context, jsClass);
 }
 
-void JSCallbackObject::init(JSClassRef jsClass)
+void JSCallbackObject::init(JSContextRef context, JSClassRef jsClass)
 {
     m_privateData = 0;
     m_class = JSClassRetain(jsClass);
@@ -58,7 +58,7 @@ void JSCallbackObject::init(JSClassRef jsClass)
     
     do {
         if (JSInitializeCallback initialize = jsClass->callbacks.initialize)
-            initialize(thisRef);
+            initialize(context, thisRef);
     } while ((jsClass = jsClass->parent));
 }
 
index 5872351871404afa36cec318a128b175e6c45811..d8499eec5abbc84a34aba5d19965a0c93d842975 100644 (file)
@@ -36,8 +36,8 @@ namespace KJS {
 class JSCallbackObject : public JSObject
 {
 public:
-    JSCallbackObject(JSClassRef globalObjectClass);
-    JSCallbackObject(JSClassRef globalObjectClass, JSObject* prototype);
+    JSCallbackObject(JSContextRef, JSClassRef);
+    JSCallbackObject(JSContextRef, JSClassRef, JSObject* prototype);
     virtual ~JSCallbackObject();
         
     virtual UString className() const;
@@ -75,7 +75,7 @@ private:
     JSCallbackObject(); // prevent default construction
     JSCallbackObject(const JSCallbackObject&);
 
-    void init(JSClassRef jsClass);
+    void init(JSContextRef, JSClassRef);
     
     static JSValue* cachedValueGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
     static JSValue* staticValueGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot& slot);
index 140bdf40988f4ac1e79ae7eabef860c8a07b475b..fb3aad801ea4e4571edfbeef6864aef87bc0f22f 100644 (file)
@@ -40,7 +40,8 @@ JSContextRef JSContextCreate(JSClassRef globalObjectClass)
 
     JSObject* globalObject;
     if (globalObjectClass)
-        globalObject = new JSCallbackObject(globalObjectClass);
+        // FIXME: We need to pass a real ExecState here to support an initialize callback in globalObjectClass
+        globalObject = new JSCallbackObject(0, globalObjectClass);
     else
         globalObject = new JSObject();
 
index 46c2054b1775af356ef04879da0ccdb31b04d432..82a3b234c11d93dbb140c4d4856abea46b04c44a 100644 (file)
@@ -110,5 +110,5 @@ bool JSCheckSyntax(JSContextRef context, JSStringBufferRef script, JSStringBuffe
 #ifdef __cplusplus
 }
 #endif
-        
+
 #endif // JSContextRef_h
index 9ff7f67c457e2e253ae287d619a3eb412f824d5e..4ac320c1d9dbb19266e8d805ba3344dba488e7c1 100644 (file)
@@ -53,7 +53,7 @@ JSObjectRef JSObjectMake(JSContextRef context, JSClassRef jsClass, JSObjectRef p
     if (!jsClass)
         return toRef(new JSObject(jsPrototype)); // slightly more efficient
     else
-        return toRef(new JSCallbackObject(jsClass, jsPrototype));
+        return toRef(new JSCallbackObject(context, jsClass, jsPrototype));
 }
 
 JSObjectRef JSFunctionMake(JSContextRef context, JSCallAsFunctionCallback callAsFunction)
@@ -281,12 +281,11 @@ JSPropertyEnumeratorRef JSObjectCreatePropertyEnumerator(JSContextRef context, J
     return JSPropertyEnumeratorRetain(enumerator);
 }
 
-JSStringBufferRef JSPropertyEnumeratorGetNext(JSContextRef context, JSPropertyEnumeratorRef enumerator)
+JSStringBufferRef JSPropertyEnumeratorGetNext(JSPropertyEnumeratorRef enumerator)
 {
-    ExecState* exec = toJS(context);
     ReferenceListIterator& iterator = enumerator->iterator;
     if (iterator != enumerator->list.end()) {
-        JSStringBufferRef result = toRef(iterator->getPropertyName(exec).ustring().rep());
+        JSStringBufferRef result = toRef(iterator->getPropertyName().ustring().rep());
         iterator++;
         return result;
     }
index c374c5ab8052124cdc2fa2ccb657c3dfc711a36d..511aee3fe5dee9c7500643ad8d1e2f3cc7abc2ff 100644 (file)
@@ -57,15 +57,14 @@ typedef unsigned JSPropertyAttributes;
 /*! 
 @typedef JSInitializeCallback
 @abstract The callback invoked when an object is first created.
+@param context The execution context to use.
 @param object The JSObject being created.
 @discussion If you named your function Initialize, you would declare it like this:
 
-void Initialize(JSObjectRef object);
+void Initialize(JSContextRef context, JSObjectRef object);
 */
-
-// FIXME: Needs to take a context argument, but can't because no context exists when we're creating the global object
 typedef void
-(*JSInitializeCallback)         (JSObjectRef object);
+(*JSInitializeCallback)         (JSContextRef context, JSObjectRef object);
 
 /*! 
 @typedef JSFinalizeCallback
@@ -492,11 +491,10 @@ void JSPropertyEnumeratorRelease(JSPropertyEnumeratorRef enumerator);
 /*!
 @function
 @abstract Gets a property enumerator's next property.
-@param context The execution context to use.
 @param enumerator The JSPropertyEnumerator whose next property you want to get.
 @result A JSStringBuffer containing the property's name, or NULL if all properties have been enumerated.
 */
-JSStringBufferRef JSPropertyEnumeratorGetNext(JSContextRef context, JSPropertyEnumeratorRef enumerator);
+JSStringBufferRef JSPropertyEnumeratorGetNext(JSPropertyEnumeratorRef enumerator);
 
 /*!
 @function
index 34b79d0f64801d5f9fe32fb1ded71a113418a5ff..e266e5d18e7a7c1e8837c2690e082ee48e45835a 100644 (file)
@@ -122,7 +122,7 @@ static JSValueRef jsGlobalValue; // non-stack value for testing JSGCProtect()
 /* MyObject pseudo-class */
 
 static bool didInitialize = false;
-static void MyObject_initialize(JSObjectRef object)
+static void MyObject_initialize(JSContextRef context, JSObjectRef object)
 {
     UNUSED_PARAM(context);
     UNUSED_PARAM(object);
@@ -593,7 +593,7 @@ int main(int argc, char* argv[])
     JSObjectSetProperty(context, o, jsCFString,  JSNumberMake(1), kJSPropertyAttributeDontEnum);
     JSPropertyEnumeratorRef enumerator = JSObjectCreatePropertyEnumerator(context, o);
     int count = 0;
-    while (JSPropertyEnumeratorGetNext(context, enumerator))
+    while (JSPropertyEnumeratorGetNext(enumerator))
         ++count;
     JSPropertyEnumeratorRelease(enumerator);
     assert(count == 1); // jsCFString should not be enumerated
index 444bde026201f4014eacaf5c894c6976c7816d06..fc6998d4e09eb3912b30de0a3cc392a10984f75c 100644 (file)
@@ -1,3 +1,40 @@
+2006-07-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej.
+        
+        - Standardized which functions take a JSContext as an argument. The rule is:
+        if you might execute JavaScript, you take a JSContext, otherwise you don't.
+        
+        The FIXME in JSObjectRef.h requires refactoring some parts of Interpreter,
+        but not API changes, so I'm putting it off until later.
+
+        * API/JSCallbackObject.cpp:
+        (KJS::JSCallbackObject::JSCallbackObject):
+        (KJS::JSCallbackObject::init):
+        * API/JSCallbackObject.h:
+        * API/JSContextRef.cpp:
+        (JSContextCreate):
+        * API/JSContextRef.h:
+        * API/JSObjectRef.cpp:
+        (JSObjectMake):
+        (JSPropertyEnumeratorGetNext):
+        * API/JSObjectRef.h:
+        * API/testapi.c:
+        (MyObject_initialize):
+        (main):
+        * JavaScriptCore.exp:
+        * kjs/array_object.cpp:
+        (ArrayInstance::setLength):
+        (ArrayInstance::pushUndefinedObjectsToEnd):
+        * kjs/nodes.cpp:
+        (ForInNode::execute):
+        * kjs/reference.cpp:
+        (KJS::Reference::getPropertyName):
+        (KJS::Reference::getValue):
+        * kjs/reference.h:
+        * kjs/scope_chain.cpp:
+        (KJS::ScopeChain::print):
+
 2006-07-06  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Maciej.
index 81a1daf3c39f5ccf784306aaa626c7b176b21e4d..197756706aa68a6526386ac003c2b98b958cc1f0 100644 (file)
@@ -261,7 +261,7 @@ __ZNK3KJS8JSObject9classInfoEv
 __ZNK3KJS8JSObject9classNameEv
 __ZNK3KJS8JSObject9toBooleanEPNS_9ExecStateE
 __ZNK3KJS9ExecState18lexicalInterpreterEv
-__ZNK3KJS9Reference15getPropertyNameEPNS_9ExecStateE
+__ZNK3KJS9Reference15getPropertyNameEv
 __ZTVN3KJS19InternalFunctionImpE
 __ZTVN3KJS8JSObjectE
 _kJSObjectCallbacksNone
index c0133ea7560aa96001ed1010ea483f098dbd318b..538607ba9f0a0a0f2ad612c4a75e4afb1b149fd8 100644 (file)
@@ -251,7 +251,7 @@ void ArrayInstance::setLength(unsigned newLength, ExecState *exec)
     while (it != sparseProperties.end()) {
       Reference ref = it++;
       bool ok;
-      unsigned index = ref.getPropertyName(exec).toArrayIndex(&ok);
+      unsigned index = ref.getPropertyName().toArrayIndex(&ok);
       if (ok && index > newLength) {
         ref.deleteValue(exec);
       }
@@ -373,7 +373,7 @@ unsigned ArrayInstance::pushUndefinedObjectsToEnd(ExecState *exec)
     while (it != sparseProperties.end()) {
       Reference ref = it++;
       storage[o] = ref.getValue(exec);
-      JSObject::deleteProperty(exec, ref.getPropertyName(exec));
+      JSObject::deleteProperty(exec, ref.getPropertyName());
       o++;
     }
     
index fba2acfedca3bcae903acb6eba4574cb00abf582..3ff16bc61f5f1fd57f455eb582452bd8f36036de 100644 (file)
@@ -1883,7 +1883,7 @@ Completion ForInNode::execute(ExecState *exec)
   ReferenceListIterator propIt = propertyList.begin();
 
   while (propIt != propertyList.end()) {
-    Identifier name = propIt->getPropertyName(exec);
+    Identifier name = propIt->getPropertyName();
     if (!v->hasProperty(exec, name)) {
       propIt++;
       continue;
index c60a5fc283e09ccd52ab8a179125f79c20290733..b285c0afdaf5358459d572010873c62d8a5cd6b1 100644 (file)
@@ -43,7 +43,7 @@ Reference::Reference(JSObject *b, unsigned p)
 {
 }
 
-Identifier Reference::getPropertyName(ExecState*) const
+Identifier Reference::getPropertyName() const
 {
   if (propertyNameIsNumber && prop.isNull())
     prop = Identifier::from(propertyNameAsNumber);
@@ -55,7 +55,7 @@ JSValue *Reference::getValue(ExecState *exec) const
   JSValue *o = base;
   if (!o || !o->isObject()) {
     if (!o || o->isNull())
-      return throwError(exec, ReferenceError, "Can't find variable: " + getPropertyName(exec).ustring());
+      return throwError(exec, ReferenceError, "Can't find variable: " + getPropertyName().ustring());
     return throwError(exec, ReferenceError, "Base is not an object");
   }
 
index 08ef367ce8c572f4d284fc1dbea8fc3d5b8f9477..7c0dca4c8761c809ecf9709381c4e139ef60e1d6 100644 (file)
@@ -40,7 +40,7 @@ namespace KJS {
      * Performs the GetPropertyName type conversion operation on this value
      * (ECMA 8.7)
      */
-    Identifier getPropertyName(ExecState *exec) const;
+    Identifier getPropertyName() const;
 
     /**
      * Performs the GetValue type conversion operation on this value
index 720b4a0b320cda1805d7d5107b6c5d46fb8df348..a8cf90f5051d98dd49792a6ccde27ab0afc10786 100644 (file)
@@ -48,7 +48,7 @@ void ScopeChain::print(ExecState* exec)
 
         fprintf(stderr, "----- [scope %p] -----\n", o);
         for (ReferenceListIterator propIter = propertyList.begin(); propIter != propEnd; propIter++) {
-            Identifier name = propIter->getPropertyName(exec);
+            Identifier name = propIter->getPropertyName();
             fprintf(stderr, "%s, ", name.ascii());
         }
         fprintf(stderr, "\n");