Skip to content

Define prototype.constructor on native Error hierarchy#565

Merged
frostney merged 5 commits into
mainfrom
issue-519-error-prototype-constructor
May 7, 2026
Merged

Define prototype.constructor on native Error hierarchy#565
frostney merged 5 commits into
mainfrom
issue-519-error-prototype-constructor

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented May 7, 2026

Summary

  • Add missing prototype.constructor property to all nine native error prototypes (Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, AggregateError, SuppressedError, DOMException) during realm initialization
  • Add test file covering identity checks, property descriptors, prototype chain resolution, and caught.constructor.name usage via test.each
  • Document the constructor property in the error section of built-ins.md

Closes #519

Testing

  • Verified no regressions and confirmed the new feature or bugfix in end-to-end JavaScript/TypeScript tests
  • Updated documentation
  • Optional: Verified no regressions and confirmed the new feature or bugfix in native Pascal tests (if AST, scope, evaluator, or value types changed)

Details:

  • New test file tests/built-ins/Error/error-prototype-constructor.js — 12 tests, 42 assertions, all pass
  • Full tests/built-ins/Error/ suite — 136/136 pass (no regressions)
  • Full test suite — 8829/8834 pass (5 pre-existing FFI fixture failures, unrelated)
  • Format check and doc hooks pass

🤖 Generated with Claude Code

frostney and others added 2 commits May 7, 2026 17:31
Error.prototype.constructor (and the same slot on every NativeError
subclass) was never written during realm initialisation, so
`new TypeError("x").constructor` resolved to `undefined` instead of
`TypeError`.  This broke any code that reads `error.constructor.name`
— including the stock test262 `assert.throws` harness.

Add the nine missing DefineProperty calls (Error, TypeError,
RangeError, ReferenceError, SyntaxError, URIError, AggregateError,
SuppressedError, DOMException) right after the existing
Constructor.prototype assignments, matching the descriptor flags
({writable, configurable}) used by every other built-in.

Closes #519

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 7, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
gocciascript-homepage Ignored Ignored Preview May 7, 2026 4:49pm

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 7, 2026

Review Change Stack
No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 78174795-14d1-4d32-9110-c617c3412f14

📥 Commits

Reviewing files that changed from the base of the PR and between c6b8b2b and fc637a8.

📒 Files selected for processing (1)
  • tests/built-ins/Error/error-prototype-constructor.js
✅ Files skipped from review due to trivial changes (1)
  • tests/built-ins/Error/error-prototype-constructor.js

📝 Walkthrough

Walkthrough

Native error prototypes (Error, TypeError, RangeError, etc.) now define a constructor property pointing to their corresponding constructor function. The change adds the property during global realm initialization with writable/configurable descriptors, updates docs, and adds tests that verify behavior and descriptors.

Changes

Error Prototype Constructor Property

Layer / File(s) Summary
Specification and Contract
docs/built-ins.md
Error constructor prototype chain behavior is expanded to cover prototype.constructor identity, constructor.name consistency for instances, and explicit instanceof relationships across error types.
Core Implementation
source/units/Goccia.Builtins.Globals.pas
TGocciaGlobals.Create adds a constructor property to each native error prototype (Error, TypeError, ReferenceError, RangeError, SyntaxError, URIError, AggregateError, SuppressedError, DOMException) with configurable and writable descriptors, then creates global lexical bindings.
Tests and Validation
tests/built-ins/Error/error-prototype-constructor.js
New test suite verifies prototype.constructor points to the correct constructor for Error and subclasses, validates descriptor shapes, confirms instance .constructor resolution through the prototype chain, ensures .constructor is not an own property on instances, and checks .constructor.name on a caught TypeError.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • frostney/GocciaScript#556: Modifies error constructor/prototype wiring in source/units/Goccia.Builtins.Globals.pas — related implementation work.
  • frostney/GocciaScript#557: Touches Error prototype initialization in the same unit (adds Error.prototype.toString) — related setup changes.
  • frostney/GocciaScript#23: Earlier changes to error construction and docs that touch the same error-construction/prototype wiring.

Suggested labels

spec compliance, bug, documentation

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title directly and clearly describes the main change: adding the missing prototype.constructor property to all native Error classes.
Description check ✅ Passed The description fully covers the summary, testing details with checkmarks, issue closure, and implementation details. All template sections are complete and properly filled out.
Linked Issues check ✅ Passed The PR completely addresses #519: defines prototype.constructor on all nine native Error prototypes, adds comprehensive tests validating identity/descriptors/inheritance, documents the change, and verifies no regressions.
Out of Scope Changes check ✅ Passed All changes are directly in scope: defining prototype.constructor on native errors, adding tests, and updating documentation. No unrelated modifications are present.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot added bug Something isn't working documentation Improvements or additions to documentation spec compliance Mismatch against official JavaScript/TypeScript specification labels May 7, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/built-ins/Error/error-prototype-constructor.js`:
- Around line 30-48: The tests currently assert constructor descriptors for
native errors but omit SuppressedError and DOMException; update the test
"NativeError.prototype.constructor descriptors..." to include SuppressedError
and DOMException by adding them to the types array (i.e., const types =
[TypeError, RangeError, ReferenceError, SyntaxError, URIError, AggregateError,
SuppressedError, DOMException]) so their prototype "constructor" property is
also checked for {writable: true, configurable: true, enumerable: false} using
the existing Object.getOwnPropertyDescriptor/assertions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a70bc1d-83aa-45cd-a7de-63f5f4490d09

📥 Commits

Reviewing files that changed from the base of the PR and between 01551c8 and 64cf4b7.

📒 Files selected for processing (3)
  • docs/built-ins.md
  • source/units/Goccia.Builtins.Globals.pas
  • tests/built-ins/Error/error-prototype-constructor.js

Comment thread tests/built-ins/Error/error-prototype-constructor.js Outdated
frostney and others added 3 commits May 7, 2026 17:36
…nstructor

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

Suite Timing

Test Runner (interpreted: 8,869 passed; bytecode: 8,869 passed)
Metric Interpreted Bytecode
Total 8869 8869
Passed 8869 ✅ 8869 ✅
Workers 4 4
Test Duration 2.00s 1.90s
Lex (cumulative) 249.8ms 156.6ms
Parse (cumulative) 271.5ms 245.9ms
Compile (cumulative) 513.5ms
Execute (cumulative) 2.04s 1.81s
Engine Total (cumulative) 2.56s 2.73s
Lex (avg/worker) 62.4ms 39.2ms
Parse (avg/worker) 67.9ms 61.5ms
Compile (avg/worker) 128.4ms
Execute (avg/worker) 510.3ms 453.3ms
Engine Total (avg/worker) 640.6ms 682.3ms

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Test runner worker shutdown frees thread-local heaps in bulk; that shutdown reclamation is not counted as GC collections or collected objects.

Metric Interpreted Bytecode
GC Live 214.72 MiB 209.32 MiB
GC Peak Live 214.72 MiB 209.33 MiB
GC Allocated During Run 218.51 MiB 213.10 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1 1
GC Collected Objects 74 74
Heap Start Allocated 145.2 KiB 145.2 KiB
Heap End Allocated 1.37 MiB 1.37 MiB
Heap Delta Allocated 1.23 MiB 1.23 MiB
Heap Delta Free 469.4 KiB 469.4 KiB
Benchmarks (interpreted: 407; bytecode: 407)
Metric Interpreted Bytecode
Total 407 407
Workers 4 4
Duration 2.60min 2.31min

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Benchmark runner performs explicit between-file collections, so collection and collected-object counts can be much higher than the test runner.

Metric Interpreted Bytecode
GC Live 3.23 MiB 3.23 MiB
GC Peak Live 108.60 MiB 68.89 MiB
GC Allocated During Run 15.85 GiB 9.50 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 2,832 2,638
GC Collected Objects 297,338,440 227,266,474
Heap Start Allocated 1.13 MiB 1.13 MiB
Heap End Allocated 1.13 MiB 1.13 MiB
Heap Delta Allocated 128 B 128 B

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

Benchmark Results

407 benchmarks

Interpreted: 🟢 349 improved · 🔴 16 regressed · 42 unchanged · avg +8.2%
Bytecode: 🟢 13 improved · 🔴 328 regressed · 66 unchanged · avg -7.2%

