2008-01-27 Jb Evain <jbevain@novell.com>
authorJb Evain <jbevain@gmail.com>
Sun, 27 Jan 2008 22:02:31 +0000 (22:02 -0000)
committerJb Evain <jbevain@gmail.com>
Sun, 27 Jan 2008 22:02:31 +0000 (22:02 -0000)
* ConditionalExpression.cs: implement Emit.

svn path=/trunk/mcs/; revision=94092

mcs/class/System.Core/System.Linq.Expressions/ChangeLog
mcs/class/System.Core/System.Linq.Expressions/ConditionalExpression.cs

index 34230c719672e835174a4b242cbf694d9ec489c5..002f67f65bcf2a6228ed029bc7c7bbaa5ecdf87a 100644 (file)
@@ -1,3 +1,7 @@
+2008-01-27  Jb Evain  <jbevain@novell.com>
+
+       * ConditionalExpression.cs: implement Emit.
+
 2008-01-27  Jb Evain  <jbevain@novell.com>
 
        * Expression.cs: implement the last Lambda method.
index cef0d91c20be4dd51a2bfaeccd79e925e293449d..ccd964d3e5b4ee464dbb6a0f8f5c70695828a100 100644 (file)
@@ -27,6 +27,7 @@
 //
 
 using System;
+using System.Reflection.Emit;
 
 namespace System.Linq.Expressions {
 
@@ -58,8 +59,20 @@ namespace System.Linq.Expressions {
 
                internal override void Emit (EmitContext ec)
                {
-                       throw new NotImplementedException ();
+                       var ig = ec.ig;
+                       var false_target = ig.DefineLabel ();
+                       var end_target = ig.DefineLabel ();
+
+                       test.Emit (ec);
+                       ig.Emit (OpCodes.Brfalse, false_target);
+
+                       ifTrue.Emit (ec);
+                       ig.Emit (OpCodes.Br, end_target);
+
+                       ig.MarkLabel (false_target);
+                       ifFalse.Emit (ec);
+
+                       ig.MarkLabel (end_target);
                }
-               
        }
 }