return c.addBinding(trans(s), trans(left));
return c.addBinding( (C_Var) trans(s), (C_Var) trans(left));
	public Constraint constraint(Binary term, Constraint c) throws SemanticException {		// Report.report(1, "TypeTranslator: translating to constraint " + term);		String op = term.operator().toString();		Expr left = term.left();		Expr right = term.right();		//Report.report(1, "TypeTranslator: translating to constraint left=|" + left 		//		+ "| op=|" + op + "| right=|" + right + "|");		if (op.equals("==")) {			if (left instanceof Variable) {				//Report.report(1, "TypeTranslator: translating to constraint left=|" + left 				//		+ "| is a variable.");				return c.addBinding(trans((Variable) left), trans(right));			}			if (left instanceof X10Special) {				X10Special s = (X10Special) left;				if (! s.kind().toString().equals("self"))					throw new SemanticException("Cannot constrain this.");				return c.addBinding(trans(s), trans(right));			}			if (right instanceof Variable) 				return c.addBinding(trans((Variable) right), trans(left));					if (right instanceof X10Special) {				X10Special s = (X10Special) right;				if (! s.kind().toString().equals("self"))					throw new SemanticException("Cannot constrain this.");				return c.addBinding(trans(s), trans(left));			}		}		if (op.equals("&&")) {			c = constraint(left, c);			c = constraint(right, c);			return c;		}		throw new SemanticException("Cannot translate term |" + term + "| into a constraint." +				"It must be a conjunction of equalities.");				}