diff --git a/js/public/Value.h b/js/public/Value.h index e21b104a80..30f4670049 100644 --- a/js/public/Value.h +++ b/js/public/Value.h @@ -1508,6 +1508,8 @@ DispatchTyped(F f, const JS::Value& val, Args&&... args) return f(&val.toObject(), mozilla::Forward(args)...); if (val.isSymbol()) return f(val.toSymbol(), mozilla::Forward(args)...); + if (val.isBigInt()) + return f(val.toBigInt(), mozilla::Forward(args)...); if (MOZ_UNLIKELY(val.isPrivateGCThing())) return DispatchTyped(f, val.toGCCellPtr(), mozilla::Forward(args)...); MOZ_ASSERT(!val.isGCThing()); diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index 61d77adc2e..0a87121c6e 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -8093,6 +8093,9 @@ ICTypeOf_Typed::Compiler::generateStubCode(MacroAssembler& masm) masm.branchTestSymbol(Assembler::NotEqual, R0, &failure); break; + case JSTYPE_BIGINT: + return false; + default: MOZ_CRASH("Unexpected type"); } diff --git a/js/src/vm/BigIntType.cpp b/js/src/vm/BigIntType.cpp index d32489a8f6..6beed9af11 100644 --- a/js/src/vm/BigIntType.cpp +++ b/js/src/vm/BigIntType.cpp @@ -1778,7 +1778,7 @@ BigInt* BigInt::mod(ExclusiveContext* cx, HandleBigInt x, HandleBigInt y) { return nullptr; } MOZ_ASSERT(remainder); - return remainder; + return destructivelyTrimHighZeroDigits(cx, remainder); } } @@ -2195,7 +2195,7 @@ uint64_t BigInt::toUint64(BigInt* x) { uint64_t digit = x->digit(0); - if (DigitBits == 32 && x->digitLength() >= 1) { + if (DigitBits == 32 && x->digitLength() > 1) { digit |= static_cast(x->digit(1)) << 32; }