fix(intl): parse Locale unicode extension keys#696
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (4)
📝 WalkthroughWalkthroughThis PR adds robust BCP-47 Unicode-extension range detection and two public helpers to add/remove ChangesUnicode Locale Extension Support
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
Suite TimingTest Runner (interpreted: 9,880 passed; bytecode: 9,880 passed)
MemoryGC 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.
Benchmarks (interpreted: 407; bytecode: 407)
MemoryGC 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.
Measured on ubuntu-latest x64. |
Benchmark Results407 benchmarks Interpreted: 🟢 304 improved · 🔴 35 regressed · 68 unchanged · avg +7.6% arraybuffer.js — Interp: 🟢 9, 5 unch. · avg +8.1% · Bytecode: 🟢 11, 3 unch. · avg +5.5%
arrays.js — Interp: 🟢 19 · avg +10.5% · Bytecode: 🟢 18, 1 unch. · avg +10.7%
async-await.js — Interp: 🟢 6 · avg +13.7% · Bytecode: 🟢 4, 2 unch. · avg +7.5%
async-generators.js — Interp: 🟢 2 · avg +12.6% · Bytecode: 🟢 2 · avg +11.8%
base64.js — Interp: 🟢 10 · avg +4.6% · Bytecode: 🟢 3, 🔴 7 · avg -0.9%
classes.js — Interp: 🟢 22, 9 unch. · avg +6.1% · Bytecode: 🟢 19, 12 unch. · avg +7.4%
closures.js — Interp: 🟢 8, 3 unch. · avg +7.6% · Bytecode: 🟢 11 · avg +10.2%
collections.js — Interp: 🟢 12 · avg +13.0% · Bytecode: 🟢 12 · avg +11.9%
csv.js — Interp: 🟢 5, 🔴 1, 7 unch. · avg +0.8% · Bytecode: 🟢 13 · avg +9.2%
destructuring.js — Interp: 🟢 22 · avg +9.1% · Bytecode: 🟢 21, 1 unch. · avg +8.9%
fibonacci.js — Interp: 🟢 8 · avg +11.4% · Bytecode: 🟢 8 · avg +13.0%
float16array.js — Interp: 🟢 18, 🔴 8, 6 unch. · avg +0.2% · Bytecode: 🟢 29, 🔴 1, 2 unch. · avg +10.2%
for-of.js — Interp: 🟢 5, 2 unch. · avg +5.1% · Bytecode: 🟢 6, 1 unch. · avg +10.6%
generators.js — Interp: 🟢 4 · avg +6.9% · Bytecode: 🟢 3, 1 unch. · avg +5.7%
iterators.js — Interp: 🟢 22, 🔴 8, 12 unch. · avg +2.7% · Bytecode: 🟢 40, 2 unch. · avg +8.8%
json.js — Interp: 🟢 19, 1 unch. · avg +6.6% · Bytecode: 🟢 20 · avg +11.9%
jsx.jsx — Interp: 🟢 20, 1 unch. · avg +8.3% · Bytecode: 🟢 11, 10 unch. · avg +3.6%
modules.js — Interp: 🟢 3, 6 unch. · avg +4.5% · Bytecode: 🟢 9 · avg +15.4%
numbers.js — Interp: 🟢 11 · avg +8.6% · Bytecode: 🟢 11 · avg +9.4%
objects.js — Interp: 🟢 7 · avg +10.1% · Bytecode: 🟢 6, 🔴 1 · avg +6.7%
promises.js — Interp: 🟢 9, 3 unch. · avg +8.4% · Bytecode: 🟢 11, 1 unch. · avg +8.5%
regexp.js — Interp: 🟢 8, 3 unch. · avg +5.5% · Bytecode: 🟢 5, 🔴 4, 2 unch. · avg +1.9%
strings.js — Interp: 🟢 18, 1 unch. · avg +9.8% · Bytecode: 🟢 15, 4 unch. · avg +7.3%
tsv.js — Interp: 🟢 5, 🔴 3, 1 unch. · avg +2.4% · Bytecode: 🟢 8, 1 unch. · avg +10.4%
typed-arrays.js — Interp: 🟢 12, 🔴 8, 2 unch. · avg -11.7% · Bytecode: 🟢 3, 🔴 17, 2 unch. · avg -25.5%
uint8array-encoding.js — Interp: 🟢 9, 🔴 5, 4 unch. · avg +40.3% · Bytecode: 🟢 15, 🔴 1, 2 unch. · avg +13.0%
weak-collections.js — Interp: 🟢 11, 🔴 2, 2 unch. · avg +24.9% · Bytecode: 🟢 15 · avg +31.1%
Deterministic profile diffDeterministic 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. |
test262 Conformance
Areas closest to 100%
Per-test deltas (+3 / -0)Newly passing (3):
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 |
4feb9be to
5123b0e
Compare
Summary
Intl.LocaleUnicode extension keywords forcaseFirst(kf) andnumeric(kn) alongside the existing Locale extension properties.Goccia.Intl.Helpersand have Collator share it instead of carrying a local copy.Intl.Localeconstructor coverage for extension-derived properties, option overrides,kn-truecanonicalization, andbaseNamestripping.Testing
./build.pas testrunner./build/GocciaTestRunner tests/built-ins/Intl/Locale./build/GocciaTestRunner tests/built-ins/Intl/Collator./build/GocciaTestRunner tests/built-ins/Intl/NumberFormat tests/built-ins/Intl/RelativeTimeFormat./build/GocciaTestRunner tests/built-ins/Intl./build/GocciaTestRunner testswas also run; it failed only on existing FFI fixture loading (./fixtures/ffi/libfixture.dylib), unrelated to this Intl change.Additional regression check after review:
bun scripts/run_test262_suite.ts --suite-dir /tmp/goccia-test262.qpKiT7/repo --categories intl402 --filter 'intl402/Locale/constructor-non-iana-canon.js' --mode bytecode --jobs 1 --verbosepassed against pinned test262 SHAd0c1b4555b03dd404873fd6422a4b5da00136500.