final Type srcType = expr.getType();
if(TypeUtil.subtypeOf(srcType, destType)) {
return expr;
} else {
if(TypeUtil.isPromotable(srcType, destType)) {
return new TypePromotedExpr(expr, destType, true);
} else {
throw new TypeError("err:XPTY0004", "Declared type '" + destType
+ "' does not accept inferred type '" + srcType + "': \n" + expr);
}
}