5 public class VarExpr extends Expr {
8 VarDescriptor vd = null;
9 boolean typechecked = false;
11 public VarExpr(String varname) {
12 this.varname = varname;
15 public VarExpr(VarDescriptor vd) {
17 varname=vd.getSymbol();
18 this.td = vd.getType();
21 public String name() {
25 public boolean usesDescriptor(Descriptor d) {
31 public boolean equals(Map remap, Expr e) {
32 if (e==null||!(e instanceof VarExpr))
34 VarExpr ve=(VarExpr)e;
36 throw new Error("Uninitialized VarDescriptor");
38 throw new Error("e has uninitialized VarDescriptor");
40 if (remap.containsKey(nvd))
41 nvd=(VarDescriptor)remap.get(nvd);
47 public Set getInversedRelations() {
51 public Set getRequiredDescriptors() {
55 public VarDescriptor getVar() {
59 public void generate(CodeWriter writer, VarDescriptor dest) {
61 // #TBD#: bit of a hack, really should have been type checked properly
63 vd = (VarDescriptor) writer.getSymbolTable().get(varname);
65 assert vd.getType() != null;
66 this.td = vd.getType();
68 writer.outputline(vd.getType().getGenerateType().getSafeSymbol() + " " + dest.getSafeSymbol() +
69 " = (" + vd.getType().getGenerateType().getSafeSymbol() + ") " + vd.getSafeSymbol() + "; //varexpr");
72 public void prettyPrint(PrettyPrinter pp) {
76 public TypeDescriptor typecheck(SemanticAnalyzer sa) {
78 vd = (VarDescriptor) sa.getSymbolTable().get(varname);
81 System.out.println(varname);
82 sa.getErrorReporter().report(null, "Undefined variable '" + varname + "'");
86 assert vd.getType() != null;
88 this.td = vd.getType();