From: Jb Evain Date: Sun, 27 Jan 2008 22:02:31 +0000 (-0000) Subject: 2008-01-27 Jb Evain X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=3eaa62782b34344755b3964a1177f495be8a9451;p=mono.git 2008-01-27 Jb Evain * ConditionalExpression.cs: implement Emit. svn path=/trunk/mcs/; revision=94092 --- diff --git a/mcs/class/System.Core/System.Linq.Expressions/ChangeLog b/mcs/class/System.Core/System.Linq.Expressions/ChangeLog index 34230c71967..002f67f65bc 100644 --- a/mcs/class/System.Core/System.Linq.Expressions/ChangeLog +++ b/mcs/class/System.Core/System.Linq.Expressions/ChangeLog @@ -1,3 +1,7 @@ +2008-01-27 Jb Evain + + * ConditionalExpression.cs: implement Emit. + 2008-01-27 Jb Evain * Expression.cs: implement the last Lambda method. diff --git a/mcs/class/System.Core/System.Linq.Expressions/ConditionalExpression.cs b/mcs/class/System.Core/System.Linq.Expressions/ConditionalExpression.cs index cef0d91c20b..ccd964d3e5b 100644 --- a/mcs/class/System.Core/System.Linq.Expressions/ConditionalExpression.cs +++ b/mcs/class/System.Core/System.Linq.Expressions/ConditionalExpression.cs @@ -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); } - } }