package x10.types.constraints.xnative; import java.util.Collections; import java.util.List; import polyglot.ast.Typed; import polyglot.types.Type; import x10.constraint.XEQV; import x10.constraint.XTerm; import x10.constraint.XVar; import x10.constraint.xnative.XNativeTerm; import x10.constraint.xnative.XNativeVar; import x10.constraint.xnative.XRoot; import x10.types.constraints.CThis; /** * An optimized representation of this variables. * Keeps an int index and a type. Equality involves only * int equality. * * <p>Code is essentially a copy of CSelf. Do not want to * combine, for that will mean extra state needs to be kept * with each object. * @author vj * */ public class CNativeThis extends XRoot implements CThis, Typed { private static final long serialVersionUID = -2033423584924662939L; public static final String THIS_VAR_PREFIX="this"; public final int num; //CHECK: The outer qualifier information is now carried in an // enclosing QualifiedVar. public final Type type; public CNativeThis(int n, Type type) { this.num = n; this.type = type; } @Override public int hashCode() {return num;} /** * Return the type of this. * Note: A Qualified this, A.this, is represented as a CThis (this) wrapped inside * a QualifiedVar (with qualifier A). A.this's type is the type of the QualifiedVar, * namely, A. */ public Type type() {return type;} public XNativeTerm subst(XTerm y, XVar x) { XNativeTerm r = super.subst(y, x); return r; } public boolean okAsNestedTerm() {return true;} public boolean hasVar(XVar v) {return equals(v);} public boolean equals(Object o) { if (this == o) return true; if (o instanceof CNativeThis) return num == ((CNativeThis) o).num; return false; } @Override public String toString() { return THIS_VAR_PREFIX + (type != null ? "(:" + type + ")" : ""); } }