src/jdk/nashorn/api/scripting/NashornException.java

Print this page

        

@@ -27,10 +27,11 @@
 
 import java.util.ArrayList;
 import java.util.List;
 import jdk.nashorn.internal.codegen.CompilerConstants;
 import jdk.nashorn.internal.runtime.ECMAErrors;
+import jdk.nashorn.internal.runtime.ScriptObject;
 
 /**
  * This is base exception for all Nashorn exceptions. These originate from
  * user's ECMAScript code. Example: script parse errors, exceptions thrown from
  * scripts. Note that ScriptEngine methods like "eval", "invokeMethod",

@@ -47,10 +48,12 @@
     private final String fileName;
     // script line number
     private final int line;
     // script column number
     private final int column;
+    // underlying ECMA error object - lazily initialized
+    private Object ecmaError;
 
     /** script source name used for "engine.js" */
     public static final String ENGINE_SCRIPT_SOURCE_NAME = "nashorn:engine/resources/engine.js";
 
     /**

@@ -186,6 +189,35 @@
             assert buf.charAt(len - 1) == '\n';
             buf.deleteCharAt(len - 1);
         }
         return buf.toString();
     }
+    
+    protected Object getThrown() {
+        return null;
+    }
+    
+    protected NashornException initEcmaError(final ScriptObject global) {
+        if (ecmaError != null) {
+            return this; // initialized already!
+        }
+        
+        final Object thrown = getThrown();
+        if (thrown instanceof ScriptObject) {
+            ecmaError = ScriptObjectMirror.wrap(thrown, global);
+        } else {
+            ecmaError = thrown;
+        }
+        
+        return this;
+    }
+
+    /**
+     * Return the underlying ECMA error object, if available.
+     *
+     * @return underlying ECMA Error object's mirror or whatever was thrown
+     *         from script such as a String, Number or a Boolean.
+     */    
+    public Object getEcmaError() {
+        return ecmaError;
+    }
 }