arraybuffer.js — Interp: 🟢 10, 🔴 1, 3 unch. · avg +8.2% · Bytecode: 🔴 12, 2 unch. · avg -9.1%
Benchmark Interpreted Δ Bytecode Δ
create ArrayBuffer(0) 153,598 ops/sec [150,431..159,355] → 177,226 ops/sec [169,681..178,790] 🟢 +15.4% 222,219 ops/sec [214,018..223,180] → 198,517 ops/sec [166,630..200,931] 🔴 -10.7%
create ArrayBuffer(64) 152,955 ops/sec [149,940..154,288] → 166,888 ops/sec [114,905..171,265] ~ overlap (+9.1%) 209,141 ops/sec [163,911..212,253] → 188,985 ops/sec [184,939..190,920] ~ overlap (-9.6%)
create ArrayBuffer(1024) 131,750 ops/sec [130,711..135,498] → 145,686 ops/sec [144,399..147,089] 🟢 +10.6% 171,679 ops/sec [170,282..173,750] → 161,871 ops/sec [159,152..164,437] 🔴 -5.7%
create ArrayBuffer(8192) 78,187 ops/sec [76,756..79,210] → 75,602 ops/sec [73,622..76,482] 🔴 -3.3% 84,081 ops/sec [81,152..85,654] → 71,208 ops/sec [67,444..88,058] ~ overlap (-15.3%)
slice full buffer (64 bytes) 180,000 ops/sec [179,944..180,287] → 203,804 ops/sec [202,842..205,781] 🟢 +13.2% 267,577 ops/sec [266,924..269,190] → 240,764 ops/sec [239,344..242,003] 🔴 -10.0%
slice half buffer (512 of 1024 bytes) 162,394 ops/sec [159,153..164,139] → 177,633 ops/sec [175,541..180,749] 🟢 +9.4% 230,587 ops/sec [228,768..233,804] → 216,523 ops/sec [179,564..221,989] 🔴 -6.1%
slice with negative indices 152,042 ops/sec [148,496..152,571] → 167,035 ops/sec [165,286..169,632] 🟢 +9.9% 244,365 ops/sec [243,478..244,830] → 227,419 ops/sec [223,573..228,378] 🔴 -6.9%
slice empty range 177,220 ops/sec [173,572..178,410] → 190,793 ops/sec [188,218..193,698] 🟢 +7.7% 255,688 ops/sec [252,257..257,888] → 236,194 ops/sec [235,367..236,943] 🔴 -7.6%
byteLength access 400,136 ops/sec [399,615..413,576] → 424,635 ops/sec [420,802..443,219] 🟢 +6.1% 534,702 ops/sec [523,761..548,603] → 495,923 ops/sec [488,908..496,831] 🔴 -7.3%
Symbol.toStringTag access 334,724 ops/sec [329,637..349,316] → 342,668 ops/sec [338,787..348,082] ~ overlap (+2.4%) 382,722 ops/sec [374,167..389,451] → 347,164 ops/sec [346,514..349,133] 🔴 -9.3%
ArrayBuffer.isView 244,869 ops/sec [241,642..246,810] → 267,017 ops/sec [262,632..269,348] 🟢 +9.0% 345,605 ops/sec [335,223..354,655] → 307,166 ops/sec [305,763..312,881] 🔴 -11.1%
clone ArrayBuffer(64) 163,932 ops/sec [163,339..164,885] → 180,087 ops/sec [175,407..180,573] 🟢 +9.9% 239,268 ops/sec [236,330..240,416] → 214,917 ops/sec [209,129..215,887] 🔴 -10.2%
clone ArrayBuffer(1024) 141,788 ops/sec [140,981..143,842] → 150,953 ops/sec [146,994..153,965] 🟢 +6.5% 190,097 ops/sec [189,117..190,419] → 175,131 ops/sec [171,317..177,626] 🔴 -7.9%
clone ArrayBuffer inside object 115,712 ops/sec [114,384..117,271] → 125,484 ops/sec [104,032..127,035] ~ overlap (+8.4%) 152,263 ops/sec [150,599..153,279] → 138,525 ops/sec [137,221..139,147] 🔴 -9.0%
arrays.js — Interp: 🟢 18, 1 unch. · avg +9.9% · Bytecode: 🔴 17, 2 unch. · avg -9.6%
Benchmark Interpreted Δ Bytecode Δ
Array.from length 100 3,745 ops/sec [2,897..3,787] → 4,258 ops/sec [4,150..4,290] 🟢 +13.7% 6,974 ops/sec [6,262..7,052] → 6,205 ops/sec [5,375..6,313] ~ overlap (-11.0%)
Array.from 10 elements 87,774 ops/sec [87,290..87,872] → 96,636 ops/sec [95,902..97,416] 🟢 +10.1% 103,763 ops/sec [83,721..104,537] → 91,726 ops/sec [88,497..94,727] ~ overlap (-11.6%)
Array.of 10 elements 105,899 ops/sec [103,474..106,817] → 120,395 ops/sec [118,570..120,758] 🟢 +13.7% 128,616 ops/sec [128,070..128,837] → 117,684 ops/sec [111,420..121,998] 🔴 -8.5%
spread into new array 133,493 ops/sec [130,813..135,376] → 144,707 ops/sec [143,132..147,226] 🟢 +8.4% 80,742 ops/sec [79,869..80,805] → 74,902 ops/sec [74,631..75,507] 🔴 -7.2%
map over 50 elements 6,475 ops/sec [6,380..6,559] → 7,257 ops/sec [7,002..7,441] 🟢 +12.1% 12,819 ops/sec [12,709..13,287] → 11,651 ops/sec [11,571..11,765] 🔴 -9.1%
filter over 50 elements 6,298 ops/sec [6,197..6,348] → 6,857 ops/sec [6,805..6,952] 🟢 +8.9% 12,405 ops/sec [12,278..13,105] → 11,363 ops/sec [11,303..11,426] 🔴 -8.4%
reduce sum 50 elements 6,792 ops/sec [6,717..6,851] → 7,488 ops/sec [7,030..7,716] 🟢 +10.3% 12,477 ops/sec [12,303..12,802] → 11,209 ops/sec [11,164..11,259] 🔴 -10.2%
forEach over 50 elements 6,169 ops/sec [6,061..6,213] → 6,664 ops/sec [6,561..6,741] 🟢 +8.0% 13,543 ops/sec [13,149..13,836] → 12,425 ops/sec [12,075..12,503] 🔴 -8.3%
find in 50 elements 8,956 ops/sec [8,920..9,000] → 9,809 ops/sec [9,579..9,997] 🟢 +9.5% 18,775 ops/sec [18,389..18,948] → 17,073 ops/sec [16,994..17,286] 🔴 -9.1%
sort 20 elements 3,408 ops/sec [3,364..3,463] → 3,692 ops/sec [3,622..3,732] 🟢 +8.3% 7,355 ops/sec [7,152..7,545] → 6,653 ops/sec [6,619..6,686] 🔴 -9.5%
flat nested array 46,703 ops/sec [46,190..47,029] → 51,489 ops/sec [50,328..51,983] 🟢 +10.2% 53,760 ops/sec [53,618..53,955] → 49,253 ops/sec [49,192..49,583] 🔴 -8.4%
flatMap 25,785 ops/sec [25,615..25,871] → 28,733 ops/sec [28,334..29,382] 🟢 +11.4% 35,634 ops/sec [35,504..35,783] → 32,970 ops/sec [32,864..33,247] 🔴 -7.5%
map inside map (5x5) 6,863 ops/sec [6,772..6,878] → 7,241 ops/sec [6,381..7,679] ~ overlap (+5.5%) 10,785 ops/sec [10,616..10,913] → 9,626 ops/sec [9,451..9,704] 🔴 -10.7%
filter inside map (5x10) 5,011 ops/sec [5,004..5,017] → 5,363 ops/sec [5,284..5,409] 🟢 +7.0% 8,589 ops/sec [8,473..8,656] → 7,618 ops/sec [7,522..7,685] 🔴 -11.3%
reduce inside map (5x10) 5,604 ops/sec [5,539..5,645] → 6,160 ops/sec [6,094..6,212] 🟢 +9.9% 9,702 ops/sec [9,628..9,711] → 8,576 ops/sec [8,521..8,587] 🔴 -11.6%
forEach inside forEach (5x10) 4,766 ops/sec [4,709..4,899] → 5,387 ops/sec [5,349..5,410] 🟢 +13.0% 10,192 ops/sec [9,735..10,652] → 9,208 ops/sec [9,062..9,276] 🔴 -9.7%
find inside some (10x10) 3,920 ops/sec [3,814..3,969] → 4,355 ops/sec [4,327..4,424] 🟢 +11.1% 7,797 ops/sec [7,655..7,873] → 6,893 ops/sec [6,750..6,924] 🔴 -11.6%
map+filter chain nested (5x20) 1,496 ops/sec [1,459..1,511] → 1,617 ops/sec [1,609..1,649] 🟢 +8.1% 2,807 ops/sec [2,746..2,857] → 2,460 ops/sec [2,409..2,518] 🔴 -12.3%
reduce flatten (10x5) 15,755 ops/sec [15,551..16,028] → 17,018 ops/sec [16,553..17,698] 🟢 +8.0% 7,515 ops/sec [7,407..7,701] → 7,023 ops/sec [6,892..7,130] 🔴 -6.6%
async-await.js — Interp: 🟢 5, 1 unch. · avg +10.3% · Bytecode: 🔴 4, 2 unch. · avg -10.0%
Benchmark Interpreted Δ Bytecode Δ
single await 137,197 ops/sec [104,672..140,504] → 152,836 ops/sec [148,030..156,738] 🟢 +11.4% 157,446 ops/sec [130,837..171,835] → 153,542 ops/sec [146,391..154,454] ~ overlap (-2.5%)
multiple awaits 66,640 ops/sec [65,603..66,970] → 73,464 ops/sec [49,397..74,944] ~ overlap (+10.2%) 72,754 ops/sec [52,977..74,729] → 66,900 ops/sec [65,920..67,806] ~ overlap (-8.0%)
await non-Promise value 270,762 ops/sec [266,727..272,652] → 299,536 ops/sec [298,359..302,367] 🟢 +10.6% 436,369 ops/sec [431,049..442,840] → 392,411 ops/sec [385,158..400,140] 🔴 -10.1%
await with try/catch 114,227 ops/sec [113,039..115,244] → 123,818 ops/sec [122,992..126,969] 🟢 +8.4% 161,453 ops/sec [158,541..166,685] → 135,469 ops/sec [115,531..151,032] 🔴 -16.1%
await Promise.all 22,234 ops/sec [22,011..22,640] → 24,863 ops/sec [24,602..25,152] 🟢 +11.8% 24,295 ops/sec [23,933..24,699] → 21,307 ops/sec [21,087..21,574] 🔴 -12.3%
nested async function call 73,733 ops/sec [73,117..74,286] → 80,388 ops/sec [79,785..81,121] 🟢 +9.0% 103,446 ops/sec [101,126..104,932] → 91,956 ops/sec [89,055..92,725] 🔴 -11.1%
async-generators.js — Interp: 🟢 1, 1 unch. · avg +11.7% · Bytecode: 🔴 1, 1 unch. · avg -12.2%
Benchmark Interpreted Δ Bytecode Δ
for-await-of over async generator 2,312 ops/sec [2,225..2,338] → 2,553 ops/sec [2,485..2,577] 🟢 +10.4% 2,893 ops/sec [1,967..2,911] → 2,571 ops/sec [2,331..2,640] ~ overlap (-11.1%)
async generator with await in body 20,698 ops/sec [20,595..21,064] → 23,377 ops/sec [17,530..23,733] ~ overlap (+12.9%) 25,155 ops/sec [24,900..25,333] → 21,807 ops/sec [21,071..22,485] 🔴 -13.3%
base64.js — Interp: 🟢 10 · avg +12.1% · Bytecode: 🔴 10 · avg -11.8%
Benchmark Interpreted Δ Bytecode Δ
short ASCII (13 chars) 3,606 ops/sec [3,555..3,748] → 4,167 ops/sec [4,075..4,214] 🟢 +15.6% 4,178 ops/sec [4,029..4,222] → 3,530 ops/sec [2,546..3,741] 🔴 -15.5%
medium ASCII (450 chars) 135 ops/sec [131..140] → 153 ops/sec [149..154] 🟢 +12.9% 155 ops/sec [152..156] → 139 ops/sec [137..141] 🔴 -10.3%
Latin-1 characters 5,378 ops/sec [5,338..5,402] → 5,988 ops/sec [5,940..6,056] 🟢 +11.3% 6,111 ops/sec [6,072..6,118] → 5,300 ops/sec [5,278..5,340] 🔴 -13.3%
short base64 (20 chars) 2,292 ops/sec [2,263..2,335] → 2,600 ops/sec [2,562..2,654] 🟢 +13.4% 2,606 ops/sec [2,596..2,609] → 2,257 ops/sec [1,673..2,269] 🔴 -13.4%
medium base64 (600 chars) 95 ops/sec [95..98] → 107 ops/sec [104..110] 🟢 +12.8% 106 ops/sec [104..107] → 95 ops/sec [95..97] 🔴 -10.0%
Latin-1 output 3,211 ops/sec [3,186..3,226] → 3,645 ops/sec [3,636..3,655] 🟢 +13.5% 3,694 ops/sec [3,563..3,719] → 3,231 ops/sec [3,197..3,263] 🔴 -12.5%
forgiving (no padding) 4,879 ops/sec [4,853..4,933] → 5,557 ops/sec [5,529..5,608] 🟢 +13.9% 5,517 ops/sec [5,375..5,570] → 4,898 ops/sec [4,853..4,937] 🔴 -11.2%
with whitespace 2,102 ops/sec [2,079..2,131] → 2,339 ops/sec [2,316..2,348] 🟢 +11.3% 2,317 ops/sec [2,286..2,331] → 2,058 ops/sec [2,039..2,065] 🔴 -11.2%
atob(btoa(short)) 1,430 ops/sec [1,413..1,439] → 1,566 ops/sec [1,544..1,590] 🟢 +9.5% 1,571 ops/sec [1,543..1,594] → 1,375 ops/sec [1,370..1,377] 🔴 -12.5%
atob(btoa(medium)) 57 ops/sec [56..57] → 61 ops/sec [59..63] 🟢 +6.9% 62 ops/sec [61..63] → 57 ops/sec [56..57] 🔴 -7.7%
classes.js — Interp: 🟢 27, 4 unch. · avg +7.8% · Bytecode: 🟢 1, 🔴 18, 12 unch. · avg -3.9%
Benchmark Interpreted Δ Bytecode Δ
simple class new 51,886 ops/sec [38,109..52,607] → 57,501 ops/sec [57,248..57,998] 🟢 +10.8% 75,821 ops/sec [75,417..76,545] → 67,342 ops/sec [66,746..68,183] 🔴 -11.2%
class with defaults 41,693 ops/sec [41,172..42,594] → 47,308 ops/sec [47,027..47,493] 🟢 +13.5% 53,593 ops/sec [53,425..53,922] → 48,152 ops/sec [47,119..48,685] 🔴 -10.2%
50 instances via Array.from 1,893 ops/sec [1,865..1,936] → 2,136 ops/sec [2,110..2,154] 🟢 +12.8% 2,831 ops/sec [2,795..2,897] → 2,512 ops/sec [2,475..2,553] 🔴 -11.3%
instance method call 25,396 ops/sec [25,180..25,467] → 28,454 ops/sec [28,169..28,516] 🟢 +12.0% 36,923 ops/sec [36,378..37,437] → 33,117 ops/sec [32,698..34,236] 🔴 -10.3%
static method call 40,973 ops/sec [40,641..41,111] → 45,464 ops/sec [44,745..45,859] 🟢 +11.0% 75,529 ops/sec [73,631..76,391] → 68,806 ops/sec [67,492..69,603] 🔴 -8.9%
single-level inheritance 21,406 ops/sec [20,928..21,875] → 23,374 ops/sec [22,829..23,602] 🟢 +9.2% 27,919 ops/sec [27,716..28,243] → 26,227 ops/sec [25,573..26,382] 🔴 -6.1%
two-level inheritance 18,813 ops/sec [18,513..18,896] → 19,561 ops/sec [17,732..20,323] ~ overlap (+4.0%) 22,640 ops/sec [21,826..22,738] → 20,950 ops/sec [20,420..21,346] 🔴 -7.5%
private field access 28,340 ops/sec [28,004..28,581] → 31,261 ops/sec [31,120..31,700] 🟢 +10.3% 26,653 ops/sec [26,240..26,767] → 24,441 ops/sec [24,408..24,640] 🔴 -8.3%
private methods 31,308 ops/sec [31,217..31,824] → 34,296 ops/sec [34,242..34,592] 🟢 +9.5% 30,731 ops/sec [30,475..31,285] → 28,502 ops/sec [28,344..28,809] 🔴 -7.3%
getter/setter access 28,798 ops/sec [28,573..29,297] → 31,463 ops/sec [30,258..31,539] 🟢 +9.3% 41,698 ops/sec [41,417..42,640] → 39,189 ops/sec [38,878..39,767] 🔴 -6.0%
class decorator (identity) 39,466 ops/sec [39,047..39,790] → 41,858 ops/sec [41,743..42,259] 🟢 +6.1% 46,522 ops/sec [45,249..47,251] → 43,977 ops/sec [43,071..44,334] 🔴 -5.5%
class decorator (wrapping) 22,867 ops/sec [22,678..23,186] → 24,798 ops/sec [24,303..24,990] 🟢 +8.4% 24,302 ops/sec [23,866..24,535] → 23,063 ops/sec [22,700..23,180] 🔴 -5.1%
identity method decorator 29,104 ops/sec [28,965..29,313] → 31,284 ops/sec [30,738..31,586] 🟢 +7.5% 39,348 ops/sec [37,667..40,559] → 37,024 ops/sec [35,182..37,941] ~ overlap (-5.9%)
wrapping method decorator 23,877 ops/sec [23,708..23,957] → 25,387 ops/sec [25,051..25,612] 🟢 +6.3% 28,596 ops/sec [28,318..30,385] → 27,795 ops/sec [27,493..28,185] 🔴 -2.8%
stacked method decorators (x3) 16,180 ops/sec [15,966..16,674] → 17,513 ops/sec [17,075..17,802] 🟢 +8.2% 20,509 ops/sec [19,900..21,212] → 20,396 ops/sec [20,052..20,724] ~ overlap (-0.6%)
identity field decorator 32,749 ops/sec [31,558..33,281] → 33,580 ops/sec [33,270..35,069] ~ overlap (+2.5%) 35,702 ops/sec [34,958..36,877] → 35,115 ops/sec [34,581..35,578] ~ overlap (-1.6%)
field initializer decorator 26,647 ops/sec [26,411..26,927] → 28,235 ops/sec [27,515..29,172] 🟢 +6.0% 30,955 ops/sec [30,081..31,856] → 30,151 ops/sec [29,689..31,312] ~ overlap (-2.6%)
getter decorator (identity) 28,876 ops/sec [28,571..29,049] → 32,105 ops/sec [31,752..32,570] 🟢 +11.2% 30,688 ops/sec [29,861..31,421] → 28,766 ops/sec [28,707..28,793] 🔴 -6.3%
setter decorator (identity) 24,080 ops/sec [23,962..24,177] → 25,931 ops/sec [25,740..26,055] 🟢 +7.7% 23,769 ops/sec [23,396..23,864] → 23,834 ops/sec [23,612..24,016] ~ overlap (+0.3%)
static method decorator 30,515 ops/sec [30,273..31,190] → 33,288 ops/sec [32,930..33,622] 🟢 +9.1% 39,588 ops/sec [38,066..40,808] → 39,856 ops/sec [38,400..40,432] ~ overlap (+0.7%)
static field decorator 36,745 ops/sec [35,921..37,744] → 38,808 ops/sec [37,886..40,017] 🟢 +5.6% 41,386 ops/sec [40,516..43,649] → 41,866 ops/sec [41,256..42,257] ~ overlap (+1.2%)
private method decorator 23,896 ops/sec [23,700..24,761] → 26,127 ops/sec [25,535..26,878] 🟢 +9.3% 29,908 ops/sec [28,142..30,391] → 28,968 ops/sec [28,629..29,001] ~ overlap (-3.1%)
private field decorator 26,531 ops/sec [25,833..27,009] → 28,557 ops/sec [28,363..28,786] 🟢 +7.6% 26,863 ops/sec [26,618..27,268] → 26,158 ops/sec [25,916..26,577] 🔴 -2.6%
plain auto-accessor (no decorator) 45,241 ops/sec [44,859..47,691] → 47,937 ops/sec [47,281..50,735] ~ overlap (+6.0%) 43,033 ops/sec [42,630..45,472] → 41,692 ops/sec [39,082..42,319] 🔴 -3.1%
auto-accessor with decorator 25,879 ops/sec [25,519..26,456] → 27,783 ops/sec [27,518..28,538] 🟢 +7.4% 27,005 ops/sec [26,626..28,371] → 27,388 ops/sec [26,465..28,285] ~ overlap (+1.4%)
decorator writing metadata 20,732 ops/sec [20,366..20,910] → 22,232 ops/sec [21,697..22,537] 🟢 +7.2% 24,560 ops/sec [24,270..27,611] → 23,638 ops/sec [23,373..23,996] 🔴 -3.8%
static getter read 52,802 ops/sec [52,149..53,893] → 54,141 ops/sec [53,513..55,055] ~ overlap (+2.5%) 69,467 ops/sec [68,297..69,768] → 73,126 ops/sec [72,020..73,304] 🟢 +5.3%
static getter/setter pair 38,811 ops/sec [38,489..39,206] → 41,080 ops/sec [40,646..41,402] 🟢 +5.8% 52,744 ops/sec [51,871..53,330] → 52,446 ops/sec [51,448..53,346] ~ overlap (-0.6%)
inherited static getter 31,651 ops/sec [29,275..32,228] → 32,401 ops/sec [32,333..32,763] 🟢 +2.4% 39,018 ops/sec [38,418..39,516] → 39,807 ops/sec [39,368..41,292] ~ overlap (+2.0%)
inherited static setter 34,790 ops/sec [34,484..35,674] → 37,103 ops/sec [36,445..37,534] 🟢 +6.6% 42,933 ops/sec [42,298..43,985] → 42,892 ops/sec [41,851..43,716] ~ overlap (-0.1%)
inherited static getter with this binding 28,547 ops/sec [28,119..28,734] → 30,046 ops/sec [29,385..30,172] 🟢 +5.3% 34,877 ops/sec [34,812..35,094] → 34,159 ops/sec [33,893..34,279] 🔴 -2.1%
closures.js — Interp: 🟢 10, 1 unch. · avg +11.6% · Bytecode: 🔴 11 · avg -10.5%
Benchmark Interpreted Δ Bytecode Δ
closure over single variable 43,740 ops/sec [43,199..44,171] → 47,814 ops/sec [47,277..48,855] 🟢 +9.3% 166,885 ops/sec [163,836..169,402] → 144,924 ops/sec [141,056..149,369] 🔴 -13.2%
closure over multiple variables 44,246 ops/sec [43,821..45,081] → 49,638 ops/sec [48,559..50,980] 🟢 +12.2% 147,455 ops/sec [144,922..148,978] → 132,953 ops/sec [131,935..133,439] 🔴 -9.8%
nested closures 48,660 ops/sec [47,975..49,347] → 53,934 ops/sec [52,659..54,641] 🟢 +10.8% 147,208 ops/sec [141,195..147,812] → 134,246 ops/sec [132,973..134,737] 🔴 -8.8%
function as argument 32,720 ops/sec [32,246..33,227] → 36,119 ops/sec [34,943..36,949] 🟢 +10.4% 156,131 ops/sec [155,920..156,724] → 140,190 ops/sec [139,418..141,593] 🔴 -10.2%
function returning function 42,817 ops/sec [41,694..42,955] → 46,185 ops/sec [40,765..49,948] ~ overlap (+7.9%) 173,914 ops/sec [173,437..175,135] → 154,517 ops/sec [153,511..155,021] 🔴 -11.2%
compose two functions 26,196 ops/sec [25,587..26,529] → 29,113 ops/sec [28,248..29,586] 🟢 +11.1% 100,554 ops/sec [99,447..101,041] → 90,237 ops/sec [89,244..91,674] 🔴 -10.3%
fn.call 59,217 ops/sec [57,733..60,147] → 65,554 ops/sec [64,211..67,374] 🟢 +10.7% 100,012 ops/sec [98,453..100,997] → 91,772 ops/sec [91,521..92,936] 🔴 -8.2%
fn.apply 46,354 ops/sec [45,837..46,754] → 52,158 ops/sec [51,702..52,917] 🟢 +12.5% 96,636 ops/sec [94,152..98,266] → 90,366 ops/sec [89,284..91,167] 🔴 -6.5%
fn.bind 55,090 ops/sec [54,483..55,949] → 62,648 ops/sec [61,126..63,017] 🟢 +13.7% 175,257 ops/sec [171,320..179,296] → 160,345 ops/sec [156,305..161,927] 🔴 -8.5%
recursive sum to 50 3,773 ops/sec [3,700..3,806] → 4,399 ops/sec [4,275..4,459] 🟢 +16.6% 22,210 ops/sec [22,000..22,514] → 18,710 ops/sec [18,589..18,784] 🔴 -15.8%
recursive tree traversal 7,229 ops/sec [7,208..7,259] → 8,108 ops/sec [7,998..8,154] 🟢 +12.2% 21,294 ops/sec [21,223..21,367] → 18,587 ops/sec [18,429..18,734] 🔴 -12.7%
collections.js — Interp: 🟢 12 · avg +9.2% · Bytecode: 🔴 12 · avg -10.1%
Benchmark Interpreted Δ Bytecode Δ
add 50 elements 3,095 ops/sec [3,073..3,107] → 3,395 ops/sec [3,335..3,412] 🟢 +9.7% 3,927 ops/sec [3,910..3,941] → 3,585 ops/sec [3,519..3,619] 🔴 -8.7%
has lookup (50 elements) 46,094 ops/sec [45,107..46,153] → 49,879 ops/sec [49,239..51,334] 🟢 +8.2% 58,506 ops/sec [57,908..59,298] → 52,297 ops/sec [49,758..52,982] 🔴 -10.6%
delete elements 25,231 ops/sec [24,841..25,280] → 27,582 ops/sec [27,218..27,768] 🟢 +9.3% 30,619 ops/sec [30,384..30,752] → 26,556 ops/sec [26,447..26,918] 🔴 -13.3%
forEach iteration 5,313 ops/sec [5,255..5,339] → 5,676 ops/sec [5,580..5,802] 🟢 +6.8% 10,220 ops/sec [10,044..10,278] → 9,109 ops/sec [9,042..9,148] 🔴 -10.9%
spread to array 15,964 ops/sec [15,462..16,138] → 17,589 ops/sec [16,580..18,014] 🟢 +10.2% 113,257 ops/sec [109,777..114,853] → 106,857 ops/sec [106,353..107,256] 🔴 -5.7%
deduplicate array 21,002 ops/sec [20,883..21,386] → 23,585 ops/sec [23,183..24,070] 🟢 +12.3% 39,889 ops/sec [39,387..40,578] → 34,985 ops/sec [34,785..35,438] 🔴 -12.3%
set 50 entries 2,332 ops/sec [2,318..2,356] → 2,517 ops/sec [2,487..2,597] 🟢 +7.9% 3,120 ops/sec [3,041..3,153] → 2,786 ops/sec [2,722..2,807] 🔴 -10.7%
get lookup (50 entries) 46,088 ops/sec [45,711..46,399] → 51,362 ops/sec [50,107..51,912] 🟢 +11.4% 53,772 ops/sec [52,968..54,900] → 48,435 ops/sec [47,913..48,632] 🔴 -9.9%
has check 65,871 ops/sec [64,816..66,627] → 71,767 ops/sec [71,081..73,550] 🟢 +9.0% 80,009 ops/sec [79,611..82,216] → 71,975 ops/sec [71,601..72,654] 🔴 -10.0%
delete entries 25,226 ops/sec [24,965..25,386] → 27,685 ops/sec [26,865..27,988] 🟢 +9.7% 28,707 ops/sec [28,604..28,744] → 25,993 ops/sec [25,833..26,261] 🔴 -9.5%
forEach iteration 5,163 ops/sec [5,061..5,167] → 5,608 ops/sec [5,536..5,697] 🟢 +8.6% 10,611 ops/sec [10,436..10,718] → 9,214 ops/sec [9,010..9,308] 🔴 -13.2%
keys/values/entries 4,422 ops/sec [4,302..4,493] → 4,753 ops/sec [4,688..4,865] 🟢 +7.5% 14,959 ops/sec [14,818..15,188] → 13,922 ops/sec [13,735..14,414] 🔴 -6.9%
csv.js — Interp: 🟢 13 · avg +9.9% · Bytecode: 🔴 13 · avg -9.4%
Benchmark Interpreted Δ Bytecode Δ
parse simple 3-column CSV 47,986 ops/sec [47,645..48,492] → 52,394 ops/sec [50,605..53,560] 🟢 +9.2% 54,329 ops/sec [54,160..54,708] → 49,502 ops/sec [49,289..49,720] 🔴 -8.9%
parse 10-row CSV 13,101 ops/sec [12,868..13,212] → 14,767 ops/sec [14,733..14,894] 🟢 +12.7% 14,940 ops/sec [14,832..15,045] → 13,787 ops/sec [13,721..13,867] 🔴 -7.7%
parse 100-row CSV 2,023 ops/sec [2,010..2,041] → 2,212 ops/sec [2,187..2,311] 🟢 +9.3% 2,292 ops/sec [2,246..2,377] → 2,114 ops/sec [2,075..2,155] 🔴 -7.8%
parse CSV with quoted fields 67,442 ops/sec [66,195..67,950] → 76,225 ops/sec [75,339..77,425] 🟢 +13.0% 80,668 ops/sec [77,609..84,052] → 72,210 ops/sec [70,959..73,317] 🔴 -10.5%
parse without headers (array of arrays) 5,669 ops/sec [5,596..5,715] → 6,095 ops/sec [5,953..6,249] 🟢 +7.5% 6,708 ops/sec [6,269..7,058] → 5,858 ops/sec [5,810..5,928] 🔴 -12.7%
parse with semicolon delimiter 9,600 ops/sec [9,569..9,636] → 10,193 ops/sec [10,111..10,259] 🟢 +6.2% 10,833 ops/sec [10,574..10,891] → 9,875 ops/sec [9,729..10,024] 🔴 -8.8%
stringify array of objects 65,334 ops/sec [64,120..65,650] → 74,765 ops/sec [74,426..76,067] 🟢 +14.4% 80,784 ops/sec [79,076..82,268] → 69,709 ops/sec [68,721..71,233] 🔴 -13.7%
stringify array of arrays 23,434 ops/sec [23,131..23,599] → 26,760 ops/sec [26,462..26,810] 🟢 +14.2% 27,683 ops/sec [27,451..27,701] → 24,329 ops/sec [23,690..24,598] 🔴 -12.1%
stringify with values needing escaping 47,775 ops/sec [47,205..48,829] → 54,867 ops/sec [54,701..54,947] 🟢 +14.8% 59,101 ops/sec [58,448..59,413] → 50,161 ops/sec [49,082..52,083] 🔴 -15.1%
reviver converts numbers 1,295 ops/sec [1,276..1,313] → 1,433 ops/sec [1,424..1,467] 🟢 +10.6% 1,668 ops/sec [1,597..1,701] → 1,525 ops/sec [1,491..1,544] 🔴 -8.6%
reviver filters empty to null 10,748 ops/sec [10,539..10,848] → 11,550 ops/sec [11,273..11,962] 🟢 +7.5% 14,313 ops/sec [14,071..14,792] → 13,397 ops/sec [13,322..13,481] 🔴 -6.4%
parse then stringify 8,452 ops/sec [8,248..8,565] → 8,837 ops/sec [8,727..9,105] 🟢 +4.5% 9,169 ops/sec [9,051..9,211] → 8,812 ops/sec [8,732..8,904] 🔴 -3.9%
stringify then parse 8,139 ops/sec [8,028..8,333] → 8,476 ops/sec [8,432..8,785] 🟢 +4.1% 8,913 ops/sec [8,515..8,985] → 8,426 ops/sec [8,346..8,462] 🔴 -5.5%
destructuring.js — Interp: 🟢 21, 1 unch. · avg +10.0% · Bytecode: 🔴 20, 2 unch. · avg -7.1%
Benchmark Interpreted Δ Bytecode Δ
simple array destructuring 164,221 ops/sec [161,556..167,981] → 180,385 ops/sec [175,107..188,346] 🟢 +9.8% 124,364 ops/sec [119,581..127,013] → 114,454 ops/sec [113,533..115,250] 🔴 -8.0%
with rest element 110,989 ops/sec [109,915..111,668] → 124,669 ops/sec [120,778..127,814] 🟢 +12.3% 93,863 ops/sec [92,768..94,420] → 85,355 ops/sec [85,198..85,927] 🔴 -9.1%
with defaults 165,333 ops/sec [163,981..168,047] → 177,145 ops/sec [166,984..182,636] ~ overlap (+7.1%) 130,682 ops/sec [129,493..133,359] → 124,317 ops/sec [123,592..124,470] 🔴 -4.9%
skip elements 174,977 ops/sec [169,147..177,072] → 188,686 ops/sec [185,334..194,069] 🟢 +7.8% 135,762 ops/sec [135,385..136,140] → 127,852 ops/sec [126,031..128,067] 🔴 -5.8%
nested array destructuring 84,298 ops/sec [81,974..85,252] → 89,981 ops/sec [88,152..92,265] 🟢 +6.7% 45,871 ops/sec [45,732..46,643] → 42,696 ops/sec [42,290..43,250] 🔴 -6.9%
swap variables 200,929 ops/sec [199,512..201,649] → 217,196 ops/sec [212,466..220,627] 🟢 +8.1% 164,585 ops/sec [163,724..164,608] → 150,708 ops/sec [150,438..154,481] 🔴 -8.4%
simple object destructuring 137,487 ops/sec [135,999..139,520] → 151,039 ops/sec [147,154..154,529] 🟢 +9.9% 172,372 ops/sec [172,099..173,091] → 157,011 ops/sec [155,854..160,610] 🔴 -8.9%
with defaults 153,084 ops/sec [150,356..154,023] → 165,980 ops/sec [164,382..169,493] 🟢 +8.4% 220,257 ops/sec [216,873..220,760] → 197,585 ops/sec [195,848..200,690] 🔴 -10.3%
with renaming 149,248 ops/sec [145,792..152,828] → 159,869 ops/sec [159,014..161,827] 🟢 +7.1% 168,147 ops/sec [165,103..168,850] → 157,108 ops/sec [153,266..158,937] 🔴 -6.6%
nested object destructuring 75,674 ops/sec [75,270..76,205] → 81,739 ops/sec [79,597..82,459] 🟢 +8.0% 86,878 ops/sec [85,585..88,780] → 78,704 ops/sec [78,067..79,508] 🔴 -9.4%
rest properties 55,384 ops/sec [54,904..56,232] → 59,151 ops/sec [57,555..61,060] 🟢 +6.8% 80,496 ops/sec [76,859..82,342] → 74,188 ops/sec [73,957..74,624] 🔴 -7.8%
object parameter 41,344 ops/sec [40,947..43,046] → 44,841 ops/sec [44,638..46,539] 🟢 +8.5% 71,389 ops/sec [69,618..73,764] → 65,171 ops/sec [64,829..65,390] 🔴 -8.7%
array parameter 50,633 ops/sec [49,731..51,306] → 56,769 ops/sec [54,417..58,289] 🟢 +12.1% 63,130 ops/sec [61,568..64,035] → 57,563 ops/sec [56,789..57,994] 🔴 -8.8%
mixed destructuring in map 11,399 ops/sec [11,158..11,615] → 12,934 ops/sec [12,424..13,384] 🟢 +13.5% 18,906 ops/sec [18,510..19,699] → 16,859 ops/sec [16,458..17,017] 🔴 -10.8%
forEach with array destructuring 25,498 ops/sec [25,102..25,933] → 28,073 ops/sec [26,483..28,504] 🟢 +10.1% 23,473 ops/sec [22,769..24,139] → 21,781 ops/sec [21,597..22,027] 🔴 -7.2%
map with array destructuring 26,193 ops/sec [25,683..26,618] → 29,160 ops/sec [28,640..29,558] 🟢 +11.3% 22,255 ops/sec [21,980..23,177] → 20,759 ops/sec [20,543..21,172] 🔴 -6.7%
filter with array destructuring 27,306 ops/sec [26,955..27,422] → 29,777 ops/sec [28,934..30,355] 🟢 +9.0% 23,260 ops/sec [22,811..24,811] → 22,842 ops/sec [22,272..22,974] ~ overlap (-1.8%)
reduce with array destructuring 30,116 ops/sec [29,159..30,468] → 33,140 ops/sec [32,486..33,440] 🟢 +10.0% 24,142 ops/sec [23,768..24,565] → 23,262 ops/sec [23,083..23,635] 🔴 -3.6%
map with object destructuring 25,488 ops/sec [25,116..26,125] → 29,333 ops/sec [28,362..29,714] 🟢 +15.1% 40,961 ops/sec [39,832..41,801] → 38,533 ops/sec [38,402..38,638] 🔴 -5.9%
map with nested destructuring 21,806 ops/sec [21,209..22,377] → 24,903 ops/sec [24,296..25,324] 🟢 +14.2% 39,023 ops/sec [37,737..40,402] → 35,729 ops/sec [34,781..36,283] 🔴 -8.4%
map with rest in destructuring 16,476 ops/sec [16,369..16,750] → 18,084 ops/sec [17,761..18,815] 🟢 +9.8% 12,007 ops/sec [11,802..12,512] → 11,856 ops/sec [11,577..11,963] ~ overlap (-1.3%)
map with defaults in destructuring 20,282 ops/sec [17,288..20,721] → 23,299 ops/sec [22,713..23,904] 🟢 +14.9% 30,792 ops/sec [29,818..31,041] → 28,532 ops/sec [28,389..28,725] 🔴 -7.3%
fibonacci.js — Interp: 🟢 8 · avg +10.8% · Bytecode: 🔴 8 · avg -11.7%
Benchmark Interpreted Δ Bytecode Δ
recursive fib(15) 103 ops/sec [100..104] → 115 ops/sec [114..117] 🟢 +11.6% 608 ops/sec [604..625] → 525 ops/sec [523..526] 🔴 -13.7%
recursive fib(20) 9 ops/sec [9..9] → 10 ops/sec [10..11] 🟢 +13.0% 55 ops/sec [55..55] → 47 ops/sec [47..47] 🔴 -13.9%
recursive fib(15) typed 105 ops/sec [102..106] → 116 ops/sec [115..118] 🟢 +11.3% 623 ops/sec [621..628] → 535 ops/sec [533..542] 🔴 -14.1%
recursive fib(20) typed 9 ops/sec [9..9] → 11 ops/sec [10..11] 🟢 +13.6% 56 ops/sec [56..56] → 49 ops/sec [48..49] 🔴 -13.6%
iterative fib(20) via reduce 4,702 ops/sec [4,585..4,792] → 5,080 ops/sec [5,016..5,118] 🟢 +8.0% 10,083 ops/sec [10,031..10,211] → 9,140 ops/sec [9,127..9,215] 🔴 -9.4%
iterator fib(20) 3,689 ops/sec [3,639..3,729] → 4,025 ops/sec [3,941..4,103] 🟢 +9.1% 6,796 ops/sec [6,773..6,874] → 6,227 ops/sec [6,172..6,317] 🔴 -8.4%
iterator fib(20) via Iterator.from + take 4,911 ops/sec [4,834..4,993] → 5,356 ops/sec [5,249..5,514] 🟢 +9.1% 7,822 ops/sec [7,577..7,990] → 6,960 ops/sec [6,911..7,134] 🔴 -11.0%
iterator fib(20) last value via reduce 3,751 ops/sec [3,703..3,831] → 4,146 ops/sec [4,051..4,201] 🟢 +10.5% 6,033 ops/sec [5,812..6,258] → 5,472 ops/sec [5,434..5,488] 🔴 -9.3%
float16array.js — Interp: 🟢 25, 🔴 4, 3 unch. · avg +4.8% · Bytecode: 🟢 4, 🔴 27, 1 unch. · avg -7.8%
Benchmark Interpreted Δ Bytecode Δ
new Float16Array(0) 116,554 ops/sec [114,640..118,379] → 121,564 ops/sec [119,898..124,089] 🟢 +4.3% 151,119 ops/sec [148,866..160,139] → 136,417 ops/sec [134,350..137,849] 🔴 -9.7%
new Float16Array(100) 111,349 ops/sec [110,975..112,580] → 119,597 ops/sec [115,732..120,704] 🟢 +7.4% 143,681 ops/sec [142,046..149,446] → 130,920 ops/sec [129,299..131,881] 🔴 -8.9%
new Float16Array(1000) 96,069 ops/sec [94,199..96,776] → 98,370 ops/sec [97,519..100,292] 🟢 +2.4% 122,349 ops/sec [119,505..124,420] → 109,153 ops/sec [108,574..109,744] 🔴 -10.8%
Float16Array.from([...100]) 4,930 ops/sec [4,912..4,941] → 5,237 ops/sec [5,180..5,416] 🟢 +6.2% 5,576 ops/sec [5,419..6,054] → 5,052 ops/sec [4,987..5,104] 🔴 -9.4%
Float16Array.of(1.5, 2.5, 3.5, 4.5, 5.5) 129,508 ops/sec [127,406..129,877] → 137,520 ops/sec [135,608..137,761] 🟢 +6.2% 117,086 ops/sec [113,316..121,777] → 107,788 ops/sec [106,347..109,003] 🔴 -7.9%
new Float16Array(float64Array) 83,206 ops/sec [81,513..84,131] → 85,831 ops/sec [85,197..86,145] 🟢 +3.2% 102,742 ops/sec [97,559..104,255] → 90,004 ops/sec [87,664..91,978] 🔴 -12.4%
sequential write 100 elements 1,323 ops/sec [1,305..1,337] → 1,441 ops/sec [1,422..1,459] 🟢 +9.0% 4,165 ops/sec [4,088..4,370] → 3,483 ops/sec [3,427..3,505] 🔴 -16.4%
sequential read 100 elements 1,539 ops/sec [1,509..1,552] → 1,605 ops/sec [1,596..1,624] 🟢 +4.2% 6,291 ops/sec [6,114..6,426] → 5,641 ops/sec [5,546..5,691] 🔴 -10.3%
write special values (NaN, Inf, -0) 63,741 ops/sec [62,407..66,640] → 69,884 ops/sec [63,304..71,700] ~ overlap (+9.6%) 138,206 ops/sec [135,621..142,001] → 121,647 ops/sec [119,945..121,817] 🔴 -12.0%
Float16Array write 1,383 ops/sec [1,372..1,386] → 1,506 ops/sec [1,484..1,523] 🟢 +8.9% 4,167 ops/sec [4,104..4,509] → 3,510 ops/sec [3,483..3,546] 🔴 -15.8%
Float32Array write 1,404 ops/sec [1,396..1,407] → 1,499 ops/sec [1,467..1,569] 🟢 +6.8% 4,235 ops/sec [4,139..4,440] → 3,518 ops/sec [3,497..3,533] 🔴 -16.9%
Float64Array write 1,396 ops/sec [1,380..1,415] → 1,495 ops/sec [1,452..1,520] 🟢 +7.0% 4,114 ops/sec [4,011..4,453] → 3,495 ops/sec [3,480..3,508] 🔴 -15.0%
Float16Array read 1,525 ops/sec [1,502..1,583] → 1,608 ops/sec [1,599..1,618] 🟢 +5.4% 6,124 ops/sec [5,970..6,205] → 5,353 ops/sec [5,222..5,386] 🔴 -12.6%
Float32Array read 1,501 ops/sec [1,457..1,537] → 1,590 ops/sec [1,585..1,639] 🟢 +5.9% 6,592 ops/sec [6,407..6,839] → 5,703 ops/sec [5,679..5,739] 🔴 -13.5%
Float64Array read 1,523 ops/sec [1,506..1,552] → 1,595 ops/sec [1,586..1,634] 🟢 +4.8% 6,572 ops/sec [6,433..6,761] → 5,732 ops/sec [5,673..5,784] 🔴 -12.8%
fill(1.5) 21,907 ops/sec [21,675..21,941] → 24,890 ops/sec [24,631..25,060] 🟢 +13.6% 24,734 ops/sec [24,367..24,957] → 23,507 ops/sec [23,075..23,758] 🔴 -5.0%
slice() 86,956 ops/sec [86,105..87,616] → 88,202 ops/sec [86,913..90,013] ~ overlap (+1.4%) 97,218 ops/sec [96,083..97,928] → 97,496 ops/sec [97,203..98,096] ~ overlap (+0.3%)
map(x => x * 2) 2,518 ops/sec [2,455..2,557] → 2,791 ops/sec [2,749..2,855] 🟢 +10.8% 4,054 ops/sec [3,898..4,262] → 3,662 ops/sec [3,612..3,667] 🔴 -9.7%
filter(x => x > 25) 2,594 ops/sec [2,570..2,608] → 2,856 ops/sec [2,811..2,900] 🟢 +10.1% 4,667 ops/sec [4,503..4,792] → 4,109 ops/sec [4,050..4,146] 🔴 -11.9%
reduce (sum) 2,577 ops/sec [2,546..2,596] → 2,823 ops/sec [2,815..2,829] 🟢 +9.5% 3,873 ops/sec [3,726..3,914] → 3,430 ops/sec [3,368..3,461] 🔴 -11.4%
sort() 20,952 ops/sec [20,847..21,024] → 17,776 ops/sec [17,713..17,832] 🔴 -15.2% 18,088 ops/sec [17,702..18,186] → 21,329 ops/sec [21,237..21,416] 🟢 +17.9%
indexOf() 105,770 ops/sec [104,960..106,043] → 99,586 ops/sec [98,143..101,086] 🔴 -5.8% 109,271 ops/sec [107,069..111,004] → 120,602 ops/sec [119,222..121,145] 🟢 +10.4%
reverse() 110,130 ops/sec [109,673..110,943] → 113,935 ops/sec [110,213..118,906] ~ overlap (+3.5%) 130,050 ops/sec [129,053..131,016] → 124,441 ops/sec [122,011..125,087] 🔴 -4.3%
toReversed() 54,623 ops/sec [54,520..54,793] → 49,830 ops/sec [49,618..50,428] 🔴 -8.8% 53,147 ops/sec [52,110..53,699] → 57,733 ops/sec [57,620..58,148] 🟢 +8.6%
toSorted() 824 ops/sec [819..828] → 702 ops/sec [688..713] 🔴 -14.7% 691 ops/sec [681..698] → 820 ops/sec [808..828] 🟢 +18.7%
create view over existing buffer 133,301 ops/sec [132,712..134,409] → 143,205 ops/sec [141,243..144,442] 🟢 +7.4% 176,228 ops/sec [171,185..179,532] → 157,798 ops/sec [155,249..159,313] 🔴 -10.5%
subarray() 180,853 ops/sec [179,627..182,069] → 199,602 ops/sec [193,176..202,964] 🟢 +10.4% 245,341 ops/sec [238,592..251,073] → 221,048 ops/sec [218,781..222,887] 🔴 -9.9%
set() from array 199,167 ops/sec [195,108..200,876] → 221,780 ops/sec [216,976..229,009] 🟢 +11.4% 282,101 ops/sec [276,718..288,332] → 249,307 ops/sec [244,532..251,351] 🔴 -11.6%
for-of loop 2,188 ops/sec [2,161..2,233] → 2,286 ops/sec [2,246..2,408] 🟢 +4.5% 9,555 ops/sec [9,442..9,592] → 8,660 ops/sec [8,577..8,700] 🔴 -9.4%
spread into array 8,885 ops/sec [8,767..9,009] → 9,475 ops/sec [9,294..9,764] 🟢 +6.6% 40,343 ops/sec [39,537..40,395] → 34,986 ops/sec [34,784..35,397] 🔴 -13.3%
f16round(1.337) 247,783 ops/sec [244,217..251,418] → 271,412 ops/sec [261,453..275,061] 🟢 +9.5% 268,592 ops/sec [265,664..272,238] → 238,687 ops/sec [235,612..241,187] 🔴 -11.1%
f16round over 100 values 1,477 ops/sec [1,455..1,486] → 1,607 ops/sec [1,543..1,636] 🟢 +8.8% 3,161 ops/sec [3,093..3,187] → 2,780 ops/sec [2,752..2,803] 🔴 -12.1%
for-of.js — Interp: 🟢 6, 1 unch. · avg +5.2% · Bytecode: 🔴 6, 1 unch. · avg -6.4%
Benchmark Interpreted Δ Bytecode Δ
for...of with 10-element array 19,475 ops/sec [19,280..19,624] → 20,721 ops/sec [20,433..20,812] 🟢 +6.4% 119,654 ops/sec [117,209..121,878] → 108,045 ops/sec [107,236..108,811] 🔴 -9.7%
for...of with 100-element array 2,260 ops/sec [2,252..2,281] → 2,388 ops/sec [2,372..2,398] 🟢 +5.7% 15,624 ops/sec [15,553..16,077] → 14,241 ops/sec [14,114..14,427] 🔴 -8.9%
for...of with string (10 chars) 14,286 ops/sec [13,729..14,319] → 14,785 ops/sec [12,956..15,289] ~ overlap (+3.5%) 34,315 ops/sec [33,739..34,457] → 32,147 ops/sec [31,988..32,254] 🔴 -6.3%
for...of with Set (10 elements) 20,456 ops/sec [20,134..20,631] → 21,609 ops/sec [21,399..21,700] 🟢 +5.6% 117,678 ops/sec [114,483..121,702] → 107,043 ops/sec [104,751..108,464] 🔴 -9.0%
for...of with Map entries (10 entries) 13,657 ops/sec [13,344..13,763] → 14,083 ops/sec [13,841..14,138] 🟢 +3.1% 16,254 ops/sec [16,216..16,593] → 15,527 ops/sec [15,043..15,608] 🔴 -4.5%
for...of with destructuring 17,050 ops/sec [16,711..17,292] → 17,934 ops/sec [17,742..18,241] 🟢 +5.2% 21,202 ops/sec [20,889..21,573] → 20,138 ops/sec [19,655..20,509] 🔴 -5.0%
for-await-of with sync array 18,687 ops/sec [18,496..19,036] → 20,002 ops/sec [19,768..20,421] 🟢 +7.0% 16,598 ops/sec [15,375..16,810] → 16,337 ops/sec [15,857..16,437] ~ overlap (-1.6%)
generators.js — Interp: 🟢 3, 1 unch. · avg +9.2% · Bytecode: 🔴 4 · avg -6.4%
Benchmark Interpreted Δ Bytecode Δ
manual next over object generator 854 ops/sec [848..865] → 963 ops/sec [953..991] 🟢 +12.9% 1,124 ops/sec [1,084..1,147] → 1,046 ops/sec [1,036..1,058] 🔴 -6.9%
for...of over object generator 1,352 ops/sec [1,335..1,380] → 1,448 ops/sec [1,295..1,518] ~ overlap (+7.1%) 2,141 ops/sec [2,077..2,150] → 2,018 ops/sec [2,016..2,029] 🔴 -5.8%
yield delegation 1,363 ops/sec [1,354..1,369] → 1,464 ops/sec [1,451..1,475] 🟢 +7.4% 2,179 ops/sec [2,158..2,205] → 2,035 ops/sec [2,027..2,045] 🔴 -6.6%
class generator method 1,349 ops/sec [1,332..1,360] → 1,477 ops/sec [1,459..1,511] 🟢 +9.5% 2,172 ops/sec [2,153..2,189] → 2,038 ops/sec [2,010..2,103] 🔴 -6.1%
iterators.js — Interp: 🟢 36, 6 unch. · avg +6.8% · Bytecode: 🔴 27, 15 unch. · avg -4.6%
Benchmark Interpreted Δ Bytecode Δ
Iterator.from({next}).toArray() — 20 elements 4,374 ops/sec [4,340..4,456] → 4,972 ops/sec [4,871..5,119] 🟢 +13.7% 7,117 ops/sec [6,957..7,171] → 6,863 ops/sec [6,783..7,041] ~ overlap (-3.6%)
Iterator.from({next}).toArray() — 50 elements 1,892 ops/sec [1,871..1,900] → 2,095 ops/sec [2,072..2,133] 🟢 +10.8% 3,217 ops/sec [3,125..3,302] → 2,955 ops/sec [2,926..2,976] 🔴 -8.2%
spread pre-wrapped iterator — 20 elements 4,434 ops/sec [4,415..4,481] → 4,917 ops/sec [4,727..4,967] 🟢 +10.9% 7,149 ops/sec [7,093..7,241] → 6,754 ops/sec [6,592..6,860] 🔴 -5.5%
Iterator.from({next}).forEach — 50 elements 1,386 ops/sec [1,369..1,405] → 1,536 ops/sec [1,520..1,544] 🟢 +10.9% 2,474 ops/sec [2,413..2,492] → 2,227 ops/sec [2,224..2,255] 🔴 -10.0%
Iterator.from({next}).reduce — 50 elements 1,422 ops/sec [1,406..1,435] → 1,562 ops/sec [1,544..1,597] 🟢 +9.8% 2,274 ops/sec [2,233..2,316] → 2,163 ops/sec [2,125..2,191] 🔴 -4.9%
wrap array iterator 73,053 ops/sec [71,985..73,669] → 79,925 ops/sec [78,624..80,193] 🟢 +9.4% 81,132 ops/sec [80,757..82,985] → 75,292 ops/sec [73,365..76,742] 🔴 -7.2%
wrap plain {next()} object 3,170 ops/sec [3,129..3,258] → 3,375 ops/sec [3,323..3,404] 🟢 +6.5% 5,035 ops/sec [4,962..5,062] → 4,739 ops/sec [4,662..4,904] 🔴 -5.9%
map + toArray (50 elements) 1,480 ops/sec [1,470..1,486] → 1,542 ops/sec [1,524..1,552] 🟢 +4.2% 2,314 ops/sec [2,294..2,321] → 2,227 ops/sec [2,174..2,248] 🔴 -3.8%
filter + toArray (50 elements) 1,433 ops/sec [1,430..1,467] → 1,529 ops/sec [1,506..1,540] 🟢 +6.7% 2,320 ops/sec [2,311..2,449] → 2,234 ops/sec [2,232..2,246] 🔴 -3.7%
take(10) + toArray (50 element source) 8,865 ops/sec [8,798..8,881] → 9,402 ops/sec [9,297..9,454] 🟢 +6.1% 13,817 ops/sec [13,621..13,994] → 12,853 ops/sec [12,661..13,160] 🔴 -7.0%
drop(40) + toArray (50 element source) 1,991 ops/sec [1,952..2,008] → 2,096 ops/sec [2,056..2,121] 🟢 +5.3% 3,179 ops/sec [3,099..3,276] → 3,037 ops/sec [2,946..3,079] 🔴 -4.5%
chained map + filter + take (100 element source) 2,807 ops/sec [2,781..2,834] → 2,962 ops/sec [2,915..3,027] 🟢 +5.5% 4,593 ops/sec [4,479..4,709] → 4,179 ops/sec [4,152..4,194] 🔴 -9.0%
some + every (50 elements) 867 ops/sec [862..876] → 869 ops/sec [861..884] ~ overlap (+0.2%) 1,372 ops/sec [1,325..1,460] → 1,274 ops/sec [1,255..1,297] 🔴 -7.2%
find (50 elements) 1,938 ops/sec [1,932..1,943] → 1,929 ops/sec [1,889..1,941] ~ overlap (-0.5%) 2,966 ops/sec [2,932..3,111] → 2,767 ops/sec [2,696..2,797] 🔴 -6.7%
concat 2 arrays (10 + 10 elements) 70,787 ops/sec [70,053..71,470] → 75,974 ops/sec [72,321..76,749] 🟢 +7.3% 77,199 ops/sec [74,268..78,538] → 72,434 ops/sec [72,129..73,007] 🔴 -6.2%
concat 5 arrays (10 elements each) 44,115 ops/sec [43,715..44,366] → 44,119 ops/sec [41,061..46,904] ~ overlap (+0.0%) 47,220 ops/sec [46,930..47,359] → 43,478 ops/sec [42,939..44,876] 🔴 -7.9%
concat 2 arrays (20 + 20 elements) 64,309 ops/sec [57,557..64,660] → 64,691 ops/sec [61,699..66,858] ~ overlap (+0.6%) 64,770 ops/sec [64,085..65,736] → 66,198 ops/sec [65,602..66,512] ~ overlap (+2.2%)
concat + filter + toArray (20 + 20 elements) 5,878 ops/sec [5,797..5,947] → 6,426 ops/sec [6,261..6,590] 🟢 +9.3% 10,002 ops/sec [9,573..10,307] → 9,512 ops/sec [9,422..9,615] ~ overlap (-4.9%)
concat + map + take (20 + 20 elements, take 10) 18,371 ops/sec [18,289..18,475] → 20,434 ops/sec [19,900..20,912] 🟢 +11.2% 27,575 ops/sec [26,627..28,555] → 26,852 ops/sec [26,676..27,089] ~ overlap (-2.6%)
concat Sets (15 + 15 elements) 67,685 ops/sec [66,167..69,016] → 72,346 ops/sec [71,208..74,297] 🟢 +6.9% 70,760 ops/sec [69,650..73,775] → 73,424 ops/sec [72,981..74,102] ~ overlap (+3.8%)
concat strings (13 + 13 characters) 48,482 ops/sec [47,510..48,914] → 51,659 ops/sec [50,672..53,534] 🟢 +6.6% 49,953 ops/sec [49,789..51,213] → 49,820 ops/sec [49,429..50,697] ~ overlap (-0.3%)
zip 2 arrays (10 + 10 elements) 28,285 ops/sec [27,367..28,699] → 29,256 ops/sec [28,984..29,979] 🟢 +3.4% 29,446 ops/sec [28,898..30,648] → 27,600 ops/sec [27,310..27,939] 🔴 -6.3%
zip 3 arrays (10 elements each) 25,467 ops/sec [25,347..25,657] → 26,603 ops/sec [25,891..27,222] 🟢 +4.5% 26,568 ops/sec [26,506..26,805] → 26,002 ops/sec [25,574..26,845] ~ overlap (-2.1%)
zip 2 arrays (20 + 20 elements) 18,897 ops/sec [18,637..19,429] → 19,832 ops/sec [19,394..20,123] ~ overlap (+4.9%) 19,947 ops/sec [19,660..20,426] → 18,688 ops/sec [18,438..18,987] 🔴 -6.3%
zip 2 arrays (50 + 50 elements) 9,450 ops/sec [9,391..9,527] → 10,179 ops/sec [9,992..10,248] 🟢 +7.7% 9,975 ops/sec [9,631..10,273] → 9,394 ops/sec [9,314..9,587] 🔴 -5.8%
zip shortest mode (20 + 10 elements) 27,938 ops/sec [27,526..28,098] → 29,438 ops/sec [28,904..29,913] 🟢 +5.4% 28,926 ops/sec [28,371..29,624] → 28,388 ops/sec [28,054..29,174] ~ overlap (-1.9%)
zip longest mode (10 + 20 elements) 16,670 ops/sec [16,543..17,200] → 17,615 ops/sec [17,377..17,897] 🟢 +5.7% 17,118 ops/sec [16,929..17,663] → 16,866 ops/sec [16,649..16,975] ~ overlap (-1.5%)
zip strict mode (20 + 20 elements) 17,852 ops/sec [17,542..18,375] → 19,223 ops/sec [18,947..19,322] 🟢 +7.7% 18,835 ops/sec [18,522..19,304] → 18,020 ops/sec [17,677..18,317] 🔴 -4.3%
zip + map + toArray (20 + 20 elements) 7,105 ops/sec [7,088..7,160] → 7,913 ops/sec [7,830..8,043] 🟢 +11.4% 5,880 ops/sec [5,702..5,914] → 5,707 ops/sec [5,659..5,797] ~ overlap (-3.0%)
zip + filter + toArray (20 + 20 elements) 7,210 ops/sec [7,152..7,244] → 7,665 ops/sec [7,595..7,731] 🟢 +6.3% 5,712 ops/sec [5,579..5,832] → 5,600 ops/sec [5,571..5,609] ~ overlap (-2.0%)
zip Sets (15 + 15 elements) 23,431 ops/sec [23,282..23,516] → 24,777 ops/sec [24,574..25,354] 🟢 +5.7% 23,545 ops/sec [23,385..24,388] → 23,501 ops/sec [23,094..23,584] ~ overlap (-0.2%)
zipKeyed 2 keys (10 elements each) 28,935 ops/sec [28,738..29,058] → 30,497 ops/sec [30,169..30,799] 🟢 +5.4% 29,502 ops/sec [28,914..30,187] → 29,390 ops/sec [29,306..29,515] ~ overlap (-0.4%)
zipKeyed 3 keys (20 elements each) 14,598 ops/sec [14,394..14,899] → 15,754 ops/sec [15,386..15,953] 🟢 +7.9% 15,017 ops/sec [14,797..15,556] → 14,657 ops/sec [14,503..14,750] 🔴 -2.4%
zipKeyed longest mode (10 + 20 elements) 16,907 ops/sec [16,636..17,200] → 18,056 ops/sec [17,837..18,372] 🟢 +6.8% 17,371 ops/sec [16,828..17,682] → 16,749 ops/sec [16,494..16,968] ~ overlap (-3.6%)
zipKeyed strict mode (20 + 20 elements) 17,504 ops/sec [17,365..17,602] → 18,749 ops/sec [18,205..19,325] 🟢 +7.1% 18,344 ops/sec [18,126..18,814] → 17,661 ops/sec [17,541..17,754] 🔴 -3.7%
zipKeyed + filter + map (20 elements) 5,215 ops/sec [5,138..5,232] → 5,622 ops/sec [5,606..5,633] 🟢 +7.8% 7,508 ops/sec [7,421..7,601] → 6,746 ops/sec [6,649..6,855] 🔴 -10.1%
array.values().map().filter().toArray() 2,624 ops/sec [2,530..2,647] → 2,926 ops/sec [2,896..2,979] 🟢 +11.5% 5,008 ops/sec [4,786..5,149] → 4,364 ops/sec [4,036..4,417] 🔴 -12.9%
array.values().take(5).toArray() 95,663 ops/sec [93,262..99,062] → 99,168 ops/sec [97,962..102,418] ~ overlap (+3.7%) 111,078 ops/sec [108,822..113,120] → 105,272 ops/sec [104,280..106,452] 🔴 -5.2%
array.values().drop(45).toArray() 77,800 ops/sec [77,260..78,227] → 81,597 ops/sec [80,720..83,317] 🟢 +4.9% 89,017 ops/sec [86,970..91,792] → 84,898 ops/sec [83,085..85,495] 🔴 -4.6%
map.entries() chained helpers 3,873 ops/sec [3,799..3,897] → 4,297 ops/sec [4,263..4,419] 🟢 +11.0% 2,970 ops/sec [2,893..3,018] → 2,944 ops/sec [2,913..3,029] ~ overlap (-0.9%)
set.values() chained helpers 6,109 ops/sec [6,051..6,150] → 6,675 ops/sec [6,555..6,767] 🟢 +9.3% 10,640 ops/sec [10,568..10,809] → 9,705 ops/sec [9,618..9,757] 🔴 -8.8%
string iterator map + toArray 5,291 ops/sec [5,194..5,398] → 5,621 ops/sec [5,509..5,697] 🟢 +6.2% 5,990 ops/sec [5,946..6,035] → 5,716 ops/sec [5,704..5,867] 🔴 -4.6%
json.js — Interp: 🟢 20 · avg +13.2% · Bytecode: 🔴 20 · avg -10.4%
Benchmark Interpreted Δ Bytecode Δ
parse simple object 68,466 ops/sec [68,147..70,787] → 78,183 ops/sec [77,320..78,756] 🟢 +14.2% 81,757 ops/sec [80,684..84,870] → 73,166 ops/sec [70,225..74,145] 🔴 -10.5%
parse nested object 45,499 ops/sec [44,987..45,748] → 52,312 ops/sec [51,354..53,007] 🟢 +15.0% 52,722 ops/sec [52,490..57,025] → 46,872 ops/sec [46,289..46,947] 🔴 -11.1%
parse array of objects 27,688 ops/sec [26,732..27,995] → 31,239 ops/sec [31,072..31,715] 🟢 +12.8% 31,545 ops/sec [31,389..31,584] → 28,069 ops/sec [27,726..29,389] 🔴 -11.0%
parse large flat object 29,563 ops/sec [28,725..30,263] → 33,895 ops/sec [32,405..35,641] 🟢 +14.7% 34,957 ops/sec [33,910..35,939] → 30,043 ops/sec [29,399..30,771] 🔴 -14.1%
parse mixed types 34,184 ops/sec [33,992..35,548] → 39,911 ops/sec [38,991..40,257] 🟢 +16.8% 39,861 ops/sec [39,266..40,437] → 35,747 ops/sec [35,041..35,940] 🔴 -10.3%
stringify simple object 75,570 ops/sec [75,084..76,242] → 82,870 ops/sec [81,213..85,766] 🟢 +9.7% 81,452 ops/sec [80,793..82,314] → 73,770 ops/sec [72,683..74,506] 🔴 -9.4%
stringify nested object 43,801 ops/sec [43,290..44,137] → 49,252 ops/sec [48,361..50,083] 🟢 +12.4% 46,062 ops/sec [45,515..47,367] → 40,857 ops/sec [40,201..40,903] 🔴 -11.3%
stringify array of objects 18,761 ops/sec [18,700..18,800] → 21,587 ops/sec [21,377..21,621] 🟢 +15.1% 21,982 ops/sec [21,178..22,264] → 19,079 ops/sec [18,435..19,314] 🔴 -13.2%
stringify mixed types 28,903 ops/sec [28,564..29,170] → 32,751 ops/sec [32,396..33,498] 🟢 +13.3% 31,171 ops/sec [30,635..32,120] → 27,492 ops/sec [27,143..28,024] 🔴 -11.8%
reviver doubles numbers 14,002 ops/sec [13,855..14,139] → 15,744 ops/sec [15,617..16,134] 🟢 +12.4% 19,645 ops/sec [19,206..20,390] → 17,652 ops/sec [17,394..17,920] 🔴 -10.1%
reviver filters properties 13,311 ops/sec [13,091..13,562] → 15,113 ops/sec [14,895..15,149] 🟢 +13.5% 16,737 ops/sec [16,274..17,123] → 15,030 ops/sec [14,843..15,146] 🔴 -10.2%
reviver on nested object 16,188 ops/sec [16,135..16,220] → 18,360 ops/sec [18,244..18,503] 🟢 +13.4% 20,975 ops/sec [20,660..21,552] → 18,947 ops/sec [18,640..19,060] 🔴 -9.7%
reviver on array 8,480 ops/sec [8,250..8,531] → 9,551 ops/sec [9,365..9,658] 🟢 +12.6% 12,206 ops/sec [11,995..12,287] → 11,134 ops/sec [10,923..11,220] 🔴 -8.8%
replacer function doubles numbers 16,118 ops/sec [15,958..16,352] → 18,406 ops/sec [18,374..18,449] 🟢 +14.2% 23,501 ops/sec [22,944..23,790] → 21,089 ops/sec [21,011..21,189] 🔴 -10.3%
replacer function excludes properties 21,834 ops/sec [21,607..22,092] → 24,453 ops/sec [24,028..24,658] 🟢 +12.0% 28,658 ops/sec [27,742..29,184] → 26,430 ops/sec [26,170..26,808] 🔴 -7.8%
array replacer (allowlist) 47,159 ops/sec [46,838..47,653] → 52,894 ops/sec [52,357..53,831] 🟢 +12.2% 49,214 ops/sec [48,816..49,688] → 44,999 ops/sec [44,906..45,157] 🔴 -8.6%
stringify with 2-space indent 38,065 ops/sec [37,431..38,242] → 42,750 ops/sec [42,089..43,687] 🟢 +12.3% 42,085 ops/sec [42,000..42,343] → 37,945 ops/sec [37,538..38,350] 🔴 -9.8%
stringify with tab indent 38,862 ops/sec [37,665..40,031] → 42,842 ops/sec [42,061..44,203] 🟢 +10.2% 40,712 ops/sec [40,135..41,495] → 37,494 ops/sec [36,922..37,963] 🔴 -7.9%
parse then stringify 23,170 ops/sec [22,563..23,530] → 26,201 ops/sec [25,810..26,339] 🟢 +13.1% 26,284 ops/sec [25,820..26,947] → 23,491 ops/sec [23,331..23,631] 🔴 -10.6%
stringify then parse 13,653 ops/sec [13,535..13,680] → 15,673 ops/sec [15,344..15,896] 🟢 +14.8% 15,670 ops/sec [15,490..16,306] → 14,001 ops/sec [13,816..14,191] 🔴 -10.7%
jsx.jsx — Interp: 🟢 18, 3 unch. · avg +7.6% · Bytecode: 🟢 1, 🔴 7, 13 unch. · avg -2.2%
Benchmark Interpreted Δ Bytecode Δ
simple element 90,643 ops/sec [87,912..91,473] → 95,514 ops/sec [93,696..96,931] 🟢 +5.4% 140,975 ops/sec [139,780..143,818] → 138,981 ops/sec [137,291..140,144] ~ overlap (-1.4%)
self-closing element 93,719 ops/sec [91,306..94,496] → 100,114 ops/sec [99,230..104,025] 🟢 +6.8% 158,092 ops/sec [154,797..160,317] → 150,657 ops/sec [149,096..150,860] 🔴 -4.7%
element with string attribute 79,554 ops/sec [77,627..80,439] → 85,617 ops/sec [82,240..86,418] 🟢 +7.6% 114,322 ops/sec [112,737..116,819] → 111,002 ops/sec [109,773..111,956] 🔴 -2.9%
element with multiple attributes 70,176 ops/sec [69,246..70,573] → 76,880 ops/sec [76,214..77,945] 🟢 +9.6% 86,993 ops/sec [86,405..88,421] → 85,651 ops/sec [82,978..87,841] ~ overlap (-1.5%)
element with expression attribute 73,361 ops/sec [72,984..73,937] → 78,522 ops/sec [76,157..80,906] 🟢 +7.0% 117,895 ops/sec [117,154..126,147] → 116,175 ops/sec [115,020..120,044] ~ overlap (-1.5%)
text child 88,424 ops/sec [88,278..88,845] → 97,393 ops/sec [96,835..99,613] 🟢 +10.1% 149,972 ops/sec [146,702..156,325] → 138,352 ops/sec [135,688..140,830] 🔴 -7.7%
expression child 87,414 ops/sec [86,343..88,273] → 94,346 ops/sec [92,999..95,784] 🟢 +7.9% 136,136 ops/sec [134,225..138,428] → 129,102 ops/sec [128,042..129,917] 🔴 -5.2%
mixed text and expression 85,567 ops/sec [84,079..89,168] → 89,924 ops/sec [86,084..92,276] ~ overlap (+5.1%) 121,096 ops/sec [119,123..123,438] → 113,490 ops/sec [112,521..114,041] 🔴 -6.3%
nested elements (3 levels) 35,175 ops/sec [34,627..36,135] → 40,249 ops/sec [36,484..40,883] 🟢 +14.4% 58,103 ops/sec [52,146..58,772] → 56,193 ops/sec [54,058..57,259] ~ overlap (-3.3%)
sibling children 26,323 ops/sec [25,854..26,459] → 30,636 ops/sec [29,877..31,035] 🟢 +16.4% 38,471 ops/sec [37,957..39,354] → 38,796 ops/sec [38,646..39,388] ~ overlap (+0.8%)
component element 68,743 ops/sec [67,437..69,168] → 74,206 ops/sec [73,255..75,683] 🟢 +7.9% 101,202 ops/sec [100,437..104,336] → 104,683 ops/sec [103,559..106,687] ~ overlap (+3.4%)
component with children 42,194 ops/sec [41,930..42,785] → 47,647 ops/sec [47,162..47,868] 🟢 +12.9% 62,554 ops/sec [62,312..63,317] → 63,739 ops/sec [63,399..65,662] 🟢 +1.9%
dotted component 59,694 ops/sec [58,530..60,428] → 66,866 ops/sec [64,812..67,302] 🟢 +12.0% 80,835 ops/sec [79,878..82,183] → 77,058 ops/sec [75,960..84,775] ~ overlap (-4.7%)
empty fragment 94,847 ops/sec [93,651..96,352] → 101,022 ops/sec [98,611..102,003] 🟢 +6.5% 171,234 ops/sec [169,331..174,998] → 163,959 ops/sec [162,561..165,250] 🔴 -4.2%
fragment with children 26,106 ops/sec [25,799..26,898] → 28,063 ops/sec [27,512..28,532] 🟢 +7.5% 39,655 ops/sec [39,019..40,010] → 38,675 ops/sec [38,599..40,525] ~ overlap (-2.5%)
spread attributes 50,451 ops/sec [49,524..50,794] → 54,113 ops/sec [53,618..55,590] 🟢 +7.3% 60,920 ops/sec [60,483..61,446] → 59,900 ops/sec [59,051..61,475] ~ overlap (-1.7%)
spread with overrides 45,768 ops/sec [44,232..46,115] → 48,166 ops/sec [47,310..49,616] 🟢 +5.2% 52,762 ops/sec [52,320..53,005] → 51,493 ops/sec [50,795..52,338] ~ overlap (-2.4%)
shorthand props 73,530 ops/sec [71,161..75,035] → 74,329 ops/sec [72,923..75,618] ~ overlap (+1.1%) 93,730 ops/sec [92,813..94,364] → 92,587 ops/sec [89,258..93,670] ~ overlap (-1.2%)
nav bar structure 13,112 ops/sec [12,967..13,290] → 13,301 ops/sec [13,195..13,616] ~ overlap (+1.4%) 18,320 ops/sec [18,119..18,523] → 18,147 ops/sec [18,058..18,238] ~ overlap (-0.9%)
card component tree 15,154 ops/sec [14,859..15,234] → 15,809 ops/sec [15,662..15,928] 🟢 +4.3% 19,528 ops/sec [19,221..19,695] → 19,701 ops/sec [19,627..19,736] ~ overlap (+0.9%)
10 list items via Array.from 6,642 ops/sec [6,636..6,694] → 6,880 ops/sec [6,719..6,993] 🟢 +3.6% 8,852 ops/sec [8,800..8,910] → 8,684 ops/sec [8,644..8,777] 🔴 -1.9%
modules.js — Interp: 🟢 9 · avg +8.9% · Bytecode: 🔴 9 · avg -16.4%
Benchmark Interpreted Δ Bytecode Δ
call imported function 152,613 ops/sec [147,685..153,786] → 167,072 ops/sec [163,204..171,820] 🟢 +9.5% 769,972 ops/sec [766,670..788,999] → 652,382 ops/sec [649,909..654,506] 🔴 -15.3%
call two imported functions 86,794 ops/sec [84,401..87,934] → 96,133 ops/sec [93,344..97,461] 🟢 +10.8% 506,566 ops/sec [499,251..515,981] → 427,599 ops/sec [426,800..430,789] 🔴 -15.6%
read imported constant 500,665 ops/sec [486,483..510,434] → 530,396 ops/sec [515,153..542,598] 🟢 +5.9% 1,885,350 ops/sec [1,821,172..1,961,984] → 1,573,166 ops/sec [1,549,304..1,592,187] 🔴 -16.6%
read imported string 488,347 ops/sec [474,011..501,164] → 530,598 ops/sec [515,500..539,990] 🟢 +8.7% 1,898,060 ops/sec [1,829,452..1,934,933] → 1,577,885 ops/sec [1,549,420..1,592,676] 🔴 -16.9%
read JSON string property 488,226 ops/sec [472,860..497,444] → 532,512 ops/sec [517,332..545,739] 🟢 +9.1% 1,885,818 ops/sec [1,821,255..2,013,710] → 1,582,298 ops/sec [1,542,312..1,598,651] 🔴 -16.1%
read JSON number property 480,210 ops/sec [472,628..496,181] → 523,428 ops/sec [516,909..535,354] 🟢 +9.0% 1,887,298 ops/sec [1,817,562..1,942,213] → 1,571,060 ops/sec [1,560,284..1,584,893] 🔴 -16.8%
read JSON boolean property 484,647 ops/sec [469,750..493,187] → 518,767 ops/sec [514,785..547,867] 🟢 +7.0% 1,905,096 ops/sec [1,854,751..1,913,668] → 1,572,373 ops/sec [1,566,130..1,578,766] 🔴 -17.5%
read JSON array property 481,910 ops/sec [479,504..485,198] → 526,056 ops/sec [515,375..546,451] 🟢 +9.2% 1,889,561 ops/sec [1,627,762..1,913,666] → 1,562,773 ops/sec [1,548,386..1,566,758] 🔴 -17.3%
read multiple JSON properties 293,987 ops/sec [288,807..297,332] → 326,931 ops/sec [323,379..330,829] 🟢 +11.2% 1,574,562 ops/sec [1,522,378..1,638,075] → 1,326,964 ops/sec [1,307,711..1,367,012] 🔴 -15.7%
numbers.js — Interp: 🟢 11 · avg +12.6% · Bytecode: 🔴 11 · avg -9.7%
Benchmark Interpreted Δ Bytecode Δ
integer arithmetic 159,035 ops/sec [156,855..161,031] → 180,682 ops/sec [175,103..192,634] 🟢 +13.6% 761,395 ops/sec [738,320..807,848] → 684,410 ops/sec [677,251..691,537] 🔴 -10.1%
floating point arithmetic 191,505 ops/sec [185,755..193,186] → 212,291 ops/sec [206,540..218,309] 🟢 +10.9% 318,899 ops/sec [317,470..319,943] → 286,004 ops/sec [284,408..289,338] 🔴 -10.3%
number coercion 71,757 ops/sec [69,881..72,441] → 81,113 ops/sec [79,492..86,638] 🟢 +13.0% 103,922 ops/sec [103,669..104,203] → 87,798 ops/sec [87,619..88,767] 🔴 -15.5%
toFixed 42,034 ops/sec [41,958..42,656] → 47,345 ops/sec [46,311..47,951] 🟢 +12.6% 43,839 ops/sec [42,540..45,048] → 40,620 ops/sec [40,523..40,677] 🔴 -7.3%
toString 63,940 ops/sec [63,448..64,169] → 69,748 ops/sec [68,976..71,845] 🟢 +9.1% 73,216 ops/sec [71,697..74,914] → 68,700 ops/sec [67,334..69,258] 🔴 -6.2%
valueOf 94,642 ops/sec [93,582..94,867] → 104,645 ops/sec [101,458..106,073] 🟢 +10.6% 114,207 ops/sec [111,208..114,831] → 104,034 ops/sec [103,170..104,733] 🔴 -8.9%
toPrecision 37,256 ops/sec [36,837..37,435] → 40,643 ops/sec [40,123..42,045] 🟢 +9.1% 37,785 ops/sec [37,143..39,335] → 35,595 ops/sec [35,118..36,421] 🔴 -5.8%
Number.isNaN 112,109 ops/sec [111,653..112,541] → 129,514 ops/sec [126,029..132,111] 🟢 +15.5% 131,834 ops/sec [130,633..133,153] → 118,021 ops/sec [113,618..121,098] 🔴 -10.5%
Number.isFinite 109,373 ops/sec [107,954..110,635] → 126,746 ops/sec [126,126..131,637] 🟢 +15.9% 111,882 ops/sec [110,615..112,598] → 101,336 ops/sec [99,962..103,151] 🔴 -9.4%
Number.isInteger 113,859 ops/sec [111,273..114,098] → 129,910 ops/sec [127,520..137,104] 🟢 +14.1% 120,112 ops/sec [115,669..124,704] → 106,022 ops/sec [105,486..107,192] 🔴 -11.7%
Number.parseInt and parseFloat 89,864 ops/sec [89,224..90,893] → 102,718 ops/sec [100,318..105,703] 🟢 +14.3% 89,800 ops/sec [85,960..90,854] → 79,801 ops/sec [78,941..81,036] 🔴 -11.1%
objects.js — Interp: 🟢 3, 🔴 1, 3 unch. · avg +1.2% · Bytecode: 🔴 4, 3 unch. · avg -3.1%
Benchmark Interpreted Δ Bytecode Δ
create simple object 210,017 ops/sec [204,092..213,255] → 205,186 ops/sec [201,726..211,292] ~ overlap (-2.3%) 250,613 ops/sec [248,232..252,310] → 248,286 ops/sec [247,043..248,940] ~ overlap (-0.9%)
create nested object 111,813 ops/sec [107,297..112,977] → 110,941 ops/sec [109,575..113,470] ~ overlap (-0.8%) 105,413 ops/sec [102,402..108,715] → 106,044 ops/sec [105,094..106,514] ~ overlap (+0.6%)
create 50 objects via Array.from 3,973 ops/sec [3,922..4,074] → 4,106 ops/sec [4,078..4,110] 🟢 +3.3% 4,420 ops/sec [4,395..4,505] → 4,362 ops/sec [4,324..4,384] 🔴 -1.3%
property read 192,764 ops/sec [186,578..193,567] → 200,732 ops/sec [198,584..204,270] 🟢 +4.1% 318,417 ops/sec [314,076..320,914] → 282,117 ops/sec [281,149..283,214] 🔴 -11.4%
Object.keys 120,591 ops/sec [119,637..121,922] → 125,921 ops/sec [125,740..126,265] 🟢 +4.4% 138,617 ops/sec [137,130..139,990] → 134,604 ops/sec [132,461..134,618] 🔴 -2.9%
Object.entries 48,991 ops/sec [48,133..50,253] → 50,038 ops/sec [49,503..50,184] ~ overlap (+2.1%) 50,394 ops/sec [48,458..51,137] → 49,952 ops/sec [49,402..50,418] ~ overlap (-0.9%)
spread operator 91,124 ops/sec [89,814..91,711] → 89,115 ops/sec [87,295..89,534] 🔴 -2.2% 100,101 ops/sec [97,170..100,238] → 95,486 ops/sec [94,437..96,964] 🔴 -4.6%
promises.js — Interp: 🟢 11, 1 unch. · avg +9.8% · Bytecode: 🔴 12 · avg -9.3%
Benchmark Interpreted Δ Bytecode Δ
Promise.resolve(value) 199,083 ops/sec [198,941..199,729] → 216,926 ops/sec [211,252..220,158] 🟢 +9.0% 241,285 ops/sec [236,337..248,219] → 223,359 ops/sec [207,885..226,213] 🔴 -7.4%
new Promise(resolve => resolve(value)) 77,339 ops/sec [76,664..78,170] → 83,295 ops/sec [82,713..85,483] 🟢 +7.7% 112,383 ops/sec [110,106..115,558] → 100,807 ops/sec [99,980..101,902] 🔴 -10.3%
Promise.reject(reason) 204,026 ops/sec [201,653..204,977] → 223,543 ops/sec [220,744..226,198] 🟢 +9.6% 238,940 ops/sec [237,076..253,384] → 215,116 ops/sec [213,524..218,199] 🔴 -10.0%
resolve + then (1 handler) 73,094 ops/sec [71,650..73,602] → 80,967 ops/sec [78,855..81,319] 🟢 +10.8% 100,492 ops/sec [99,852..101,142] → 89,654 ops/sec [88,290..90,267] 🔴 -10.8%
resolve + then chain (3 deep) 29,915 ops/sec [29,556..30,247] → 33,084 ops/sec [32,278..33,655] 🟢 +10.6% 42,763 ops/sec [42,148..43,443] → 38,738 ops/sec [37,808..39,296] 🔴 -9.4%
resolve + then chain (10 deep) 9,961 ops/sec [9,856..10,074] → 11,010 ops/sec [10,695..11,111] 🟢 +10.5% 13,983 ops/sec [13,884..14,190] → 12,820 ops/sec [12,506..13,053] 🔴 -8.3%
reject + catch + then 42,026 ops/sec [41,521..43,305] → 46,712 ops/sec [43,009..48,624] ~ overlap (+11.1%) 57,144 ops/sec [55,113..59,554] → 51,307 ops/sec [50,559..52,263] 🔴 -10.2%
resolve + finally + then 37,245 ops/sec [36,332..37,421] → 40,625 ops/sec [39,452..42,096] 🟢 +9.1% 47,599 ops/sec [46,626..48,436] → 43,107 ops/sec [42,836..43,585] 🔴 -9.4%
Promise.all (5 resolved) 15,267 ops/sec [15,044..15,406] → 17,234 ops/sec [16,680..17,520] 🟢 +12.9% 16,512 ops/sec [16,088..17,408] → 15,305 ops/sec [15,003..15,482] 🔴 -7.3%
Promise.race (5 resolved) 16,794 ops/sec [16,718..16,912] → 18,231 ops/sec [18,118..18,371] 🟢 +8.6% 17,935 ops/sec [17,323..18,222] → 15,944 ops/sec [15,692..16,046] 🔴 -11.1%
Promise.allSettled (5 mixed) 13,294 ops/sec [13,116..13,468] → 14,365 ops/sec [14,095..14,773] 🟢 +8.1% 14,260 ops/sec [13,967..15,014] → 13,072 ops/sec [12,835..13,302] 🔴 -8.3%
Promise.any (5 mixed) 15,638 ops/sec [15,420..15,899] → 17,200 ops/sec [17,084..17,220] 🟢 +10.0% 16,818 ops/sec [16,364..17,317] → 15,314 ops/sec [14,851..15,549] 🔴 -8.9%
regexp.js — Interp: 🟢 11 · avg +10.4% · Bytecode: 🔴 10, 1 unch. · avg -7.1%
Benchmark Interpreted Δ Bytecode Δ
regex literal creation 70,075 ops/sec [68,448..70,546] → 77,287 ops/sec [75,899..80,811] 🟢 +10.3% 67,279 ops/sec [66,451..69,519] → 64,677 ops/sec [64,228..66,194] 🔴 -3.9%
new RegExp(pattern, flags) 60,469 ops/sec [59,736..60,993] → 68,354 ops/sec [65,497..68,805] 🟢 +13.0% 66,648 ops/sec [64,647..67,289] → 64,495 ops/sec [63,495..65,080] ~ overlap (-3.2%)
RegExp(existingRegex) returns the same regex 247,747 ops/sec [244,206..249,850] → 280,336 ops/sec [273,157..289,063] 🟢 +13.2% 442,629 ops/sec [429,574..461,368] → 401,012 ops/sec [397,804..402,238] 🔴 -9.4%
test() on a global regex 63,611 ops/sec [62,496..63,809] → 71,234 ops/sec [68,731..71,636] 🟢 +12.0% 78,762 ops/sec [78,242..78,999] → 73,188 ops/sec [72,853..73,718] 🔴 -7.1%
exec() with capture groups 54,641 ops/sec [53,512..55,385] → 60,734 ops/sec [59,639..61,510] 🟢 +11.2% 66,589 ops/sec [64,955..67,983] → 61,486 ops/sec [60,838..62,020] 🔴 -7.7%
toString() 185,912 ops/sec [183,268..187,932] → 208,705 ops/sec [204,950..211,310] 🟢 +12.3% 259,170 ops/sec [249,241..273,292] → 235,263 ops/sec [232,767..235,577] 🔴 -9.2%
match() with global regex 19,359 ops/sec [19,229..19,592] → 20,873 ops/sec [20,502..21,161] 🟢 +7.8% 20,455 ops/sec [19,356..20,647] → 18,818 ops/sec [18,756..19,029] 🔴 -8.0%
matchAll() with capture groups 9,919 ops/sec [9,816..9,955] → 10,700 ops/sec [10,568..11,078] 🟢 +7.9% 12,976 ops/sec [12,862..13,012] → 11,898 ops/sec [11,820..12,048] 🔴 -8.3%
replace() with global regex 18,959 ops/sec [18,487..19,161] → 20,829 ops/sec [20,225..21,232] 🟢 +9.9% 19,745 ops/sec [19,530..20,478] → 18,489 ops/sec [18,468..18,518] 🔴 -6.4%
search() with regex 38,350 ops/sec [38,170..38,859] → 42,636 ops/sec [41,638..43,623] 🟢 +11.2% 39,999 ops/sec [39,172..40,383] → 36,890 ops/sec [36,562..37,208] 🔴 -7.8%
split() with regex separator 19,458 ops/sec [19,035..19,578] → 20,493 ops/sec [20,391..20,975] 🟢 +5.3% 20,710 ops/sec [20,204..20,920] → 19,238 ops/sec [19,112..19,459] 🔴 -7.1%
strings.js — Interp: 🟢 15, 4 unch. · avg +8.2% · Bytecode: 🔴 18, 1 unch. · avg -7.8%
Benchmark Interpreted Δ Bytecode Δ
string concatenation 150,299 ops/sec [148,521..152,119] → 152,642 ops/sec [151,523..154,577] ~ overlap (+1.6%) 979,470 ops/sec [947,587..1,024,563] → 879,766 ops/sec [870,249..887,663] 🔴 -10.2%
template literal 288,022 ops/sec [276,932..294,714] → 296,723 ops/sec [292,467..300,305] ~ overlap (+3.0%) 662,402 ops/sec [658,695..665,276] → 598,952 ops/sec [596,467..601,999] 🔴 -9.6%
string repeat 169,653 ops/sec [164,780..172,854] → 179,368 ops/sec [168,427..184,312] ~ overlap (+5.7%) 205,651 ops/sec [199,444..207,504] → 190,514 ops/sec [189,661..193,400] 🔴 -7.4%
split and join 28,662 ops/sec [27,539..29,087] → 30,954 ops/sec [29,220..31,378] 🟢 +8.0% 30,240 ops/sec [29,625..30,894] → 28,709 ops/sec [28,086..28,898] 🔴 -5.1%
indexOf and includes 52,755 ops/sec [52,251..53,119] → 56,747 ops/sec [56,296..58,972] 🟢 +7.6% 51,341 ops/sec [49,819..51,527] → 48,592 ops/sec [48,115..49,164] 🔴 -5.4%
toUpperCase and toLowerCase 86,422 ops/sec [83,276..87,933] → 91,669 ops/sec [90,764..92,574] 🟢 +6.1% 90,823 ops/sec [87,524..92,031] → 85,394 ops/sec [84,668..86,603] 🔴 -6.0%
slice and substring 50,796 ops/sec [50,306..51,840] → 54,806 ops/sec [54,311..56,697] 🟢 +7.9% 55,823 ops/sec [55,509..56,292] → 52,283 ops/sec [52,119..52,353] 🔴 -6.3%
trim operations 76,427 ops/sec [76,142..76,499] → 83,783 ops/sec [81,860..85,169] 🟢 +9.6% 79,021 ops/sec [77,511..80,447] → 78,618 ops/sec [76,798..79,724] ~ overlap (-0.5%)
replace and replaceAll 78,258 ops/sec [77,186..79,559] → 84,963 ops/sec [84,648..85,580] 🟢 +8.6% 75,807 ops/sec [74,888..77,093] → 72,141 ops/sec [71,756..72,373] 🔴 -4.8%
startsWith and endsWith 48,977 ops/sec [48,714..49,271] → 54,718 ops/sec [54,367..55,295] 🟢 +11.7% 46,257 ops/sec [45,846..46,276] → 44,078 ops/sec [43,531..44,882] 🔴 -4.7%
padStart and padEnd 72,179 ops/sec [71,619..72,556] → 79,342 ops/sec [77,757..79,629] 🟢 +9.9% 73,374 ops/sec [73,030..74,769] → 71,804 ops/sec [71,407..72,414] 🔴 -2.1%
identity tag, no substitutions 162,184 ops/sec [157,590..163,020] → 182,096 ops/sec [175,920..188,069] 🟢 +12.3% 631,936 ops/sec [630,587..632,676] → 524,089 ops/sec [522,233..531,562] 🔴 -17.1%
tag with 1 substitution 34,748 ops/sec [34,306..34,984] → 37,474 ops/sec [37,087..38,925] 🟢 +7.8% 54,675 ops/sec [53,887..55,238] → 48,929 ops/sec [48,726..49,561] 🔴 -10.5%
tag with 3 substitutions 18,159 ops/sec [18,118..18,208] → 20,568 ops/sec [20,095..20,687] 🟢 +13.3% 32,559 ops/sec [32,125..33,072] → 28,798 ops/sec [28,547..28,927] 🔴 -11.5%
tag with 6 substitutions 10,975 ops/sec [10,812..11,079] → 11,998 ops/sec [11,900..12,031] 🟢 +9.3% 19,133 ops/sec [18,919..19,437] → 17,092 ops/sec [16,868..17,305] 🔴 -10.7%
String.raw, no substitutions 222,306 ops/sec [217,576..224,157] → 244,071 ops/sec [241,506..246,002] 🟢 +9.8% 259,009 ops/sec [254,953..265,325] → 225,965 ops/sec [225,080..228,752] 🔴 -12.8%
String.raw, 2 substitutions 162,458 ops/sec [159,467..164,124] → 171,968 ops/sec [170,886..178,222] 🟢 +5.9% 162,933 ops/sec [161,900..165,100] → 147,527 ops/sec [146,684..148,023] 🔴 -9.5%
tag accessing .raw array 67,262 ops/sec [65,890..67,962] → 71,949 ops/sec [71,147..72,387] 🟢 +7.0% 95,256 ops/sec [94,707..97,038] → 88,745 ops/sec [88,151..88,991] 🔴 -6.8%
method as tag (this binding) 25,057 ops/sec [24,853..25,928] → 27,730 ops/sec [25,360..27,866] ~ overlap (+10.7%) 42,259 ops/sec [41,933..42,762] → 39,146 ops/sec [38,889..39,451] 🔴 -7.4%
tsv.js — Interp: 🟢 8, 1 unch. · avg +9.6% · Bytecode: 🔴 9 · avg -10.4%
Benchmark Interpreted Δ Bytecode Δ
parse simple 3-column TSV 47,503 ops/sec [46,045..49,477] → 51,460 ops/sec [51,093..52,126] 🟢 +8.3% 54,879 ops/sec [53,077..55,646] → 49,102 ops/sec [48,595..49,973] 🔴 -10.5%
parse 10-row TSV 13,031 ops/sec [12,702..13,187] → 14,560 ops/sec [14,487..14,563] 🟢 +11.7% 14,403 ops/sec [13,961..15,107] → 13,017 ops/sec [12,945..13,824] 🔴 -9.6%
parse 100-row TSV 2,057 ops/sec [2,021..2,064] → 2,280 ops/sec [2,256..2,285] 🟢 +10.8% 2,248 ops/sec [2,210..2,350] → 2,025 ops/sec [1,987..2,090] 🔴 -9.9%
parse TSV with backslash-escaped fields 9,589 ops/sec [9,489..9,817] → 10,327 ops/sec [10,177..10,382] 🟢 +7.7% 10,477 ops/sec [10,114..10,699] → 9,676 ops/sec [9,559..9,779] 🔴 -7.6%
parse without headers (array of arrays) 5,644 ops/sec [5,546..5,684] → 6,211 ops/sec [6,093..6,502] 🟢 +10.0% 6,457 ops/sec [6,276..6,715] → 5,846 ops/sec [5,743..5,974] 🔴 -9.5%
stringify array of objects 40,012 ops/sec [39,445..40,587] → 45,073 ops/sec [44,844..45,571] 🟢 +12.6% 46,758 ops/sec [46,629..47,586] → 40,972 ops/sec [40,458..41,586] 🔴 -12.4%
stringify array of arrays 11,737 ops/sec [11,598..11,933] → 12,885 ops/sec [12,667..13,428] 🟢 +9.8% 13,092 ops/sec [13,033..13,124] → 11,431 ops/sec [11,097..11,604] 🔴 -12.7%
stringify with values needing escaping 30,822 ops/sec [30,572..31,338] → 34,669 ops/sec [32,935..36,068] 🟢 +12.5% 35,129 ops/sec [34,586..37,843] → 30,741 ops/sec [30,190..32,165] 🔴 -12.5%
parse then stringify 7,539 ops/sec [7,414..7,685] → 7,760 ops/sec [7,671..8,222] ~ overlap (+2.9%) 8,093 ops/sec [7,872..8,368] → 7,362 ops/sec [7,275..7,417] 🔴 -9.0%
typed-arrays.js — Interp: 🟢 19, 🔴 1, 2 unch. · avg +9.3% · Bytecode: 🟢 6, 🔴 10, 6 unch. · avg +5.2%
Benchmark Interpreted Δ Bytecode Δ
new Int32Array(0) 115,643 ops/sec [115,210..116,060] → 124,891 ops/sec [119,238..128,767] 🟢 +8.0% 149,632 ops/sec [147,271..150,014] → 136,500 ops/sec [135,659..136,978] 🔴 -8.8%
new Int32Array(100) 109,089 ops/sec [108,293..111,624] → 118,888 ops/sec [116,078..121,573] 🟢 +9.0% 138,015 ops/sec [136,526..138,976] → 130,137 ops/sec [128,457..131,309] 🔴 -5.7%
new Int32Array(1000) 81,817 ops/sec [81,141..83,105] → 84,636 ops/sec [83,893..85,582] 🟢 +3.4% 95,131 ops/sec [94,406..96,638] → 95,611 ops/sec [94,185..97,782] ~ overlap (+0.5%)
new Float64Array(100) 105,367 ops/sec [102,436..107,974] → 113,092 ops/sec [111,312..114,114] 🟢 +7.3% 131,347 ops/sec [131,080..132,002] → 124,774 ops/sec [123,584..125,398] 🔴 -5.0%
Int32Array.from([...]) 4,908 ops/sec [4,808..4,987] → 5,241 ops/sec [5,165..5,305] 🟢 +6.8% 5,225 ops/sec [5,103..5,462] → 4,949 ops/sec [4,920..4,977] 🔴 -5.3%
Int32Array.of(1, 2, 3, 4, 5) 129,966 ops/sec [128,076..130,305] → 140,873 ops/sec [139,754..143,176] 🟢 +8.4% 160,902 ops/sec [160,394..166,105] → 157,783 ops/sec [154,609..158,762] 🔴 -1.9%
sequential write 100 elements 1,466 ops/sec [1,451..1,481] → 1,570 ops/sec [1,552..1,592] 🟢 +7.1% 6,946 ops/sec [6,840..7,218] → 6,386 ops/sec [6,315..6,422] 🔴 -8.1%
sequential read 100 elements 1,522 ops/sec [1,502..1,564] → 1,710 ops/sec [1,651..1,717] 🟢 +12.4% 6,842 ops/sec [6,781..6,928] → 6,250 ops/sec [6,108..10,419] ~ overlap (-8.7%)
Float64Array write 100 elements 1,350 ops/sec [1,330..1,369] → 1,429 ops/sec [1,410..1,440] 🟢 +5.9% 4,043 ops/sec [3,953..4,215] → 5,373 ops/sec [5,324..5,396] 🟢 +32.9%
fill(42) 25,546 ops/sec [25,243..26,017] → 28,573 ops/sec [28,385..28,992] 🟢 +11.8% 27,866 ops/sec [27,587..28,049] → 47,007 ops/sec [46,847..47,118] 🟢 +68.7%
slice() 110,302 ops/sec [109,987..111,208] → 113,243 ops/sec [112,533..114,389] 🟢 +2.7% 129,421 ops/sec [127,480..129,870] → 184,681 ops/sec [183,478..185,258] 🟢 +42.7%
map(x => x * 2) 2,641 ops/sec [2,632..2,644] → 2,889 ops/sec [2,846..2,919] 🟢 +9.4% 7,271 ops/sec [4,387..7,321] → 6,588 ops/sec [6,558..6,605] ~ overlap (-9.4%)
filter(x => x > 50) 2,684 ops/sec [2,670..2,704] → 4,700 ops/sec [2,932..5,055] 🟢 +75.1% 8,068 ops/sec [8,001..8,105] → 7,318 ops/sec [7,242..7,349] 🔴 -9.3%
reduce (sum) 4,339 ops/sec [4,314..4,351] → 4,868 ops/sec [4,825..4,919] 🟢 +12.2% 6,969 ops/sec [6,939..7,005] → 6,461 ops/sec [6,441..6,489] 🔴 -7.3%
sort() 145,330 ops/sec [144,417..146,025] → 136,995 ops/sec [134,555..138,768] 🔴 -5.7% 154,469 ops/sec [153,926..154,668] → 159,846 ops/sec [159,168..160,381] 🟢 +3.5%
indexOf() 292,261 ops/sec [291,858..292,799] → 307,993 ops/sec [305,571..311,068] 🟢 +5.4% 367,220 ops/sec [363,766..369,360] → 360,166 ops/sec [360,089..360,841] 🔴 -1.9%
reverse() 241,359 ops/sec [240,718..242,748] → 242,391 ops/sec [238,870..244,844] ~ overlap (+0.4%) 289,776 ops/sec [288,581..290,640] → 293,592 ops/sec [292,341..295,152] 🟢 +1.3%
create view over existing buffer 212,073 ops/sec [210,592..212,944] → 220,414 ops/sec [217,512..223,049] 🟢 +3.9% 270,418 ops/sec [172,456..274,190] → 254,953 ops/sec [253,047..256,609] ~ overlap (-5.7%)
subarray() 279,955 ops/sec [275,966..283,209] → 298,463 ops/sec [293,623..303,022] 🟢 +6.6% 231,910 ops/sec [221,296..351,340] → 335,568 ops/sec [331,819..337,622] ~ overlap (+44.7%)
set() from array 339,318 ops/sec [338,402..339,667] → 373,937 ops/sec [370,271..378,086] 🟢 +10.2% 485,912 ops/sec [484,874..487,835] → 439,177 ops/sec [437,772..440,473] 🔴 -9.6%
for-of loop 3,564 ops/sec [3,537..3,579] → 3,769 ops/sec [3,730..3,803] 🟢 +5.7% 16,663 ops/sec [16,556..17,210] → 17,741 ops/sec [17,671..17,791] 🟢 +6.5%
spread into array 14,131 ops/sec [14,037..14,285] → 13,981 ops/sec [13,900..14,165] ~ overlap (-1.1%) 58,874 ops/sec [58,511..59,650] → 58,604 ops/sec [58,298..59,226] ~ overlap (-0.5%)
uint8array-encoding.js — Interp: 🟢 9, 🔴 5, 4 unch. · avg +1.4% · Bytecode: 🟢 1, 🔴 15, 2 unch. · avg -10.9%
Benchmark Interpreted Δ Bytecode Δ
short (5 bytes) 261,072 ops/sec [258,539..261,887] → 290,815 ops/sec [285,918..293,569] 🟢 +11.4% 417,334 ops/sec [399,268..419,752] → 362,990 ops/sec [355,430..367,769] 🔴 -13.0%
medium (450 bytes) 148,429 ops/sec [146,505..149,309] → 162,329 ops/sec [159,845..164,107] 🟢 +9.4% 199,665 ops/sec [198,017..202,059] → 172,485 ops/sec [171,607..172,871] 🔴 -13.6%
large (4096 bytes) 32,861 ops/sec [31,577..33,028] → 35,246 ops/sec [32,799..35,463] ~ overlap (+7.3%) 35,351 ops/sec [35,023..36,671] → 32,719 ops/sec [32,518..33,629] 🔴 -7.4%
base64url alphabet 105,486 ops/sec [105,053..105,849] → 118,275 ops/sec [115,532..119,316] 🟢 +12.1% 124,389 ops/sec [122,929..124,882] → 112,872 ops/sec [111,771..113,640] 🔴 -9.3%
omitPadding 155,002 ops/sec [153,828..155,815] → 171,528 ops/sec [169,897..176,456] 🟢 +10.7% 193,358 ops/sec [190,303..195,454] → 178,804 ops/sec [178,572..179,534] 🔴 -7.5%
short (8 chars) 137,885 ops/sec [137,448..139,790] → 152,047 ops/sec [150,826..153,594] 🟢 +10.3% 169,031 ops/sec [168,013..169,722] → 154,334 ops/sec [153,530..154,718] 🔴 -8.7%
medium (600 chars) 70,597 ops/sec [70,082..71,133] → 73,031 ops/sec [72,341..75,352] 🟢 +3.4% 78,539 ops/sec [78,394..78,675] → 72,813 ops/sec [71,995..72,896] 🔴 -7.3%
large (5464 chars) 14,009 ops/sec [13,839..14,418] → 14,411 ops/sec [13,947..14,642] ~ overlap (+2.9%) 14,456 ops/sec [14,290..15,027] → 13,347 ops/sec [13,262..13,596] 🔴 -7.7%
short (5 bytes) 271,986 ops/sec [267,080..273,384] → 504,246 ops/sec [502,678..507,147] 🟢 +85.4% 474,057 ops/sec [468,450..488,647] → 430,920 ops/sec [428,922..432,406] 🔴 -9.1%
medium (450 bytes) 123,715 ops/sec [123,320..124,076] → 211,214 ops/sec [210,645..212,806] 🟢 +70.7% 168,081 ops/sec [167,412..168,641] → 155,471 ops/sec [155,130..155,727] 🔴 -7.5%
large (4096 bytes) 38,269 ops/sec [35,734..40,175] → 37,625 ops/sec [35,238..38,007] ~ overlap (-1.7%) 25,059 ops/sec [24,790..25,918] → 24,602 ops/sec [24,489..25,401] ~ overlap (-1.8%)
short (10 chars) 237,793 ops/sec [235,665..239,129] → 262,910 ops/sec [261,889..265,065] 🟢 +10.6% 184,699 ops/sec [182,571..187,180] → 175,186 ops/sec [172,739..176,478] 🔴 -5.2%
medium (900 chars) 173,953 ops/sec [172,084..175,650] → 123,736 ops/sec [104,507..176,555] ~ overlap (-28.9%) 116,130 ops/sec [112,693..118,317] → 107,432 ops/sec [106,234..109,005] 🔴 -7.5%
large (8192 chars) 50,879 ops/sec [50,846..50,927] → 27,149 ops/sec [26,327..28,266] 🔴 -46.6% 49,577 ops/sec [44,834..51,169] → 25,394 ops/sec [25,038..26,167] 🔴 -48.8%
setFromBase64 (450 bytes) 110,486 ops/sec [109,530..110,660] → 73,675 ops/sec [72,810..75,718] 🔴 -33.3% 128,319 ops/sec [127,568..128,817] → 73,361 ops/sec [72,809..126,088] 🔴 -42.8%
setFromHex (450 bytes) 157,291 ops/sec [155,621..158,093] → 104,239 ops/sec [102,863..105,333] 🔴 -33.7% 184,853 ops/sec [184,602..185,286] → 186,133 ops/sec [180,673..188,118] ~ overlap (+0.7%)
toBase64 → fromBase64 (450 bytes) 84,985 ops/sec [84,279..85,485] → 57,754 ops/sec [57,581..57,826] 🔴 -32.0% 89,953 ops/sec [89,780..90,449] → 88,974 ops/sec [78,683..89,538] 🔴 -1.1%
toHex → fromHex (450 bytes) 107,486 ops/sec [107,318..108,609] → 72,236 ops/sec [71,730..74,438] 🔴 -32.8% 115,594 ops/sec [113,078..116,352] → 118,185 ops/sec [116,958..118,929] 🟢 +2.2%
weak-collections.js — Interp: 🟢 10, 🔴 4, 1 unch. · avg +3.3% · Bytecode: 🔴 13, 2 unch. · avg -7.8%
Benchmark Interpreted Δ Bytecode Δ
constructor from 50 entries 11,575 ops/sec [11,378..11,901] → 13,492 ops/sec [13,094..13,924] 🟢 +16.6% 13,547 ops/sec [13,205..13,915] → 12,362 ops/sec [12,087..12,837] 🔴 -8.7%
set 50 object keys 4,296 ops/sec [4,246..4,331] → 4,810 ops/sec [4,654..7,909] 🟢 +12.0% 6,562 ops/sec [6,517..6,605] → 5,901 ops/sec [5,831..5,996] 🔴 -10.1%
get lookups (50 entries) 60,874 ops/sec [58,573..61,145] → 103,174 ops/sec [102,360..103,411] 🟢 +69.5% 95,262 ops/sec [94,736..95,507] → 87,946 ops/sec [87,147..89,261] 🔴 -7.7%
has checks (50 entries) 76,269 ops/sec [75,389..76,522] → 83,981 ops/sec [82,118..87,888] 🟢 +10.1% 123,484 ops/sec [122,540..124,220] → 112,439 ops/sec [111,013..112,755] 🔴 -8.9%
delete entries 4,140 ops/sec [4,092..4,152] → 4,568 ops/sec [4,400..4,594] 🟢 +10.3% 6,110 ops/sec [6,082..6,207] → 5,470 ops/sec [5,439..5,483] 🔴 -10.5%
non-registered symbol keys 10,014 ops/sec [9,944..10,073] → 10,905 ops/sec [10,750..11,016] 🟢 +8.9% 14,402 ops/sec [14,289..14,567] → 13,354 ops/sec [13,293..13,438] 🔴 -7.3%
getOrInsert 4,100 ops/sec [4,057..4,167] → 4,441 ops/sec [4,391..4,553] 🟢 +8.3% 5,625 ops/sec [5,562..5,752] → 5,286 ops/sec [5,257..5,314] 🔴 -6.0%
getOrInsertComputed 3,271 ops/sec [3,224..3,299] → 3,472 ops/sec [2,229..3,494] ~ overlap (+6.1%) 2,764 ops/sec [2,740..2,786] → 2,731 ops/sec [2,712..2,751] ~ overlap (-1.2%)
forced gc live-key retention 6,757 ops/sec [6,719..6,823] → 4,691 ops/sec [4,642..4,798] 🔴 -30.6% 5,531 ops/sec [5,485..5,575] → 5,161 ops/sec [5,123..5,203] 🔴 -6.7%
constructor from 50 values 24,580 ops/sec [24,457..24,718] → 17,848 ops/sec [17,079..18,231] 🔴 -27.4% 17,793 ops/sec [17,518..17,860] → 16,108 ops/sec [15,571..16,507] 🔴 -9.5%
add 50 object values 7,653 ops/sec [7,595..7,659] → 5,105 ops/sec [5,087..5,147] 🔴 -33.3% 7,026 ops/sec [6,942..7,069] → 6,336 ops/sec [6,201..6,387] 🔴 -9.8%
has checks (50 values) 123,273 ops/sec [122,591..124,675] → 82,997 ops/sec [82,843..83,451] 🔴 -32.7% 125,607 ops/sec [125,387..125,918] → 114,019 ops/sec [112,924..114,554] 🔴 -9.2%
delete values 19,152 ops/sec [18,889..19,220] → 21,570 ops/sec [21,464..22,008] 🟢 +12.6% 15,934 ops/sec [15,644..16,202] → 14,219 ops/sec [13,685..14,332] 🔴 -10.8%
non-registered symbol values 17,033 ops/sec [16,925..17,103] → 18,757 ops/sec [18,540..18,982] 🟢 +10.1% 15,585 ops/sec [15,558..15,641] → 14,446 ops/sec [14,332..14,553] 🔴 -7.3%
forced gc pruning smoke 8,182 ops/sec [8,122..8,219] → 8,881 ops/sec [8,748..9,040] 🟢 +8.5% 6,771 ops/sec [6,535..6,831] → 6,518 ops/sec [6,460..6,634] ~ overlap (-3.7%)

