sizeofpredi
[repair.git] / Repair / RepairCompiler / MCC / IR / SizeofPredicate.java
1 package MCC.IR;
2
3 import java.util.*;
4
5 public class SizeofPredicate extends Predicate {
6    
7     SetExpr setexpr;
8     Opcode opcode;
9     IntegerLiteralExpr cardinality;
10
11     public SizeofPredicate(SetExpr setexpr, Opcode opcode, IntegerLiteralExpr cardinality) {
12         if (setexpr == null || opcode == null || cardinality == null) {
13             throw new IllegalArgumentException();
14         } else if (opcode != Opcode.EQ &&
15                    opcode != Opcode.GE &&
16                    opcode != Opcode.LE) {
17             throw new IllegalArgumentException("invalid operator type");
18         }
19
20         this.setexpr = setexpr;
21         this.opcode = opcode;
22         this.cardinality = cardinality;
23     }
24
25     public Set getRequiredDescriptors() {
26         assert setexpr != null;
27         Set v = setexpr.getRequiredDescriptors();
28         // v.add(cardinality.getRequiredDescriptors()); // will be null
29         return v;
30     }
31      
32     public void generate(CodeWriter writer, VarDescriptor dest) {
33
34         // #TBD#: generate the set which should generate a name (variable) which is the pointer 
35         // to a hash table iterator that we can dereference get something blah blah blah
36
37         VarDescriptor size = VarDescriptor.makeNew("size");
38         setexpr.generate_size(writer, size);
39         
40         writer.outputline("int " + dest.getSafeSymbol() + " = " + size.getSafeSymbol() + opcode.toString() + cardinality.getValue() + ";");                       
41     }
42        
43 }
44     
45
46
47
48
49