/** * Nashorn extension: Error.prototype.getStackTrace() "stack" property is an array typed value * containing {@link StackTraceElement} objects of JavaScript stack frames. * * @param self self reference * @return stack trace as a script array. */ @Function(attributes = Attribute.NOT_ENUMERABLE) public static Object getStackTrace(final Object self) { final ScriptObject sobj = Global.checkObject(self); final Object exception = ECMAException.getException(sobj); Object[] res; if (exception instanceof Throwable) { res = NashornException.getScriptFrames((Throwable) exception); } else { res = ScriptRuntime.EMPTY_ARRAY; } return new NativeArray(res); }
/** * 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; }