5 public class ElementOfExpr extends Expr {
10 public ElementOfExpr(Expr element, SetDescriptor set) {
11 if (element == null || set == null) {
12 throw new NullPointerException();
14 this.element = element;
17 public boolean usesDescriptor(Descriptor d) {
20 return element.usesDescriptor(d);
22 public String name() {
23 return element.name()+" in "+set.toString();
26 public boolean equals(Map remap, Expr e) {
27 if (e==null||!(e instanceof ElementOfExpr))
29 ElementOfExpr eoe=(ElementOfExpr)e;
32 if (!element.equals(remap,eoe.element))
37 public Set getRequiredDescriptors() {
38 Set v = element.getRequiredDescriptors();
43 public void generate(CodeWriter writer, VarDescriptor dest) {
44 VarDescriptor ed = VarDescriptor.makeNew("element");
45 element.generate(writer, ed);
46 writer.outputline("int " + dest.getSafeSymbol() + " = " +
47 set.getSafeSymbol() + "_hash->contains(" + ed.getSafeSymbol() + ");");
50 public void prettyPrint(PrettyPrinter pp) {
51 element.prettyPrint(pp);
52 pp.output(" in? " + set.getSafeSymbol());
55 public TypeDescriptor typecheck(SemanticAnalyzer sa) {
56 TypeDescriptor td = element.typecheck(sa);
62 TypeDescriptor settype = set.getType();
64 if (!td.equals(settype)) {
65 sa.getErrorReporter().report(null, "Type mismatch: attempting to test for types '" + td.getSymbol() + "' in set of type '" + settype.getSymbol() + "'");
69 this.td = ReservedTypeDescriptor.INT;