package edu.mit.ai.psg.jeva.examples;
import edu.mit.ai.psg.jeva.*;
import java.io.PrintWriter;
{@link edu.mit.ai.psg.strings}@author
public class TraceAllEvalHook extends TraceEvalHookBase {
public TraceAllEvalHook() {
super();
}
public TraceAllEvalHook(PrintWriter pw) {
super(pw);
}
public Object visit(JNELiteralExpression node, Object data) {
return data;
}
public Object visit(JNName node, Object data) {
if (node.jjtGetNumChildren() == 0)
return data;
else return visit( (IJevaNode) node, data);
}
{@link TraceMethods#traceSource}{@link TraceMethods#traceFreeNames}{@link TraceMethods#traceApplications}{@link TraceMethods#tracePostData}
public Object indentedTrace(PrintWriter iw, IJevaNode node, Object data) {
if (data instanceof EvalMethods.EvalHookPreData) {
TraceMethods.traceSource(iw, node, data);
if (! (node instanceof JNName) &&
! (node instanceof JNELiteralExpression))
TraceMethods.traceFreeNames(iw, node, data);
} else if (data instanceof EvalMethods.PreApplyData) {
TraceMethods.traceApplications(iw, node, data);
} else if (data instanceof EvalMethods.EvalHookPostData) {
TraceMethods.tracePostData(iw, node, data);
}
iw.flush();
return null;
}
public static void main(String[] ignore) {
EvalMethods.setEvalHook(new TraceAllEvalHook());
try {
String stmt = ("{\n"+
"boolean b = true;\n"+
"b = ! b;\n"+
"b = b == b;\n"+
"b = b != b;\n"+
"b = b & b;\n"+
"b = b ^ b;\n"+
"b = b | b;\n"+
"b = b ? b : b;\n"+
"int i = 1;\n"+
"i = -i;\n"+
"i = +i;\n"+
"i = i*i;\n"+
"i = i/i;\n"+
"i = i-i;\n"+
"i = i+i;\n"+
"b = i < i;\n"+
"b = i <= i;\n"+
"b = i > i;\n"+
"b = i >= i;\n"+
"String s = \"s\";\n"+
"s += s;\n"+
"s = s.substring(0,1);\n"+
"i = System.identityHashCode(s);\n"+
"Object o = System.out;\n"+
"java.awt.Dimension d = new java.awt.Dimension(i,20);\n"+
"i = d.width;\n"+
"d.width += d.height;\n"+
"int[] a = {10,20,30};\n"+
"i = a[1];\n"+
"a[1] += i;\n"+
"a = new int[]{11,22,33};\n"+
"b = d instanceof java.awt.Dimension;\n"+
"d = (java.awt.Dimension) d;\n"+
"i++;\n"+
"i--;\n"+
"++i;\n"+
"--i;\n"+
"if (b) { b = false; } else { b = true; }\n"+
"do { b = ! b; } while (b);\n"+
"for (int j = 0; j < 1; j++) { continue; }\n"+
"label: switch(i) { case 0: break label; }\n"+
"synchronized(d) { d.width = i; }\n"+
"try { throw new Error(); } catch (Error e) {}\n"+
"while(b) { b=false; }\n"+
"}\n");
Jeva.parseEvalStringStatement(stmt);
} catch (Throwable e) { e.printStackTrace(); }
}
}