package x10.sncode.ast; import x10.sncode.ByteBuffer; import x10.sncode.InvalidClassFileException; public class AST { public static enum Kind { CONSTANT, VAR, EQV, FORMULA, FIELDREF, METHODREF; public static Kind value(int k) { return values()[k]; } } public static Term readTerm(ByteBuffer b) throws InvalidClassFileException { int k = b.getCPIndex(); Kind kind = Kind.value(k); switch (kind) { case VAR: case EQV: { int index = b.getCPIndex(); return new Var(kind, index); } case CONSTANT: { int index = b.getCPIndex(); return new Constant(index); } // case FIELDREF: { // int index = b.getCPIndex(); // return new FieldRef(index); // } // case METHODREF: { // int index = b.getCPIndex(); // return new MethodRef(index); // } default: { int numTerms = b.getCount(); int name = b.getCPIndex(); Term[] terms = new Term[numTerms]; for (int i = 0; i < terms.length; i++) { Term t = readTerm(b); terms[i] = t; } return new Formula(name, terms); } } } }