private ASTree parseDotClass(ASTree className, int dim) throws CompileError { String cname = toClassName(className); if (dim > 0) { StringBuffer sbuf = new StringBuffer(); while (dim-- > 0) sbuf.append('['); sbuf.append('L').append(cname.replace('.', '/')).append(';'); cname = sbuf.toString(); } return Expr.make('.', new Symbol(cname), new Member("class")); }
/** * Makes the given variable name available. * * @param typeDesc the type descriptor of the variable * @param varName variable name * @param varNo an index into the local variable array */ public void recordVariable(String typeDesc, String varName, int varNo, SymbolTable tbl) throws CompileError { char c; int dim = 0; while ((c = typeDesc.charAt(dim)) == '[') ++dim; int type = MemberResolver.descToType(c); String cname = null; if (type == CLASS) { if (dim == 0) cname = typeDesc.substring(1, typeDesc.length() - 1); else cname = typeDesc.substring(dim + 1, typeDesc.length() - 1); } Declarator decl = new Declarator(type, cname, dim, varNo, new Symbol(varName)); tbl.append(varName, decl); }
private ASTree parseDotClass(ASTree className, int dim) throws CompileError { String cname = toClassName(className); if (dim > 0) { StringBuffer sbuf = new StringBuffer(); while (dim-- > 0) sbuf.append('['); sbuf.append('L').append(cname.replace('.', '/')).append(';'); cname = sbuf.toString(); } return Expr.make('.', new Symbol(cname), new Member("class")); }
private int recordVar(CtClass cc, String varName, int varNo, SymbolTable tbl) throws CompileError { if (cc == CtClass.voidType) { exprType = CLASS; arrayDim = 0; className = jvmJavaLangObject; } else setType(cc); Declarator decl = new Declarator(exprType, className, arrayDim, varNo, new Symbol(varName)); tbl.append(varName, decl); return is2word(exprType, arrayDim) ? 2 : 1; }
private int recordVar(CtClass cc, String varName, int varNo, SymbolTable tbl) throws CompileError { if (cc == CtClass.voidType) { exprType = CLASS; arrayDim = 0; className = jvmJavaLangObject; } else setType(cc); Declarator decl = new Declarator(exprType, className, arrayDim, varNo, new Symbol(varName)); tbl.append(varName, decl); return is2word(exprType, arrayDim) ? 2 : 1; }
public void doit(JvstCodeGen gen, Bytecode b, ASTList args) throws CompileError { Expr expr = Expr.make(TokenId.MEMBER, new Symbol(c), new Member(m)); expr = CallExpr.makeCall(expr, args); gen.compileExpr(expr); gen.addNullIfVoid(); }
public void setReturnType(JvstTypeChecker check, ASTList args) throws CompileError { Expr expr = Expr.make(TokenId.MEMBER, new Symbol(c), new Member(m)); expr = CallExpr.makeCall(expr, args); expr.accept(check); check.addNullIfVoid(); } };
private CtField fieldAccess2(Expr e, String jvmClassName) throws CompileError { Member fname = (Member)e.oprand2(); CtField f = resolver.lookupFieldByJvmName2(jvmClassName, fname, e); e.setOperator(MEMBER); e.setOprand1(new Symbol(MemberResolver.jvmToJavaName(jvmClassName))); fname.setField(f); return f; }
private ASTList parseClassType(SymbolTable tbl) throws CompileError { ASTList list = null; for (;;) { if (lex.get() != Identifier) throw new SyntaxError(lex); list = ASTList.append(list, new Symbol(lex.getString())); if (lex.lookAhead() == '.') lex.get(); else break; } return list; }
@Override public void doit(JvstCodeGen gen, Bytecode b, ASTList args) throws CompileError { Expr expr = Expr.make(TokenId.MEMBER, new Symbol(c), new Member(m)); expr = CallExpr.makeCall(expr, args); gen.compileExpr(expr); gen.addNullIfVoid(); }
@Override public void setReturnType(JvstTypeChecker check, ASTList args) throws CompileError { Expr expr = Expr.make(TokenId.MEMBER, new Symbol(c), new Member(m)); expr = CallExpr.makeCall(expr, args); expr.accept(check); check.addNullIfVoid(); } };
private Stmnt parseContinue(SymbolTable tbl) throws CompileError { int t = lex.get(); // CONTINUE Stmnt s = new Stmnt(t); int t2 = lex.get(); if (t2 == Identifier) { s.setLeft(new Symbol(lex.getString())); t2 = lex.get(); } if (t2 != ';') throw new CompileError("; is missing", lex); return s; }
private Declarator parseFormalParam(SymbolTable tbl) throws CompileError { Declarator d = parseFormalType(tbl); if (lex.get() != Identifier) throw new SyntaxError(lex); String name = lex.getString(); d.setVariable(new Symbol(name)); d.addArrayDim(parseArrayDimension()); tbl.append(name, d); return d; }
private CtField fieldAccess2(Expr e, String jvmClassName) throws CompileError { Member fname = (Member)e.oprand2(); CtField f = resolver.lookupFieldByJvmName2(jvmClassName, fname, e); e.setOperator(MEMBER); e.setOprand1(new Symbol(MemberResolver.jvmToJavaName(jvmClassName))); fname.setField(f); return f; }
private ASTList parseClassType(SymbolTable tbl) throws CompileError { ASTList list = null; for (;;) { if (lex.get() != Identifier) throw new SyntaxError(lex); list = ASTList.append(list, new Symbol(lex.getString())); if (lex.lookAhead() == '.') lex.get(); else break; } return list; }
private Stmnt parseContinue(SymbolTable tbl) throws CompileError { int t = lex.get(); // CONTINUE Stmnt s = new Stmnt(t); int t2 = lex.get(); if (t2 == Identifier) { s.setLeft(new Symbol(lex.getString())); t2 = lex.get(); } if (t2 != ';') throw new CompileError("; is missing", lex); return s; }
private Declarator parseFormalParam(SymbolTable tbl) throws CompileError { Declarator d = parseFormalType(tbl); if (lex.get() != Identifier) throw new SyntaxError(lex); String name = lex.getString(); d.setVariable(new Symbol(name)); d.addArrayDim(parseArrayDimension()); tbl.append(name, d); return d; }
private Declarator parseDeclarator(SymbolTable tbl, Declarator d) throws CompileError { if (lex.get() != Identifier || d.getType() == VOID) throw new SyntaxError(lex); String name = lex.getString(); Symbol symbol = new Symbol(name); int dim = parseArrayDimension(); ASTree init = null; if (lex.lookAhead() == '=') { lex.get(); init = parseInitializer(tbl); } Declarator decl = d.make(symbol, dim, init); tbl.append(name, decl); return decl; }
private Declarator parseDeclarator(SymbolTable tbl, Declarator d) throws CompileError { if (lex.get() != Identifier || d.getType() == VOID) throw new SyntaxError(lex); String name = lex.getString(); Symbol symbol = new Symbol(name); int dim = parseArrayDimension(); ASTree init = null; if (lex.lookAhead() == '=') { lex.get(); init = parseInitializer(tbl); } Declarator decl = d.make(symbol, dim, init); tbl.append(name, decl); return decl; }
public ASTList parseMember1(SymbolTable tbl) throws CompileError { ASTList mods = parseMemberMods(); Declarator d; boolean isConstructor = false; if (lex.lookAhead() == Identifier && lex.lookAhead(1) == '(') { d = new Declarator(VOID, 0); isConstructor = true; } else d = parseFormalType(tbl); if (lex.get() != Identifier) throw new SyntaxError(lex); String name; if (isConstructor) name = MethodDecl.initName; else name = lex.getString(); d.setVariable(new Symbol(name)); if (isConstructor || lex.lookAhead() == '(') return parseMethod1(tbl, isConstructor, mods, d); else return parseField(tbl, mods, d); }