34457c3f8d8100453a96bab712b336764d6e73f1
[repair.git] / Repair / RepairCompiler / MCC / IR / SumExpr.java
1 package MCC.IR;
2
3 import java.util.*;
4
5 public class SumExpr extends Expr {
6
7     SetDescriptor sd;
8     RelationDescriptor rd;
9
10
11     public SumExpr(SetDescriptor sd, RelationDescriptor rd) {
12         if (sd == null||rd==null) {
13             throw new NullPointerException();
14         }
15         this.sd=sd;
16         this.rd=rd;
17     }
18
19     public String name() {
20         return "sum("+sd.toString()+"."+rd.toString()+")";
21     }
22
23     public boolean equals(Map remap, Expr e) {
24         if (e==null||!(e instanceof SumExpr))
25             return false;
26         SumExpr se=(SumExpr)e;
27         return (se.sd==sd)&&(se.rd==rd);
28     }
29
30     public boolean usesDescriptor(Descriptor d) {
31         return (sd==d)||(rd==d);
32     }
33
34     public Set useDescriptor(Descriptor d) {
35         HashSet newset=new HashSet();
36         if ((d==sd)||(d==rd))
37             newset.add(this);
38         return newset;
39     }
40
41     public Descriptor getDescriptor() {
42         throw new Error("Sum shouldn't appear on left hand side!");
43     }
44
45     public boolean inverted() {
46         return false;
47     }
48
49     public Set getRequiredDescriptors() {
50         HashSet v=new HashSet();
51         v.add(sd);
52         v.add(rd);
53         return v;
54     }
55
56     public void generate(CodeWriter writer, VarDescriptor dest) {
57         throw new Error();
58     }
59
60     public void prettyPrint(PrettyPrinter pp) {
61         pp.output("sum(");
62         pp.output(sd.toString());
63         pp.output(".");
64         pp.output(rd.toString());
65         pp.output(")");
66     }
67
68     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
69         this.td = ReservedTypeDescriptor.INT;
70         return this.td;
71     }
72
73     public Set getInversedRelations() {
74         return new HashSet();
75     }
76
77 }