// Return --- // Exp e; public IrStmt visit(AstReturn n) { if (n.e == null) return new IrReturn(); else return new IrReturn(n.e.accept(this)); }
public void visit(AstReturn n) { }
/* throws ParseException */ /* final */ public static AstStmt astStmt() { AstExp e1, e2; AstStmt s, s1, s2; AstExpList el; AstStmtList sl; jj_consume_token(AstRegExpId.kw56); switch ((jj_ntk == AstRegExpId.UNDEFINED)?jj_ntk_fn():jj_ntk) { case AstRegExpId.kwBlock: jj_consume_token(AstRegExpId.kwBlock); sl = astStmtList(); s = new AstBlock(sl); break; case AstRegExpId.kwAssign: jj_consume_token(AstRegExpId.kwAssign); e1 = astExp(); e2 = astExp(); s = new AstAssign(e1,e2); break; case AstRegExpId.kwCallStmt: jj_consume_token(AstRegExpId.kwCallStmt); e1 = astExp(); e2 = astExp(); el = astExpList(); s = new AstCallStmt(e1,(AstId)e2,el); break; case AstRegExpId.kwIf: jj_consume_token(AstRegExpId.kwIf); e1 = astExp(); s1 = astStmt(); s2 = astStmt(); s = new AstIf(e1,s1,s2); break; case AstRegExpId.kwWhile: jj_consume_token(AstRegExpId.kwWhile); e1 = astExp(); s1 = astStmt(); s = new AstWhile(e1,s1); break; case AstRegExpId.kwPrint: jj_consume_token(AstRegExpId.kwPrint); e1 = astExp(); s = new AstPrint(e1); break; case AstRegExpId.kwReturn: jj_consume_token(AstRegExpId.kwReturn); e1 = astExp(); s = new AstReturn(e1); break; case AstRegExpId.kwNullStmt: jj_consume_token(AstRegExpId.kwNullStmt); s = null; break; default: jj_la1[8] = jj_gen; jj_consume_token(AstRegExpId.UNDEFINED); throw new AstParseException(); } jj_consume_token(AstRegExpId.kw57); {if (true) return s;} throw new Error("Missing return statement in function"); }
/* throws Exception */ // Return --- // Exp e; public void visit(AstReturn n) { if (currMethod == null) throw new TypeException("Return is outside a method scope"); AstType rt = currMethod.RType(); AstType t = (n.e==null) ? null : n.e.accept(this); if (t==null) { if (rt != null) throw new TypeException("Return is missing an expr of type " + rt); } else if (rt == null) { throw new TypeException("Extraneous return expr in void method"); } else if (!compatible(rt, t)) { throw new TypeException("Wrong return type for method " + currMethod.Id().s + ": " + t); } hasReturn = true; }