From 9498e6b8e380f67d47bc84c0e268a0ef930c41a9 Mon Sep 17 00:00:00 2001 From: nilproject Date: Wed, 9 May 2018 14:33:56 +0300 Subject: [PATCH] Fix #138 --- IntegrationTests/Expressions/EqualTests.cs | 24 ++++++++++++++++++++++ NiL.JS/BaseLibrary/Number.cs | 1 + NiL.JS/Core/JSValue.cs | 4 ---- NiL.JS/Expressions/Addition.cs | 3 +++ NiL.JS/Expressions/Decrement.cs | 1 + NiL.JS/Expressions/Equal.cs | 1 + NiL.JS/Expressions/Increment.cs | 1 + NiL.JS/Expressions/More.cs | 1 + 8 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 IntegrationTests/Expressions/EqualTests.cs diff --git a/IntegrationTests/Expressions/EqualTests.cs b/IntegrationTests/Expressions/EqualTests.cs new file mode 100644 index 000000000..9fcbffad8 --- /dev/null +++ b/IntegrationTests/Expressions/EqualTests.cs @@ -0,0 +1,24 @@ +using System; +using System.Linq; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using NiL.JS.BaseLibrary; +using NiL.JS.Core; + +namespace IntegrationTests.Expressions +{ + [TestClass] + public class EqualTests + { + [TestMethod] + public void ComparisonWithNotExistsShouldWorkProperly() + { + Action f = () => { }; + var context = new Context(); + context.DefineVariable("test").Assign(f); + + var result = context.Eval("test() == 'hi there'"); + + Assert.IsFalse((bool)result); + } + } +} \ No newline at end of file diff --git a/NiL.JS/BaseLibrary/Number.cs b/NiL.JS/BaseLibrary/Number.cs index 7d1bb47c5..7c836c290 100644 --- a/NiL.JS/BaseLibrary/Number.cs +++ b/NiL.JS/BaseLibrary/Number.cs @@ -263,6 +263,7 @@ public static JSValue toString(JSValue self, Arguments radix) break; } case JSValueType.NotExistsInObject: + case JSValueType.NotExists: case JSValueType.Undefined: { r = 10; diff --git a/NiL.JS/Core/JSValue.cs b/NiL.JS/Core/JSValue.cs index efb74d16d..db9384dcc 100644 --- a/NiL.JS/Core/JSValue.cs +++ b/NiL.JS/Core/JSValue.cs @@ -233,8 +233,6 @@ public virtual object Value return (_oValue as JSObject).Value; return _oValue; } - case JSValueType.Undefined: - case JSValueType.NotExistsInObject: default: return null; } @@ -271,8 +269,6 @@ protected set _oValue = value; break; } - case JSValueType.Undefined: - case JSValueType.NotExistsInObject: default: throw new InvalidOperationException(); } diff --git a/NiL.JS/Expressions/Addition.cs b/NiL.JS/Expressions/Addition.cs index f059e3edf..aa9dcc1c8 100644 --- a/NiL.JS/Expressions/Addition.cs +++ b/NiL.JS/Expressions/Addition.cs @@ -209,6 +209,7 @@ internal static void Impl(JSValue resultContainer, JSValue first, JSValue second } case JSValueType.Undefined: case JSValueType.NotExistsInObject: + case JSValueType.NotExists: { tstr = new RopeString(tstr, "undefined"); break; @@ -237,6 +238,7 @@ internal static void Impl(JSValue resultContainer, JSValue first, JSValue second return; } case JSValueType.NotExistsInObject: + case JSValueType.NotExists: case JSValueType.Undefined: { if (second._valueType >= JSValueType.Object) @@ -259,6 +261,7 @@ internal static void Impl(JSValue resultContainer, JSValue first, JSValue second } case JSValueType.Object: // undefined+null case JSValueType.NotExistsInObject: + case JSValueType.NotExists: case JSValueType.Undefined: { resultContainer._valueType = JSValueType.Double; diff --git a/NiL.JS/Expressions/Decrement.cs b/NiL.JS/Expressions/Decrement.cs index 07ed0d7c2..30f701d16 100644 --- a/NiL.JS/Expressions/Decrement.cs +++ b/NiL.JS/Expressions/Decrement.cs @@ -179,6 +179,7 @@ public override JSValue Evaluate(Context context) } case JSValueType.Undefined: case JSValueType.NotExistsInObject: + case JSValueType.NotExists: { val._valueType = JSValueType.Double; val._dValue = double.NaN; diff --git a/NiL.JS/Expressions/Equal.cs b/NiL.JS/Expressions/Equal.cs index 966ce6bf3..d4dd7bd64 100644 --- a/NiL.JS/Expressions/Equal.cs +++ b/NiL.JS/Expressions/Equal.cs @@ -254,6 +254,7 @@ public override JSValue Evaluate(Context context) } case JSValueType.Undefined: case JSValueType.NotExistsInObject: + case JSValueType.NotExists: { temp = _right.Evaluate(context); switch (temp._valueType) diff --git a/NiL.JS/Expressions/Increment.cs b/NiL.JS/Expressions/Increment.cs index a642a0c0b..139ad17d9 100644 --- a/NiL.JS/Expressions/Increment.cs +++ b/NiL.JS/Expressions/Increment.cs @@ -177,6 +177,7 @@ public override JSValue Evaluate(Context context) } case JSValueType.Undefined: case JSValueType.NotExistsInObject: + case JSValueType.NotExists: { val._valueType = JSValueType.Double; val._dValue = double.NaN; diff --git a/NiL.JS/Expressions/More.cs b/NiL.JS/Expressions/More.cs index 1c55984c5..3e700b775 100644 --- a/NiL.JS/Expressions/More.cs +++ b/NiL.JS/Expressions/More.cs @@ -109,6 +109,7 @@ internal static bool Check(JSValue first, JSValue second, bool lessOrEqual) } case JSValueType.Undefined: case JSValueType.NotExistsInObject: + case JSValueType.NotExists: { return lessOrEqual; }