Browse Source

Fixing Conditional operator

Sebastien Ros 12 years ago
parent
commit
220c50ba19
2 changed files with 12 additions and 4 deletions
  1. 1 0
      Jint.Tests.Ecma/Ecma/11.12.cs
  2. 11 4
      Jint/Runtime/ExpressionIntepreter.cs

+ 1 - 0
Jint.Tests.Ecma/Ecma/11.12.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 
 namespace Jint.Tests.Ecma
 namespace Jint.Tests.Ecma
 {
 {
+    [Trait("Category","Pass")]
     public class Test_11_12 : EcmaTest
     public class Test_11_12 : EcmaTest
     {
     {
         [Fact]
         [Fact]

+ 11 - 4
Jint/Runtime/ExpressionIntepreter.cs

@@ -27,10 +27,17 @@ namespace Jint.Runtime
 
 
         public object EvaluateConditionalExpression(ConditionalExpression conditionalExpression)
         public object EvaluateConditionalExpression(ConditionalExpression conditionalExpression)
         {
         {
-            var test = _engine.EvaluateExpression(conditionalExpression.Test);
-            var evaluate = TypeConverter.ToBoolean(test) ? conditionalExpression.Consequent : conditionalExpression.Alternate;
-            
-            return _engine.EvaluateExpression(evaluate);
+            var lref = _engine.EvaluateExpression(conditionalExpression.Test);
+            if (TypeConverter.ToBoolean(_engine.GetValue(lref)))
+            {
+                var trueRef = _engine.EvaluateExpression(conditionalExpression.Consequent);
+                return _engine.GetValue(trueRef);
+            }
+            else
+            {
+                var falseRef = _engine.EvaluateExpression(conditionalExpression.Alternate);
+                return _engine.GetValue(falseRef);
+            }
         }
         }
 
 
         public object EvaluateAssignmentExpression(AssignmentExpression assignmentExpression)
         public object EvaluateAssignmentExpression(AssignmentExpression assignmentExpression)