/** * Calls {@link #setStackTrace(StackTraceElement[])} to claim * the stack trace that include scripts */ protected void overwriteStackTrace(Throwable target) { List<List<StackTraceElement>> interpreterStack; Evaluator interpreter = Context.createInterpreter(); if (interpreter != null) interpreterStack = interpreter.buildScriptStack(this); else interpreterStack = Collections.emptyList(); int interpreterStackIndex = 0; List<StackTraceElement> newStacks = new ArrayList<StackTraceElement>(); StackTraceElement[] stack = target.getStackTrace(); for (int i = 0; i < stack.length; i++) { StackTraceElement e = stack[i]; if (interpreterStack != null && "net.sourceforge.htmlunit.corejs.javascript.Interpreter".equals(e.getClassName()) && "interpretLoop".equals(e.getMethodName())) { newStacks.addAll(interpreterStack.get(interpreterStackIndex++)); } else { newStacks.add(e); } } target.setStackTrace(newStacks.toArray(new StackTraceElement[newStacks.size()])); }
RhinoException() { Evaluator e = Context.createInterpreter(); if (e != null) e.captureStackInfo(this); overwriteStackTrace(this); }
private String generateStackTrace() { // Get stable reference to work properly with concurrent access CharArrayWriter writer = new CharArrayWriter(); super.printStackTrace(new PrintWriter(writer)); String origStackTrace = writer.toString(); Evaluator e = Context.createInterpreter(); if (e != null) return e.getPatchedStack(this, origStackTrace); return null; }
Object bytecode = compiler.compile(compilerEnv, tree, tree.getEncodedSource(), returnFunction); result = compiler.createFunctionObject(this, scope, bytecode, securityDomain); } else { result = compiler.createScriptObject(bytecode, securityDomain);
Evaluator interpreter = Context.createInterpreter(); if (interpreter != null) { interpreterStack = interpreter.getScriptStack(this);
Evaluator evaluator = createInterpreter(); if (evaluator != null) return evaluator.getSourcePositionFromStack(cx, linep);
evaluator.setEvalScriptFlag(script); Callable c = (Callable)script; return c.call(cx, scope, (Scriptable)thisArg, ScriptRuntime.emptyArgs);
RhinoException(String details) { super(details); Evaluator e = Context.createInterpreter(); if (e != null) e.captureStackInfo(this); overwriteStackTrace(this); }