X-Git-Url: http://git.megacz.com/?p=org.ibex.classgen.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FJSSA.java;h=55ed8dbb06cef09f087632e4486c6b1e9e358f85;hp=3626781fa293711f3d9fedb30a0f1ff59cf55bc9;hb=5186b123d341165e00082608ad38500f076f90f8;hpb=51c2ca8725bf1c1c225ca1ffad381cd7eb371032 diff --git a/src/org/ibex/classgen/JSSA.java b/src/org/ibex/classgen/JSSA.java index 3626781..55ed8db 100644 --- a/src/org/ibex/classgen/JSSA.java +++ b/src/org/ibex/classgen/JSSA.java @@ -36,36 +36,6 @@ public class JSSA extends MethodGen implements CGConst { } } } - - public void debugBodyToString(StringBuffer sb) { - StringBuffer sb0 = new StringBuffer(); - super.debugBodyToString(sb0); - StringTokenizer st = new StringTokenizer(sb0.toString(), "\n"); - String[] lines = new String[st.countTokens()]; - for(int i=0; i") ? method.getDeclaringClass().getName() : method.name); } + public String _toString() { return _toString(method.name.equals("") ? method.getDeclaringClass().getName() : method.name); } } public class InvokeInterface extends InvokeVirtual{public InvokeInterface(Type.Class.Method m, Expr[] a, Expr e){super(m,a,e);}} public class InvokeVirtual extends Invoke { public final Expr instance; public InvokeVirtual(Type.Class.Method m, Expr[] a, Expr e) { super(m, a); instance = e; } - public String toString() { return toString(method.name); } - protected String toString(String name) { + public String _toString() { return _toString(method.name); } + protected String _toString(String name) { StringBuffer sb = new StringBuffer(); sb.append(instance+"."); sb.append(name); @@ -438,8 +429,9 @@ public class JSSA extends MethodGen implements CGConst { private final Object o; public Constant(int i) { this(new Integer(i)); } public Constant(Object o) { this.o = o; } - public String toString() { return o instanceof String ? "\"" + o + "\"" : o.toString(); } + public String _toString() { return o == null ? "null" : o instanceof String ? "\"" + o + "\"" : o.toString(); } public Type getType() { + if (o == null) return Type.NULL; if (o instanceof Byte) return Type.BYTE; if (o instanceof Short) return Type.SHORT; if (o instanceof Character) return Type.CHAR; @@ -478,8 +470,8 @@ public class JSSA extends MethodGen implements CGConst { // Stack manipulations ////////////////////////////////////////////////////////////////////////////// - case ACONST_NULL: return stack[sp++] = new Constant(null); - case ICONST_M1: return stack[sp++] = new Constant(-1); + case ACONST_NULL: push(new Constant(null)); return null; + case ICONST_M1: push(new Constant(-1)); return null; case ICONST_0: case LCONST_0: case FCONST_0: case DCONST_0: push(new Constant(0)); return null; case ICONST_1: case LCONST_1: case FCONST_1: case DCONST_1: push(new Constant(1)); return null; case ICONST_2: case FCONST_2: push(new Constant(2)); return null; @@ -580,7 +572,7 @@ public class JSSA extends MethodGen implements CGConst { case INVOKESTATIC: ret = new InvokeStatic(method, args); break; default: throw new Error("should never happen"); } - if(ret.getType() != Type.VOID) push(ret); + if (ret.getType() != Type.VOID) push(ret); return new Seq(ret); } @@ -651,6 +643,58 @@ public class JSSA extends MethodGen implements CGConst { } } + + public void debugBodyToString(StringBuffer sb) { + StringBuffer sb0 = new StringBuffer(); + super.debugBodyToString(sb0); + StringTokenizer st = new StringTokenizer(sb0.toString(), "\n"); + String[] lines = new String[st.countTokens()]; + for(int i=0; i