Change by Mark Rowe <opendarwin.org@bdash.net.nz>.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Jun 2005 18:02:33 +0000 (18:02 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Jun 2005 18:02:33 +0000 (18:02 +0000)
        Reviewed by me.

        - further improvements to exception file/line number fix

        * kjs/nodes.h: Added setExceptionDetailsIfNeeded function.
        * kjs/nodes.cpp: Updated macros to call the new setExceptionDetailsIfNeeded function.
        (Node::setExceptionDetailsIfNeeded): Added.

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/nodes.cpp
JavaScriptCore/kjs/nodes.h

index ef338f3364ecdecc70183a9600a1a4e3bb1bfb5b..f1029aca6bda2fd61138d5f7d50e77a843ebdcf8 100644 (file)
@@ -1,3 +1,14 @@
+2005-06-10  Darin Adler  <darin@apple.com>
+
+        Change by Mark Rowe <opendarwin.org@bdash.net.nz>.
+        Reviewed by me.
+
+        - further improvements to exception file/line number fix
+
+        * kjs/nodes.h: Added setExceptionDetailsIfNeeded function.
+        * kjs/nodes.cpp: Updated macros to call the new setExceptionDetailsIfNeeded function.
+        (Node::setExceptionDetailsIfNeeded): Added.
+
 2005-06-09  Darin Adler  <darin@apple.com>
 
         Change by Mark Rowe <opendarwin.org@bdash.net.nz>
index 9125a5aaa4a358b9af9a66744ab9f9117a9399d3..7bab86877b773756423ccf07839473c9db18dfdd 100644 (file)
@@ -67,30 +67,34 @@ using namespace KJS;
 #endif
 
 #define KJS_CHECKEXCEPTION \
-  if (exec->hadException()) \
+  if (exec->hadException()) { \
+    setExceptionDetailsIfNeeded(exec); \
     return Completion(Throw, exec->exception()); \
+  } \
   if (Collector::outOfMemory()) \
     return Completion(Throw, Error::create(exec,GeneralError,"Out of memory"));
 
 #define KJS_CHECKEXCEPTIONVALUE \
-  if (exec->hadException()) {\
-    Object exception = exec->exception().toObject(exec); \
-    exception.put(exec, "line", Number(line)); \
-    exception.put(exec, "sourceURL", String(sourceURL)); \
+  if (exec->hadException()) { \
+    setExceptionDetailsIfNeeded(exec); \
     return exec->exception(); \
-  }\
+  } \
   if (Collector::outOfMemory()) \
     return Undefined(); // will be picked up by KJS_CHECKEXCEPTION
 
 #define KJS_CHECKEXCEPTIONREFERENCE \
-  if (exec->hadException()) \
-    return Reference::makeValueReference(Undefined());; \
+  if (exec->hadException()) { \
+    setExceptionDetailsIfNeeded(exec); \
+    return Reference::makeValueReference(Undefined()); \
+  } \
   if (Collector::outOfMemory()) \
     return Reference::makeValueReference(Undefined()); // will be picked up by KJS_CHECKEXCEPTION
 
 #define KJS_CHECKEXCEPTIONLIST \
-  if (exec->hadException()) \
+  if (exec->hadException()) { \
+    setExceptionDetailsIfNeeded(exec); \
     return List(); \
+  } \
   if (Collector::outOfMemory()) \
     return List(); // will be picked up by KJS_CHECKEXCEPTION
 
@@ -176,6 +180,19 @@ Value Node::throwError(ExecState *exec, ErrorType e, const char *msg, Identifier
   return result;
 }
 
+void Node::setExceptionDetailsIfNeeded(ExecState *exec)
+{
+    if (exec->hadException()) {
+        Object exception = exec->exception().toObject(exec);
+        if (!exception.hasProperty(exec, "line") &&
+            !exception.hasProperty(exec, "sourceURL")) {
+            exception.put(exec, "line", Number(line));
+            exception.put(exec, "sourceURL", String(sourceURL));
+        }
+    }
+}
+
+
 // ------------------------------ StatementNode --------------------------------
 StatementNode::StatementNode() : l0(-1), l1(-1), sid(-1), breakPoint(false)
 {
index 2d27eb6d0b86b1cfd9437637512ccf6cd19c567d..e8d0806e017dd3b3b1f49966bf0152af41bcee33 100644 (file)
@@ -106,6 +106,7 @@ namespace KJS {
     Value throwError(ExecState *exec, ErrorType e, const char *msg);
     Value throwError(ExecState *exec, ErrorType e, const char *msg, Value v, Node *expr);
     Value throwError(ExecState *exec, ErrorType e, const char *msg, Identifier label);
+    void setExceptionDetailsIfNeeded(ExecState *exec);
     int line;
     UString sourceURL;
     unsigned int refcount;