Deterministic profile diff

Deterministic profile diff: no significant changes.

Measured on ubuntu-latest x64. Benchmark ranges compare cached main-branch min/max ops/sec with the PR run; overlapping ranges are treated as unchanged noise. Percentage deltas are secondary context.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

test262 Conformance

🚫 Regression vs cached main baseline. 2 previously-passing test(s) now fail; pass count Δ +401. This run blocks merge — see "Newly failing" below.

Category Run Passed Δ Pass Failed Pass-rate Δ Rate
built-ins 23,448 14,305 +20 9,142 61.0% +0.1pp
harness 116 71 +2 45 61.2% +1.7pp
intl402 3,324 167 ±0 3,157 5.0% ±0pp
language 23,635 12,565 +379 11,070 53.2% +1.6pp
staging 1,483 467 ±0 1,014 31.5% ±0pp
total 52,006 27,575 +401 24,428 53.0% +0.8pp

Areas closest to 100%

Area Pass rate Δ vs main Passing
built-ins/WeakSet 98.8% ±0pp 84 / 85
built-ins/WeakMap 98.6% ±0pp 139 / 141
language/asi 97.1% ±0pp 99 / 102
Per-test deltas (+403 / -2)

Newly failing (2):

  • built-ins/DataView/custom-proto-access-resizes-buffer-invalid-by-length.js
  • built-ins/DataView/custom-proto-access-resizes-buffer-invalid-by-offset.js

