Author: marek
Date: 2008-01-22 16:47:06 -0500 (Tue, 22 Jan 2008)
New Revision: 93582
Modified:
trunk/mcs/mcs/ChangeLog
trunk/mcs/mcs/ecore.cs
trunk/mcs/mcs/expression.cs
trunk/mcs/mcs/generic.cs
Log:
2008-01-22 Marek Safar <[EMAIL PROTECTED]>
* ecore.cs, expression.cs, generic.cs: Implicit bool? to bool
conversion is
not allowed.
* generic.cs: Implemented coalesce expression.
Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog 2008-01-22 21:43:40 UTC (rev 93581)
+++ trunk/mcs/mcs/ChangeLog 2008-01-22 21:47:06 UTC (rev 93582)
@@ -1,5 +1,12 @@
2008-01-22 Marek Safar <[EMAIL PROTECTED]>
+ * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool
conversion is
+ not allowed.
+
+ * generic.cs: Implemented coalesce expression.
+
+2008-01-22 Marek Safar <[EMAIL PROTECTED]>
+
A fix for bug #355145
* anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
expression tree type inference.
Modified: trunk/mcs/mcs/ecore.cs
===================================================================
--- trunk/mcs/mcs/ecore.cs 2008-01-22 21:43:40 UTC (rev 93581)
+++ trunk/mcs/mcs/ecore.cs 2008-01-22 21:47:06 UTC (rev 93582)
@@ -914,12 +914,6 @@
static Expression GetOperatorTrueOrFalse (EmitContext ec,
Expression e, bool is_true, Location loc)
{
MethodGroupExpr operator_group;
-
-#if GMCS_SOURCE
- if (TypeManager.IsNullableType (e.Type))
- return new Nullable.OperatorTrueOrFalse (e,
is_true, loc).Resolve (ec);
-#endif
-
operator_group = MethodLookup (ec.ContainerType,
e.Type, is_true ? "op_True" : "op_False", loc) as MethodGroupExpr;
if (operator_group == null)
return null;
Modified: trunk/mcs/mcs/expression.cs
===================================================================
--- trunk/mcs/mcs/expression.cs 2008-01-22 21:43:40 UTC (rev 93581)
+++ trunk/mcs/mcs/expression.cs 2008-01-22 21:47:06 UTC (rev 93582)
@@ -3451,11 +3451,6 @@
if (expr == null)
return null;
-#if GMCS_SOURCE
- if (TypeManager.IsNullableValueType (expr.Type))
- return new Nullable.LiftedConditional (expr,
true_expr, false_expr, loc).Resolve (ec);
-#endif
-
if (expr.Type != TypeManager.bool_type){
expr = Expression.ResolveBoolean (
ec, expr, loc);
Modified: trunk/mcs/mcs/generic.cs
===================================================================
--- trunk/mcs/mcs/generic.cs 2008-01-22 21:43:40 UTC (rev 93581)
+++ trunk/mcs/mcs/generic.cs 2008-01-22 21:47:06 UTC (rev 93582)
@@ -3449,24 +3449,6 @@
}
}
- public class LiftedConditional : Lifted
- {
- Expression true_expr, false_expr;
-
- public LiftedConditional (Expression expr, Expression
true_expr, Expression false_expr,
- Location loc)
- : base (expr, loc)
- {
- this.true_expr = true_expr;
- this.false_expr = false_expr;
- }
-
- protected override Expression ResolveUnderlying
(Expression unwrap, EmitContext ec)
- {
- return new Conditional (unwrap, true_expr,
false_expr);
- }
- }
-
public class LiftedBinaryOperator : Binary
{
Expression underlying, null_value, bool_wrap;
@@ -3755,58 +3737,6 @@
}
}
- public class OperatorTrueOrFalse : Expression
- {
- public readonly bool IsTrue;
-
- Expression expr;
- Unwrap unwrap;
-
- public OperatorTrueOrFalse (Expression expr, bool
is_true, Location loc)
- {
- this.IsTrue = is_true;
- this.expr = expr;
- this.loc = loc;
- }
-
- public override Expression DoResolve (EmitContext ec)
- {
- unwrap = Unwrap.Create (expr, ec);
- if (unwrap == null)
- return null;
-
- if (unwrap.Type != TypeManager.bool_type)
- return null;
-
- type = TypeManager.bool_type;
- eclass = ExprClass.Value;
- return this;
- }
-
- public override void Emit (EmitContext ec)
- {
- ILGenerator ig = ec.ig;
-
- Label is_null_label = ig.DefineLabel ();
- Label end_label = ig.DefineLabel ();
-
- unwrap.EmitCheck (ec);
- ig.Emit (OpCodes.Brfalse, is_null_label);
-
- unwrap.Emit (ec);
- if (!IsTrue) {
- ig.Emit (OpCodes.Ldc_I4_0);
- ig.Emit (OpCodes.Ceq);
- }
- ig.Emit (OpCodes.Br, end_label);
-
- ig.MarkLabel (is_null_label);
- ig.Emit (OpCodes.Ldc_I4_0);
-
- ig.MarkLabel (end_label);
- }
- }
-
public class NullCoalescingOperator : Expression
{
Expression left, right;
@@ -3821,6 +3751,14 @@
eclass = ExprClass.Value;
}
+
+ public override Expression CreateExpressionTree
(EmitContext ec)
+ {
+ ArrayList args = new ArrayList (2);
+ args.Add (new Argument
(left.CreateExpressionTree (ec)));
+ args.Add (new Argument
(right.CreateExpressionTree (ec)));
+ return CreateExpressionFactoryCall ("Coalesce",
args);
+ }
public override Expression DoResolve (EmitContext ec)
{
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches