JavaScriptCore:
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Oct 2004 23:19:20 +0000 (23:19 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Oct 2004 23:19:20 +0000 (23:19 +0000)
        Fixed <rdar://problem/3819234> NPN_SetException (and throwException:) isn't implemented

        Reviewed by Chris.

        * bindings/NP_jsobject.cpp:
        (_NPN_SetException):
        * bindings/npruntime.cpp:
        (_NPN_SetExceptionWithUTF8):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]):
        * kjs/internal.h:
        (KJS::InterpreterImp::context):

WebBrowser:
Added debugging support for:

        Fixed <rdar://problem/3819234> NPN_SetException (and throwException:) isn't implemented

        Logging is not enabled in either development or deployment build.

        Reviewed by Chris.

        * LocationChangeHandler.m:
        (+[Logger isSelectorExcludedFromWebScript:]):
        (-[Logger logMessage:]):
        (-[LocationChangeHandler webView:windowScriptObjectAvailable:]):
        (-[LocationChangeHandler webView:locationChangeDone:forDataSource:]):

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

JavaScriptCore/ChangeLog
JavaScriptCore/bindings/NP_jsobject.cpp
JavaScriptCore/bindings/npruntime.cpp
JavaScriptCore/bindings/objc/WebScriptObject.mm
JavaScriptCore/kjs/internal.h

index 021d7206e3d8fb572639b30b49cedd8bdd3e9d2c..9c219782b67343cddd20b70e6cf34526679e40ee 100644 (file)
@@ -1,3 +1,18 @@
+2004-10-05  Richard Williamson   <rjw@apple.com>
+
+        Fixed <rdar://problem/3819234> NPN_SetException (and throwException:) isn't implemented
+
+        Reviewed by Chris.
+
+        * bindings/NP_jsobject.cpp:
+        (_NPN_SetException):
+        * bindings/npruntime.cpp:
+        (_NPN_SetExceptionWithUTF8):
+        * bindings/objc/WebScriptObject.mm:
+        (+[WebScriptObject throwException:]):
+        * kjs/internal.h:
+        (KJS::InterpreterImp::context):
+
 2004-10-05  Richard Williamson   <rjw@apple.com>
 
         Fixed <rdar://problem/3821515> binding layer needs to convert NSNumber-bools to js type boolean not number
index 992e7a9b0cbd0388ced361a136c52e9a8050b2b6..e1ea07928b442121491b34c2a7c5fbc79b95559a 100644 (file)
@@ -364,3 +364,19 @@ bool _NPN_HasMethod(NPP npp, NPObject *o, NPIdentifier methodName)
     
     return false;
 }
+
+void _NPN_SetException (NPObject *o, NPString *message)
+{
+    if (o->_class == NPScriptObjectClass) {
+        JavaScriptObject *obj = (JavaScriptObject *)o; 
+        ExecState *exec = obj->root->interpreter()->globalExec();
+        Interpreter::lock();
+        char *msg = (char *)malloc (message->UTF8Length + 1);
+        strncpy (msg, message->UTF8Characters, message->UTF8Length);
+        msg[message->UTF8Length] = 0;
+        Object err = Error::create(exec, GeneralError, msg);
+        free (msg);
+        exec->setException (err);
+        Interpreter::unlock();
+    }
+}
index bf278a83dcc22d064f08b5e5e77e13cce77fdc3a..7d6e426baa0fc7337b66e495c29acf8c1147f3a5 100644 (file)
@@ -440,9 +440,3 @@ void _NPN_SetExceptionWithUTF8 (NPObject *obj, const NPUTF8 *message, int32_t le
         _NPN_SetException (obj, &string);
     }
 }
-
-
-void _NPN_SetException (NPObject *obj, NPString *message)
-{
-    // FIX ME.  Need to implement.
-}
index 403a59f122b11190504ee492c03dbf71de5700da..c07d624bca3fc35f4fa7f625bfb2d4025dd37024 100644 (file)
@@ -114,7 +114,24 @@ static void _didExecute(WebScriptObject *obj)
 
 + (BOOL)throwException:(NSString *)exceptionMessage
 {
-    NSLog (@"%s:%d:  not yet implemented", __PRETTY_FUNCTION__, __LINE__);
+    InterpreterImp *first, *interp = InterpreterImp::firstInterpreter();
+
+    // This code assumes that we only ever have one running interpreter.  A
+    // good assumption for now, as we depend on that elsewhere.  However,
+    // in the future we may have the ability to run multiple interpreters,
+    // in which case this will have to change.
+    first = interp;
+    do {
+        ExecState *exec = interp->globalExec();
+        // If the interpreter has a context, we set the exception.
+        if (interp->context()) {
+            Object err = Error::create(exec, GeneralError, [exceptionMessage UTF8String]);
+            exec->setException (err);
+            return YES;
+        }
+        interp = interp->nextInterpreter();
+    } while (interp != first);
+    
     return NO;
 }
 
index 9a9d89f00a216f5756140dfef561ff9457be36b8..fd14ef7812b88707ed8ef724a9e5d18f0e01230a 100644 (file)
@@ -320,6 +320,7 @@ namespace KJS {
     static InterpreterImp *interpreterWithGlobalObject(ObjectImp *);
     
     void setContext(ContextImp *c) { _context = c; }
+    ContextImp *context() const { return _context; }
 
     void saveBuiltins (SavedBuiltins &builtins) const;
     void restoreBuiltins (const SavedBuiltins &builtins);