Newly passing (403):

  • built-ins/AggregateError/prototype/constructor.js
  • built-ins/Error/internal-prototype.js
  • built-ins/Error/length.js
  • built-ins/Error/prototype/constructor/prop-desc.js
  • built-ins/NativeErrors/RangeError/prototype/constructor.js
  • built-ins/NativeErrors/ReferenceError/prototype/constructor.js
  • built-ins/NativeErrors/SyntaxError/prototype/constructor.js
  • built-ins/NativeErrors/TypeError/prototype/constructor.js
  • built-ins/NativeErrors/URIError/prototype/constructor.js
  • built-ins/Number/prototype/toExponential/undefined-fractiondigits.js
  • built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-168.js
  • built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-171.js
  • built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-172.js
  • built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-173.js
  • built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-174.js
  • built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-175.js
  • built-ins/Promise/prototype/then/resolve-pending-fulfilled-self.js
  • built-ins/Promise/prototype/then/resolve-pending-rejected-self.js
  • built-ins/Promise/prototype/then/resolve-settled-fulfilled-self.js
  • built-ins/Promise/prototype/then/resolve-settled-rejected-self.js
  • built-ins/Promise/resolve-self.js
  • built-ins/SuppressedError/prototype/constructor.js
  • harness/detachArrayBuffer.js
  • harness/testTypedArray-conversions-call-error.js
  • language/expressions/async-generator/named-yield-star-getiter-async-not-callable-boolean-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-not-callable-number-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-not-callable-object-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-not-callable-string-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-not-callable-symbol-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-returns-boolean-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-returns-null-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-returns-number-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-returns-string-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-returns-symbol-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-async-returns-undefined-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-boolean-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-number-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-object-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-string-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-symbol-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-returns-boolean-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-returns-null-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-returns-number-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-returns-string-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-returns-symbol-throw.js
  • language/expressions/async-generator/named-yield-star-getiter-sync-returns-undefined-throw.js
  • language/expressions/async-generator/named-yield-star-next-non-object-ignores-then.js
  • language/expressions/async-generator/named-yield-star-next-not-callable-boolean-throw.js
  • language/expressions/async-generator/named-yield-star-next-not-callable-null-throw.js
  • language/expressions/async-generator/named-yield-star-next-not-callable-number-throw.js
  • language/expressions/async-generator/named-yield-star-next-not-callable-object-throw.js
  • language/expressions/async-generator/named-yield-star-next-not-callable-string-throw.js
  • language/expressions/async-generator/named-yield-star-next-not-callable-symbol-throw.js
  • language/expressions/async-generator/named-yield-star-next-not-callable-undefined-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-not-callable-boolean-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-not-callable-number-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-not-callable-object-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-not-callable-string-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-not-callable-symbol-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-returns-boolean-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-returns-null-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-returns-number-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-returns-string-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-returns-symbol-throw.js
  • language/expressions/async-generator/yield-star-getiter-async-returns-undefined-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-not-callable-boolean-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-not-callable-number-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-not-callable-object-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-not-callable-string-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-not-callable-symbol-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-returns-boolean-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-returns-null-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-returns-number-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-returns-string-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-returns-symbol-throw.js
  • language/expressions/async-generator/yield-star-getiter-sync-returns-undefined-throw.js
  • language/expressions/async-generator/yield-star-next-non-object-ignores-then.js
  • language/expressions/async-generator/yield-star-next-not-callable-boolean-throw.js
  • language/expressions/async-generator/yield-star-next-not-callable-null-throw.js
  • language/expressions/async-generator/yield-star-next-not-callable-number-throw.js
  • language/expressions/async-generator/yield-star-next-not-callable-object-throw.js
  • language/expressions/async-generator/yield-star-next-not-callable-string-throw.js
  • language/expressions/async-generator/yield-star-next-not-callable-symbol-throw.js
  • language/expressions/async-generator/yield-star-next-not-callable-undefined-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-not-callable-boolean-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-not-callable-number-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-not-callable-object-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-not-callable-string-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-not-callable-symbol-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-returns-boolean-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-returns-null-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-returns-number-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-returns-string-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-returns-symbol-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-async-returns-undefined-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-sync-not-callable-boolean-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-sync-not-callable-number-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-sync-not-callable-object-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-sync-not-callable-string-throw.js
  • language/expressions/class/async-gen-method-static/yield-star-getiter-sync-not-callable-symbol-throw.js
  • … 303 more

Steady-state failures are non-blocking; regressions vs the cached main baseline (lower total pass count, or any PASS → non-PASS transition) fail the conformance gate. Measured on ubuntu-latest x64, bytecode mode. Areas grouped by the first two test262 path components; minimum 25 attempted tests, areas already at 100% excluded. Δ vs main compares against the most recent cached main baseline.

@frostney frostney merged commit 7b4ca8a into main May 7, 2026
13 of 14 checks passed
@frostney frostney deleted the issue-519-error-prototype-constructor branch May 7, 2026 17:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working documentation Improvements or additions to documentation spec compliance Mismatch against official JavaScript/TypeScript specification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Engine: caught Error instance has .constructor === undefined (Error.prototype.constructor missing)

1 participant