public boolean equals(Object o) { // Note that equals method of this class *can* be sloppy, // since this class does not have a pattern as its child. // Therefore datatype vocaburary does not necessarily provide // strict equals method. if (o.getClass() != this.getClass()) return false; ValueExp rhs = (ValueExp) o; if (!rhs.dt.equals(dt)) return false; return dt.sameValue(value, rhs.value); }