5 public class InclusionPredicate extends Predicate {
10 public TypeDescriptor typecheck(SemanticAnalyzer sa) {
11 TypeDescriptor t=expr.typecheck(sa);
12 TypeDescriptor ts=setexpr.typecheck(sa);
16 return ReservedTypeDescriptor.INT;
19 public boolean inverted() {
20 return setexpr.inverted();
23 public String name() {
24 return expr.name() + " in "+setexpr.name();
27 public InclusionPredicate(Expr expr, SetExpr setexpr) {
29 throw new NullPointerException();
32 if (setexpr == null) {
33 throw new NullPointerException();
37 this.setexpr = setexpr;
40 public Set getRequiredDescriptors() {
41 Set v = expr.getRequiredDescriptors();
42 v.addAll(setexpr.getRequiredDescriptors());
46 public void generate(CodeWriter writer, VarDescriptor dest) {
47 VarDescriptor var = VarDescriptor.makeNew("exprval");
48 expr.generate(writer, var);
49 setexpr.generate_inclusion(writer, dest, var);
52 public Set getInversedRelations() {
54 throw new IRException("unsupported");
56 //Set set = setexpr.getInversedRelations();
57 //set.addAll(expr.getInversedRelations());
61 public Descriptor getDescriptor() {
62 if (setexpr instanceof ImageSetExpr) {
63 return ((ImageSetExpr)setexpr).getRelation();
68 public int[] getRepairs(boolean negated, Termination t) {
69 if (setexpr instanceof ImageSetExpr) {
71 return new int[] {AbstractRepair.REMOVEFROMRELATION};
73 return new int[] {AbstractRepair.ADDTORELATION};
76 return new int[] {AbstractRepair.REMOVEFROMSET};
78 return new int[] {AbstractRepair.ADDTOSET};