Added:
[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 boolean usesDescriptor(Descriptor d) {
26         return false;
27     }
28
29     public String name() {
30         return token;
31     }
32
33     public boolean equals(Map remap, Expr e) {
34         if (e==null||!(e instanceof TokenLiteralExpr))
35             return false;
36         else return ((TokenLiteralExpr)e).num.equals(num);
37     }
38
39     public String getValue() {
40         return token;
41     }
42
43     public void generate(CodeWriter writer, VarDescriptor dest) {
44         writer.outputline("int " + dest.getSafeSymbol() + " = " + num.toString().toString() + ";");
45     }
46     
47     public void prettyPrint(PrettyPrinter pp) {
48         pp.output("{" + token + " = " + num + "}"); 
49     }
50
51     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
52         td = ReservedTypeDescriptor.INT;
53         return td;
54     }
55
56 }