Explorar el Código

Fixing Conditional operator

Sebastien Ros hace 12 años
padre
commit
220c50ba19
Se han modificado 2 ficheros con 12 adiciones y 4 borrados
  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
 {
+    [Trait("Category","Pass")]
     public class Test_11_12 : EcmaTest
     {
         [Fact]

+ 11 - 4
Jint/Runtime/ExpressionIntepreter.cs

@@ -27,10 +27,17 @@ namespace Jint.Runtime
 
         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)