+2010-06-16 Marek Safar <marek.safar@gmail.com>
+
+ * expression.cs, statement.cs: Always persist explicit cast
+ semantic at expression level.
+
2010-06-15 Marek Safar <marek.safar@gmail.com>
* expression.cs, attribute.cs: Enable generic type parameters
}
}
- /// <summary>
- /// This represents a typecast in the source language.
- ///
- /// FIXME: Cast expressions have an unusual set of parsing
- /// rules, we need to figure those out.
- /// </summary>
+ //
+ // This represents a typecast in the source language.
+ //
public class Cast : ShimExpression {
Expression target_type;
-
- public Cast (Expression cast_type, Expression expr)
- : this (cast_type, expr, cast_type.Location)
- {
- }
public Cast (Expression cast_type, Expression expr, Location loc)
: base (expr)
return new DynamicConversion (type, CSharpBinderFlags.ConvertExplicit, arg, loc).Resolve (ec);
}
- expr = Convert.ExplicitConversion (ec, expr, type, loc);
- return expr;
+ var res = Convert.ExplicitConversion (ec, expr, type, loc);
+ if (res == expr)
+ return EmptyCast.Create (res, type);
+
+ return res;
}
protected override void CloneTo (CloneContext clonectx, Expression t)
var dispose_mg = new MethodGroupExpr (TypeManager.void_dispose_void, TypeManager.idisposable_type, loc) {
InstanceExpression = TypeManager.IsNullableType (expr_type) ?
- new Cast (new TypeExpression (TypeManager.idisposable_type, loc), local_copy).Resolve (ec) :
+ new Cast (new TypeExpression (TypeManager.idisposable_type, loc), local_copy, loc).Resolve (ec) :
local_copy
};