Skip to content

Commit 999ce2e

Browse files
authored
Fix BigInt loose equality (#1073)
1 parent 2d16a66 commit 999ce2e

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

Jint.Tests.Ecma/TestCases/alltests.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -10385,8 +10385,8 @@
1038510385
source: "ch11/11.4/11.4.1/11.4.1-5-a-27-s.js"
1038610386
},
1038710387
{
10388-
skip: false,
10389-
reason: "",
10388+
skip: true,
10389+
reason: "Spec has changed",
1039010390
source: "ch11/11.4/11.4.1/11.4.1-5-a-28-s.js"
1039110391
},
1039210392
{

Jint/Native/JsBigInt.cs

+21-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,27 @@ public override bool IsLooselyEqual(JsValue value)
7474
return Equals(bigInt);
7575
}
7676

77-
return value is JsNumber jsNumber && TypeConverter.IsIntegralNumber(jsNumber._value) && _value == new BigInteger(jsNumber._value)
78-
|| value is JsString jsString && TypeConverter.TryStringToBigInt(jsString.ToString(), out var temp) && temp == _value;
77+
if (value is JsNumber number && TypeConverter.IsIntegralNumber(number._value) && _value == new BigInteger(number._value))
78+
{
79+
return true;
80+
}
81+
82+
if (value is JsBoolean b)
83+
{
84+
return b._value && _value == BigInteger.One || !b._value && _value == BigInteger.Zero;
85+
}
86+
87+
if (value is JsString s && TypeConverter.TryStringToBigInt(s.ToString(), out var temp) && temp == _value)
88+
{
89+
return true;
90+
}
91+
92+
if (value.IsObject())
93+
{
94+
return IsLooselyEqual(TypeConverter.ToPrimitive(value, Types.Number));
95+
}
96+
97+
return false;
7998
}
8099

81100
public override bool Equals(object other)

Jint/Native/RegExp/RegExpConstructor.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal RegExpConstructor(
2424
{
2525
_prototype = functionPrototype;
2626
PrototypeObject = new RegExpPrototype(engine, realm, this, objectPrototype);
27-
_length = new PropertyDescriptor(2, PropertyFlag.AllForbidden);
27+
_length = new PropertyDescriptor(2, PropertyFlag.Configurable);
2828
_prototypeDescriptor= new PropertyDescriptor(PrototypeObject, PropertyFlag.AllForbidden);
2929
}
3030

0 commit comments

Comments
 (0)