IR
[repair.git] / Repair / RepairCompiler / MCC / IR / VarExpr.java
1 package MCC.IR;
2
3 import java.util.*;
4
5 public class VarExpr extends Expr {
6
7     String varname;
8     VarDescriptor vd = null;
9
10     public VarExpr(String varname) {
11         this.varname = varname; 
12     }
13
14     public Set getRequiredDescriptors() {
15         return new HashSet();
16     }
17
18     public void generate(CodeWriter writer, VarDescriptor dest) {        
19         writer.outputline(vd.getType().getGenerateType().getSafeSymbol() + " " + dest.getSafeSymbol() + 
20                           " = (" + vd.getType().getGenerateType().getSafeSymbol() + ") " + vd.getSafeSymbol() + ";");
21     }
22
23     public void prettyPrint(PrettyPrinter pp) {
24         pp.output(varname);
25     }
26
27     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
28         vd = (VarDescriptor) sa.getSymbolTable().get(varname);
29
30         if (vd == null) {
31             System.out.println(varname);
32             sa.getErrorReporter().report(null, "Undefined variable '" + varname + "'");
33             return null;
34         }
35         
36         assert vd.getType() != null;
37
38         this.td = vd.getType();
39         return this.td;
40     }
41     
42 }