5 public class SizeofExpr extends Expr {
9 public Set freeVars() {
10 return setexpr.freeVars();
13 public SizeofExpr(SetExpr setexpr) {
14 if (setexpr == null) {
15 throw new NullPointerException();
18 this.setexpr = setexpr;
21 public String name() {
22 return "size("+setexpr.name()+")";
25 public boolean equals(Map remap, Expr e) {
26 if (e==null||!(e instanceof SizeofExpr))
28 SizeofExpr soe=(SizeofExpr)e;
29 return setexpr.equals(remap,soe.setexpr);
32 public boolean usesDescriptor(Descriptor rd) {
33 return setexpr.usesDescriptor(rd);
36 public Set useDescriptor(Descriptor rd) {
37 return setexpr.useDescriptor(rd);
41 public Descriptor getDescriptor() {
42 return setexpr.getDescriptor();
45 public boolean inverted() {
46 return setexpr.inverted();
49 public SetExpr getSetExpr() {
53 public Set getRequiredDescriptors() {
54 return setexpr.getRequiredDescriptors();
57 public void generate(CodeWriter writer, VarDescriptor dest) {
58 setexpr.generate_size(writer, dest);
61 public void prettyPrint(PrettyPrinter pp) {
63 setexpr.prettyPrint(pp);
67 public TypeDescriptor typecheck(SemanticAnalyzer sa) {
68 this.td = ReservedTypeDescriptor.INT;
72 public Set getInversedRelations() {
73 return setexpr.getInversedRelations();