7570ddc246bb5492c8dda34aab44183e4f71232b
[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 SizeofExpr(SetExpr setexpr) {
10         if (setexpr == null) {
11             throw new NullPointerException();
12         }
13
14         this.setexpr = setexpr;
15     }
16
17     public String name() {
18         return "size("+setexpr.name()+")";
19     }
20
21     public boolean equals(Map remap, Expr e) {
22         if (e==null||!(e instanceof SizeofExpr))
23             return false;
24         SizeofExpr soe=(SizeofExpr)e;
25         return setexpr.equals(remap,soe.setexpr);
26     }
27
28     public boolean usesDescriptor(Descriptor rd) {
29         return setexpr.usesDescriptor(rd);
30     }
31
32
33     public Descriptor getDescriptor() {
34         return setexpr.getDescriptor();
35     }
36
37     public boolean inverted() {
38         return setexpr.inverted();
39     }
40
41     public SetExpr getSetExpr() {
42         return setexpr;
43     }
44
45     public Set getRequiredDescriptors() {
46         return setexpr.getRequiredDescriptors();
47     }
48
49     public void generate(CodeWriter writer, VarDescriptor dest) {
50         setexpr.generate_size(writer, dest);
51     }
52
53     public void prettyPrint(PrettyPrinter pp) {
54         pp.output("sizeof(");
55         setexpr.prettyPrint(pp);
56         pp.output(")");
57     }
58
59     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
60         this.td = ReservedTypeDescriptor.INT;
61         return this.td;        
62     }
63
64     public Set getInversedRelations() {
65         return setexpr.getInversedRelations();
66     }
67         
68 }