/** * ECMA 15.11.4.4 Error.prototype.toString ( ) * * @param self self reference * @return this NativeError as a string */ @Function(attributes = Attribute.NOT_ENUMERABLE) public static Object toString(final Object self) { // Step 1 and 2 : check if 'self' is object it not throw TypeError final ScriptObject sobj = Global.checkObject(self); // Step 3 & 4 : get "name" and convert to String. // But if message is undefined make it "Error". Object name = sobj.get("name"); if (name == UNDEFINED) { name = "Error"; } else { name = JSType.toString(name); } // Steps 5, 6, & 7 : get "message" and convert to String. // if 'message' is undefined make it "" (empty String). Object msg = sobj.get("message"); if (msg == UNDEFINED) { msg = ""; } else { msg = JSType.toString(msg); } // Step 8 : if name is empty, return msg if (((String) name).isEmpty()) { return msg; } // Step 9 : if message is empty, return name if (((String) msg).isEmpty()) { return name; } // Step 10 : return name + ": " + msg return name + ": " + msg; }
/** * Nashorn extension: Error.prototype.stack "stack" property is a string typed value containing * JavaScript stack frames. Each frame information is separated bv "\n" character. * * @param self self reference * @return value of "stack" property */ public static Object getStack(final Object self) { final ScriptObject sobj = Global.checkObject(self); if (sobj.has(STACK)) { return sobj.get(STACK); } final Object exception = ECMAException.getException(sobj); if (exception instanceof Throwable) { final Object value = getScriptStackString(sobj, (Throwable) exception); if (sobj.hasOwnProperty(STACK)) { sobj.put(STACK, value, false); } else { sobj.addOwnProperty(STACK, Attribute.NOT_ENUMERABLE, value); } return value; } return UNDEFINED; }
/** * Nashorn extension: Error.prototype.columnNumber * * @param self self reference * @return column number from which error was thrown */ public static Object getColumnNumber(final Object self) { final ScriptObject sobj = Global.checkObject(self); return sobj.has(COLUMNNUMBER) ? sobj.get(COLUMNNUMBER) : ECMAException.getColumnNumber((ScriptObject) self); }
/** * Nashorn extension: Error.prototype.fileName * * @param self self reference * @return file name from which error was thrown */ public static Object getFileName(final Object self) { final ScriptObject sobj = Global.checkObject(self); return sobj.has(FILENAME) ? sobj.get(FILENAME) : ECMAException.getFileName((ScriptObject) self); }
/** * Nashorn extension: Error.prototype.lineNumber * * @param self self reference * @return line number from which error was thrown */ public static Object getLineNumber(final Object self) { final ScriptObject sobj = Global.checkObject(self); return sobj.has(LINENUMBER) ? sobj.get(LINENUMBER) : ECMAException.getLineNumber(sobj); }