More changes
[repair.git] / Repair / RepairCompiler / MCC / IR / TokenLiteralExpr.java
1 package MCC.IR;
2
3 import java.util.*;
4
5 public class TokenLiteralExpr extends LiteralExpr {
6
7     String token;
8     Integer num;
9
10     static int count = 100;
11     static Hashtable tokens = new Hashtable(); 
12
13     public TokenLiteralExpr(String token) {               
14         this.token = token;
15         td = ReservedTypeDescriptor.INT;
16         
17         if (tokens.containsKey(token)) {
18             num = (Integer) tokens.get(token);
19         } else {
20             num = new Integer(count++);
21             tokens.put(token, num);
22         }           
23     }
24
25     public abstract boolean equals(Map remap, Expr e) {
26         if (e==null)
27             return false;
28         else if (!e instanceof TokenLiteralExpr)
29             return false;
30         else return ((BooleanLiteralExpr)e).num.equals(num);
31     }
32
33     public String getValue() {
34         return token;
35     }
36
37     public void generate(CodeWriter writer, VarDescriptor dest) {
38         writer.outputline("int " + dest.getSafeSymbol() + " = " + num.toString().toString() + ";");
39     }
40     
41     public void prettyPrint(PrettyPrinter pp) {
42         pp.output("{" + token + " = " + num + "}"); 
43     }
44
45     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
46         td = ReservedTypeDescriptor.INT;
47         return td;
48     }
49
50 }