Skip to content

Implement Error.prototype.toString (ES2026 §20.5.3.4)#557

Merged
frostney merged 4 commits into
mainfrom
issue-545-error-prototype-tostring
May 6, 2026
Merged

Implement Error.prototype.toString (ES2026 §20.5.3.4)#557
frostney merged 4 commits into
mainfrom
issue-545-error-prototype-tostring

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented May 6, 2026

Summary

  • Define Error.prototype.toString on FErrorProto per ES2026 §20.5.3.4, so all NativeError subclasses and user class extends Error inherit it through the prototype chain
  • Fixes String(error) and template-literal ${error} which threw TypeError: Cannot convert object to primitive value after Make ToStringLiteral ES2026-compliant; add ToPropertyKey #527
  • Add 15 tests covering all error types, edge cases (empty name/message, undefined name), inheritance, String() coercion, template literals, and TypeError on non-object this
  • Document the new method in docs/built-ins.md

Closes #545

Test plan

  • Reproduction script from the issue passes in both interpreter and bytecode modes
  • All 15 new tests/built-ins/Error/toString.js tests pass
  • All 124 existing Error tests pass (no regressions)
  • Full test suite: 8710/8715 pass (5 pre-existing FFI library failures)
  • ./format.pas --check clean

🤖 Generated with Claude Code

frostney and others added 2 commits May 6, 2026 18:07
The method was missing from Error.prototype, causing String(error) and
template-literal interpolation to throw TypeError after the #527
ToStringLiteral refactor. Define it once on FErrorProto so all NativeError
subclasses and user class extends Error inherit it through the prototype
chain.

Closes #545

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 6, 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 6, 2026 7:19pm

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 6, 2026

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: 4c8be1b8-cc7c-4ffa-b23c-99ae24784b1c

📥 Commits

Reviewing files that changed from the base of the PR and between a3dd150 and bd8e912.

📒 Files selected for processing (2)
  • source/units/Goccia.Builtins.Globals.pas
  • tests/built-ins/Error/toString.js

📝 Walkthrough

Walkthrough

Implements Error.prototype.toString per ES2026: adds TGocciaGlobals.ErrorPrototypeToString, registers it on Error.prototype (inherited by NativeError subclasses), adds an error message constant for non-object this, tests covering behavior, and documentation noting the prototype method.

Changes

Error.prototype.toString Implementation

Layer / File(s) Summary
Method Declaration & Implementation
source/units/Goccia.Builtins.Globals.pas
Added ErrorPrototypeToString to TGocciaGlobals implementing ES2026 §20.5.3.4: validates this is an Object, reads name/message, applies undefined/default and empty-string rules, and returns the concatenated result.
Prototype Member Integration
source/units/Goccia.Builtins.Globals.pas
Refactored Error.prototype setup to build a temporary ErrorProtoMembers array and register members via RegisterMemberDefinitions, wiring toString onto Error.prototype so native Error subclasses inherit it.
Error Messages
source/units/Goccia.Error.Messages.pas
Added SErrorErrorProtoToStringRequiresObject resourcestring used when toString is called with a non-object this.
Tests
tests/built-ins/Error/toString.js
Added tests for Error.prototype.toString covering built-in Error types, empty/undefined name or message, subclass inheritance, string/template conversion, and non-object this error.
Documentation
docs/built-ins.md
Added "Prototype methods" subsection under Error documenting toString() behavior and noting inheritance by NativeError subclasses.

Sequence Diagram(s)

(Skipped — changes are internal implementation and tests; no multi-component sequential flow requiring visualization.)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

documentation

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: implementing Error.prototype.toString per ES2026 §20.5.3.4, which is the central objective of this PR.
Description check ✅ Passed The PR description covers the summary, test plan with comprehensive validation, and related issue closure. All major template sections are addressed with specific details about implementation and testing.
Linked Issues check ✅ Passed All coding requirements from issue #545 are met: Error.prototype.toString implements the ES2026 §20.5.3.4 algorithm, is defined on FErrorProto for prototype chain inheritance, includes 15 comprehensive tests, and restores String(error) and template-literal coercion behavior.
Out of Scope Changes check ✅ Passed All changes are directly scoped to implementing Error.prototype.toString: method implementation in Goccia.Builtins.Globals.pas, error message constant, comprehensive test suite, and documentation update with no extraneous changes.
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 spec compliance Mismatch against official JavaScript/TypeScript specification labels May 6, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

Benchmark Results

407 benchmarks

