fix(runtime): stringify BigInt elements in Array.prototype.join#4426
Merged
Conversation
8271159 to
77411a0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Array.prototype.joinnow stringifies BigInt elements correctly. A BigInt isNaN-boxed with
BIGINT_TAG(notPOINTER_TAG), so it bypassed the pointer arm injs_array_joinand fell through to the"[object Object]"catch-all. Added anis_bigint()arm that emitsToString(BigInt)— the plain decimal digits, nonsuffix.
This also fixes
Array.prototype.toString,String(array), and template-literalinterpolation of arrays, which all route through
join.Why
[10n].join()returned"[object Object]"instead of"10". Surfaced whilefixing
BigInt.asUintN/asIntNToBigInt coercion (sibling PR): test262built-ins/BigInt/{asIntN,asUintN}/bigint-tobigint.jsfeeds[10n]/["10"]through
ToBigInt(→array.toString()→ BigInt parse), which silently corrupted.Verification
Byte-identical to
node --experimental-strip-types, in bothPERRY_NO_AUTO_OPTIMIZE=1and the default (codegen
js_array_join_value) build:cargo test --release -p perry-runtime --libgreen."[object Object]"BigInt-element pathchanges; non-BigInt arrays are untouched.