correct
[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     public Set useDescriptor(Descriptor rd) {
37         return setexpr.useDescriptor(rd);
38     }
39
40
41     public Descriptor getDescriptor() {
42         return setexpr.getDescriptor();
43     }
44
45     public boolean inverted() {
46         return setexpr.inverted();
47     }
48
49     public SetExpr getSetExpr() {
50         return setexpr;
51     }
52
53     public Set getRequiredDescriptors() {
54         return setexpr.getRequiredDescriptors();
55     }
56
57     public void generate(CodeWriter writer, VarDescriptor dest) {
58         setexpr.generate_size(writer, dest);
59     }
60
61     public void prettyPrint(PrettyPrinter pp) {
62         pp.output("sizeof(");
63         setexpr.prettyPrint(pp);
64         pp.output(")");
65     }
66
67     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
68         this.td = ReservedTypeDescriptor.INT;
69         return this.td;        
70     }
71
72     public Set getInversedRelations() {
73         return setexpr.getInversedRelations();
74     }
75         
76 }