package edu.mit.ai.psg.jeva.examples;
import edu.mit.ai.psg.jeva.*;
import edu.mit.ai.psg.strings.Stringify;
import java.io.PrintWriter;
import java.util.Stack;
@author
public class TraceCallsEvalHook extends TraceAllEvalHook {
public TraceCallsEvalHook() { super(); }
public TraceCallsEvalHook(PrintWriter pw) { super(pw); }
public Object visit(IJevaNode node, Object data) { return null; }
public Object visit(JNEMethodInvocationExpression node, Object data) {
return trace(node, data);
}
public Object indentedTrace(PrintWriter pw, IJevaNode node, Object data) {
if (data instanceof EvalMethods.EvalHookPreData)
return data;
else return super.indentedTrace(pw, node, data);
}
public static void main(String[] ignore) {
EvalMethods.setEvalHook(new TraceCallsEvalHook());
String pgm = ("public class Fibonacci {\n"+
" public static void main(String[] ignore) {\n"+
" System.out.println(\"result: \"+fib(5));\n"+
" }\n"+
" public static int fib(int n) {\n"+
" if (n <= 2) return 1;\n"+
" else return fib(n-2)+fib(n-1);"+
" }\n"+
"}\n");
try { Jeva.parseEvalStringCompilationUnit(pgm, new String[]{}); }
catch (Throwable e) { e.printStackTrace(); }
}
}