|
@@ -6,6 +6,7 @@ using Jint.Native.Number;
|
|
|
using Jint.Parser.Ast;
|
|
|
using Jint.Runtime.Descriptors;
|
|
|
using Jint.Runtime.Environments;
|
|
|
+using Jint.Runtime.Interop;
|
|
|
using Jint.Runtime.References;
|
|
|
|
|
|
namespace Jint.Runtime
|
|
@@ -381,40 +382,7 @@ namespace Jint.Runtime
|
|
|
|
|
|
if (typex == typey)
|
|
|
{
|
|
|
- if (typex == Types.Undefined || typex == Types.Null)
|
|
|
- {
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- if (typex == Types.Number)
|
|
|
- {
|
|
|
- var nx = TypeConverter.ToNumber(x);
|
|
|
- var ny = TypeConverter.ToNumber(y);
|
|
|
-
|
|
|
- if (double.IsNaN(nx) || double.IsNaN(ny))
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- if (nx.Equals(ny))
|
|
|
- {
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- if (typex == Types.String)
|
|
|
- {
|
|
|
- return TypeConverter.ToString(x) == TypeConverter.ToString(y);
|
|
|
- }
|
|
|
-
|
|
|
- if (typex == Types.Boolean)
|
|
|
- {
|
|
|
- return x.AsBoolean() == y.AsBoolean();
|
|
|
- }
|
|
|
-
|
|
|
- return x == y;
|
|
|
+ return StrictlyEqual(x, y);
|
|
|
}
|
|
|
|
|
|
if (x == Null.Instance && y == Undefined.Instance)
|
|
@@ -479,10 +447,11 @@ namespace Jint.Runtime
|
|
|
{
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
if (typea == Types.Number)
|
|
|
{
|
|
|
- var nx = TypeConverter.ToNumber(x);
|
|
|
- var ny = TypeConverter.ToNumber(y);
|
|
|
+ var nx = x.AsNumber();
|
|
|
+ var ny = y.AsNumber();
|
|
|
|
|
|
if (double.IsNaN(nx) || double.IsNaN(ny))
|
|
|
{
|
|
@@ -496,14 +465,28 @@ namespace Jint.Runtime
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
if (typea == Types.String)
|
|
|
{
|
|
|
- return TypeConverter.ToString(x) == TypeConverter.ToString(y);
|
|
|
+ return x.AsString() == y.AsString();
|
|
|
}
|
|
|
+
|
|
|
if (typea == Types.Boolean)
|
|
|
{
|
|
|
- return TypeConverter.ToBoolean(x) == TypeConverter.ToBoolean(y);
|
|
|
+ return x.AsBoolean() == y.AsBoolean();
|
|
|
}
|
|
|
+
|
|
|
+ if (typea == Types.Object)
|
|
|
+ {
|
|
|
+ var xw = x.AsObject() as IObjectWrapper;
|
|
|
+
|
|
|
+ if (xw != null)
|
|
|
+ {
|
|
|
+ var yw = y.AsObject() as IObjectWrapper;
|
|
|
+ return Object.Equals(xw.Target, yw.Target);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return x == y;
|
|
|
}
|
|
|
|