Interpreted: 🟢 33 improved · 🔴 62 regressed · 312 unchanged · avg -0.1%
Bytecode: 🟢 9 improved · 🔴 396 regressed · 2 unchanged · avg -25.1%

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

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 6, 2026

Suite Timing

Test Runner (interpreted: 8,817 passed; bytecode: 8,817 passed)
Metric Interpreted Bytecode
Total 8817 8817
Passed 8817 ✅ 8817 ✅
Workers 4 4
Test Duration 2.00s 1.91s
Lex (cumulative) 249.0ms 154.6ms
Parse (cumulative) 260.8ms 247.9ms
Compile (cumulative) 510.3ms
Execute (cumulative) 2.05s 1.59s
Engine Total (cumulative) 2.56s 2.50s
Lex (avg/worker) 62.3ms 38.7ms
Parse (avg/worker) 65.2ms 62.0ms
Compile (avg/worker) 127.6ms
Execute (avg/worker) 512.4ms 397.9ms
Engine Total (avg/worker) 639.9ms 626.1ms

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 212.20 MiB 206.92 MiB
GC Peak Live 212.21 MiB 206.92 MiB
GC Allocated During Run 216.53 MiB 211.18 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1 1
GC Collected Objects 74 74
Heap Start Allocated 144.7 KiB 144.7 KiB
Heap End Allocated 1.37 MiB 1.37 MiB
Heap Delta Allocated 1.23 MiB 1.23 MiB
Heap Delta Free 470.8 KiB 470.8 KiB
Benchmarks (interpreted: 407; bytecode: 407)
Metric Interpreted Bytecode
Total 407 407
Workers 4 4
Duration 2.41min 2.32min

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 91.18 MiB 63.72 MiB
GC Allocated During Run 13.60 GiB 9.11 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 2,824 2,638
GC Collected Objects 252,531,881 214,315,842
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.

…tant

Matches the pattern used by Symbol.prototype methods.

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

github-actions Bot commented May 6, 2026

test262 Conformance

Category Run Passed Δ Pass Failed Pass-rate Δ Rate
built-ins 23,448 14,114 +18 9,333 60.2% +0.1pp
harness 116 69 ±0 47 59.5% ±0pp
intl402 3,324 167 ±0 3,157 5.0% ±0pp
language 23,635 12,174 +1 11,461 51.5% ±0pp
staging 1,483 465 +1 1,016 31.4% +0.1pp
total 52,006 26,989 +20 25,014 51.9% ±0pp

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 (+20 / -0)

Newly passing (20):

  • built-ins/AsyncFromSyncIteratorPrototype/return/result-object-error.js
  • built-ins/AsyncFromSyncIteratorPrototype/throw/iterator-result.js
  • built-ins/AsyncFromSyncIteratorPrototype/throw/result-object-error.js
  • built-ins/Error/prototype/toString/15.11.4.4-10-1.js
  • built-ins/Error/prototype/toString/15.11.4.4-6-1.js
  • built-ins/Error/prototype/toString/15.11.4.4-6-2.js
  • built-ins/Error/prototype/toString/15.11.4.4-8-1.js
  • built-ins/Error/prototype/toString/15.11.4.4-8-2.js
  • built-ins/Error/prototype/toString/15.11.4.4-9-1.js
  • built-ins/Error/prototype/toString/length.js
  • built-ins/Error/prototype/toString/name.js
  • built-ins/Error/prototype/toString/prop-desc.js
  • built-ins/Error/prototype/toString/S15.11.4.4_A2.js
  • built-ins/Error/prototype/toString/tostring-get-throws.js
  • built-ins/Error/prototype/toString/undefined-props.js
  • built-ins/Number/prototype/toExponential/undefined-fractiondigits.js
  • built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-169.js
  • built-ins/String/prototype/trim/15.5.4.20-2-50.js
  • language/statements/try/S12.14_A17.js
  • staging/sm/global/delete-global-NaN-property.js

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.

@coderabbitai coderabbitai Bot added the new feature New feature or request label May 6, 2026
Add gmfNotConstructable flag so `new Error.prototype.toString()` throws
"not a constructor" at the call boundary rather than entering the method
body. Fixes test262 built-ins/Error/prototype/toString/not-a-constructor.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai coderabbitai Bot added the documentation Improvements or additions to documentation label May 6, 2026
@frostney frostney merged commit ad421df into main May 6, 2026
14 checks passed
@frostney frostney deleted the issue-545-error-prototype-tostring branch May 6, 2026 19:45
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 new feature New feature or request spec compliance Mismatch against official JavaScript/TypeScript specification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Error.prototype.toString is undefined (ES2026 §20.5.3.4 missing)

1 participant