2004-04-18 Cesar Lopez Nataren <cesar@ciencias.unam.mx>
authorCésar Natarén <cesar@mono-cvs.ximian.com>
Sun, 18 Apr 2004 07:23:06 +0000 (07:23 -0000)
committerCésar Natarén <cesar@mono-cvs.ximian.com>
Sun, 18 Apr 2004 07:23:06 +0000 (07:23 -0000)
* expression.cs: added code generation for 'x1 ? x2 :x3' op.

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

mcs/class/Microsoft.JScript/Microsoft.JScript/ChangeLog
mcs/class/Microsoft.JScript/Microsoft.JScript/expression.cs

index e1ed0bc58784d7c965ea960bcf7a7620b0ae8e0b..9ba3c8ef6764e624c674d6ee533c9a329a45eed7 100644 (file)
@@ -1,5 +1,6 @@
 2004-04-18  Cesar Lopez Nataren  <cesar@ciencias.unam.mx>
 
+       * expression.cs: added code generation for 'x1 ? x2 :x3' op.
        * Statement.cs: Added code generation for while and do-while.
 
 2004-04-17  Cesar Lopez Nataren  <cesar@ciencias.unam.mx>
index 2066c2e68dc8be2368d659cb407602bf7a75d10b..b5d0321e3ea8e92e9a028642f21e0eaadc919ebc 100755 (executable)
@@ -265,12 +265,24 @@ namespace Microsoft.JScript {
                internal override bool Resolve (IdentificationTable context, bool no_effect)
                {
                        this.no_effect = no_effect;
-                       return true;
+                       return Resolve (context);
                }
 
                internal override void Emit (EmitContext ec)
                {
-                       throw new NotImplementedException ();
+                       ILGenerator ig = ec.ig;
+                       Label false_label = ig.DefineLabel ();
+                       Label merge_label = ig.DefineLabel ();
+                       CodeGenerator.fall_true (ec, cond_exp, false_label);
+                       if (true_exp != null)
+                               true_exp.Emit (ec);
+                       ig.Emit (OpCodes.Br, merge_label);
+                       ig.MarkLabel (false_label);
+                       if (false_exp != null)
+                               false_exp.Emit (ec);
+                       ig.MarkLabel (merge_label);
+                       if (no_effect)
+                               ig.Emit (OpCodes.Pop);
                }
        }