One minor related thing I noticed --- the comment for v8::Value::ToBigInt seem off:
/**
* Perform the equivalent of `BigInt(value)` in JS.
*/
V8_WARN_UNUSED_RESULT MaybeLocal<BigInt> ToBigInt
I think it actually implements the ToBigInt operation (which is what I would expect from the name), not what the BigInt function does --- in particular it rejects numbers, as ToBigInt is written to do, rather than accept some of them as BigInt does.
e.g. :
-> BigInt(12)
<- 12n
vs.
-> a = new BigInt64Array();
<- BigInt64Array [buffer: ArrayBuffer(0), byteLength: 0, byteOffset: 0, length: 0, Symbol(Symbol.toStringTag): 'BigInt64Array']
-> a.fill(12)
<- VM206:1 Uncaught TypeError: Cannot convert 12 to a BigInt
at BigInt64Array.fill (<anonymous>)
at <anonymous>:1:3