Added support to printout data structure update nodes (bindings/updates)
[repair.git] / Repair / RepairCompiler / MCC / IR / SizeofExpr.java
1 package MCC.IR;
2
3 import java.util.*;
4
5 public class SizeofExpr extends Expr {
6
7     SetExpr setexpr;
8
9     public Set freeVars() {
10         return setexpr.freeVars();
11     }
12
13     public SizeofExpr(SetExpr setexpr) {
14         if (setexpr == null) {
15             throw new NullPointerException();
16         }
17
18         this.setexpr = setexpr;
19     }
20
21     public String name() {
22         return "size("+setexpr.name()+")";
23     }
24
25     public boolean equals(Map remap, Expr e) {
26         if (e==null||!(e instanceof SizeofExpr))
27             return false;
28         SizeofExpr soe=(SizeofExpr)e;
29         return setexpr.equals(remap,soe.setexpr);
30     }
31
32     public boolean usesDescriptor(Descriptor rd) {
33         return setexpr.usesDescriptor(rd);
34     }
35
36
37     public Descriptor getDescriptor() {
38         return setexpr.getDescriptor();
39     }
40
41     public boolean inverted() {
42         return setexpr.inverted();
43     }
44
45     public SetExpr getSetExpr() {
46         return setexpr;
47     }
48
49     public Set getRequiredDescriptors() {
50         return setexpr.getRequiredDescriptors();
51     }
52
53     public void generate(CodeWriter writer, VarDescriptor dest) {
54         setexpr.generate_size(writer, dest);
55     }
56
57     public void prettyPrint(PrettyPrinter pp) {
58         pp.output("sizeof(");
59         setexpr.prettyPrint(pp);
60         pp.output(")");
61     }
62
63     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
64         this.td = ReservedTypeDescriptor.INT;
65         return this.td;        
66     }
67
68     public Set getInversedRelations() {
69         return setexpr.getInversedRelations();
70     }
71         
72 }