Reviewed by TimO.
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 8 Jul 2006 17:42:39 +0000 (17:42 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 8 Jul 2006 17:42:39 +0000 (17:42 +0000)
        - Added ability to pass NULL for thisObject when calling JSObjectCallAsFunction,
        to match JSEvaluate.

        * API/JSObjectRef.cpp:
        (JSObjectCallAsFunction):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (main):

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

JavaScriptCore/API/JSObjectRef.cpp
JavaScriptCore/API/JSObjectRef.h
JavaScriptCore/API/testapi.c
JavaScriptCore/ChangeLog

index 4ac320c1d9dbb19266e8d805ba3344dba488e7c1..67263908010682c11a7fb0c3127804c7de24121b 100644 (file)
@@ -217,6 +217,9 @@ JSValueRef JSObjectCallAsFunction(JSContextRef context, JSObjectRef object, JSOb
     JSObject* jsObject = toJS(object);
     JSObject* jsThisObject = toJS(thisObject);
 
+    if (!jsThisObject)
+        jsThisObject = exec->dynamicInterpreter()->globalObject();
+    
     List argList;
     for (size_t i = 0; i < argc; i++)
         argList.append(toJS(argv[i]));
@@ -225,8 +228,8 @@ JSValueRef JSObjectCallAsFunction(JSContextRef context, JSObjectRef object, JSOb
     if (exec->hadException()) {
         if (exception)
             *exception = exec->exception();
-        result = NULL;
         exec->clearException();
+        result = NULL;
     }
     return result;
 }
index 511aee3fe5dee9c7500643ad8d1e2f3cc7abc2ff..f3fd91e5c9a3e5e7a1f13b5cd79fe7915bf294fc 100644 (file)
@@ -441,7 +441,7 @@ bool JSObjectIsFunction(JSObjectRef object);
 @abstract Calls an object as a function.
 @param context The execution context to use.
 @param object The JSObject to call as a function.
-@param thisObject The JSObject to use as 'this' in the function call.
+@param thisObject The object to use as "this," or NULL to use the global object as "this."
 @param argc An integer count of the number of arguments in argv.
 @param argv A JSValue array of the  arguments to pass to the function.
 @param exception A pointer to a JSValueRef in which to store an uncaught exception, if any. Pass NULL if you do not care to store an uncaught exception.
index e266e5d18e7a7c1e8837c2690e082ee48e45835a..ca8b917dc52e70e2d9d171a877a47d3ff64ab802 100644 (file)
@@ -601,6 +601,14 @@ int main(int argc, char* argv[])
     JSClassRef nullCallbacksClass = JSClassCreate(NULL, NULL, NULL, NULL);
     JSClassRelease(nullCallbacksClass);
     
+    functionBuf = JSStringBufferCreateUTF8("return this;");
+    function = JSFunctionMakeWithBody(context, functionBuf, NULL, 1, NULL);
+    JSStringBufferRelease(functionBuf);
+    v = JSObjectCallAsFunction(context, function, NULL, 0, NULL, NULL);
+    assert(JSValueIsEqual(context, v, globalObject));
+    v = JSObjectCallAsFunction(context, function, o, 0, NULL, NULL);
+    assert(JSValueIsEqual(context, v, o));
+    
     char* script = createStringWithContentsOfFile("testapi.js");
     JSStringBufferRef scriptBuf = JSStringBufferCreateUTF8(script);
     result = JSEvaluate(context, scriptBuf, NULL, NULL, 1, &exception);
index e46310ed6125dea2f9487e8ee1f03e4b16415191..6d62b88a0776d10d8a470e9b8db0145cf4f44c63 100644 (file)
@@ -1,3 +1,16 @@
+2006-07-08  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by TimO.
+
+        - Added ability to pass NULL for thisObject when calling JSObjectCallAsFunction,
+        to match JSEvaluate.
+        
+        * API/JSObjectRef.cpp:
+        (JSObjectCallAsFunction):
+        * API/JSObjectRef.h:
+        * API/testapi.c:
+        (main):
+
 === Safari-521.15 ===
 
 2006-07-07  Geoffrey Garen  <ggaren@apple.com>