e62335ed3aa1bbd2c1eab8ea5b075d6fa757cde6
[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     boolean typechecked = false;
10
11     public VarExpr(String varname) {
12         this.varname = varname; 
13     }
14
15     public Set getRequiredDescriptors() {
16         return new HashSet();
17     }
18
19     public void generate(CodeWriter writer, VarDescriptor dest) {        
20
21         // #TBD#: bit of a hack, really should have been type checked properly 
22
23         vd = (VarDescriptor) writer.getSymbolTable().get(varname);        
24         assert vd != null;
25         assert vd.getType() != null;
26         this.td = vd.getType();
27
28         writer.outputline(vd.getType().getGenerateType().getSafeSymbol() + " " + dest.getSafeSymbol() + 
29                           " = (" + vd.getType().getGenerateType().getSafeSymbol() + ") " + vd.getSafeSymbol() + "; //varexpr");
30     }
31
32     public void prettyPrint(PrettyPrinter pp) {
33         pp.output(varname);
34     }
35
36     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
37         typechecked = true;
38         vd = (VarDescriptor) sa.getSymbolTable().get(varname);
39
40         if (vd == null) {
41             System.out.println(varname);
42             sa.getErrorReporter().report(null, "Undefined variable '" + varname + "'");
43             return null;
44         }
45         
46         assert vd.getType() != null;
47
48         this.td = vd.getType();
49         return this.td;
50     }
51     
52 }