github PerryTS/perry v0.5.1151

11 hours ago

Highlights

  • Release pipeline is green end-to-end again. v0.5.1150 shipped with 5 of 19 platform build jobs red (so npm/homebrew/apt/winget publish never ran) and a Regression Check that had hung at the 6-hour timeout on every run since v0.5.1129. All root causes fixed (#4857).
  • Android builds fixed — borrow-lifetime error (E0597) in perry-ui-android drag & drop broke both aarch64- and x86_64-linux-android jobs.
  • Windows builds fixedwindows-core direct dependency for #[implement] COM authoring (#4837) ships in a release for the first time.
  • Dense-array growth no longer quadratic#4648's absolute 1M dense cap routed sequential large-array fills through string-keyed sparse properties (linear scan per insert). A 10M-element fill went from never finishing (6h CI timeouts) to ~3.3s. Sparse storage is now gated on the jump a write makes past the current length (engine-style dictionary-mode heuristic); reads consult sparse storage only past capacity.
  • Performance regression gate actually works nowcompare.sh --json-out resolved relative to the wrong directory, so the comparison had silently crashed (and | tee swallowed the exit) on every run since at least v0.5.1122; release-mode "hard-fail" gates were comparing nothing. Fixed, plus pipefail, a 100-minute job timeout, and both the performance and binary-size baselines refreshed from current measured runs.

Fixes

  • fix(ci): unbreak release platform builds + lint gates (#4857)
  • fix(codegen): String.match no-match returns null, not a boxed null pointer (#4858, #4860)
  • fix(codegen,ci): keep stale Apple cross runtimes from breaking iOS/tvOS links (#4856, #4859)
  • fix(transform): generator id scans must see closures in every Expr variant (#4851, #4854)
  • fix(runtime): class subclass + async-method + definition test262 tail (#4853)
  • test(#4841): Stripe protoExtend regression + readable unhandled rejections + handled-rejection false-positive fix (#4852)
  • fix(hir): operator-expression semantics test262 tail — inc/dec ToNumber, != bigint/object, instanceof (#4850)
  • fix(http): expose OutgoingMessage and server defaults (#4503)
  • fix(codegen): non-arrow function expressions get fresh identity (#4831 follow-up, #4849)
  • fix(tvos/watchos): CFBundleVersion from perry.toml + emit GM DT* SDK keys (#4848)
  • fix(hir): private-member brand-check on access + class-element tail v3 (#4847)
  • fix(hir): class destructuring (dstr) test262 tail v2 (#4846)
  • fix(codegen): guard cyclic inheritance walks against non-termination (#4845)
  • fix(runtime): new WeakMap()/Map/Set from a constructor value no longer throws "requires 'new'" (#4844)
  • fix(runtime): honor JSON reviver prototype lookups (#4665)
  • fix(runtime): low-hanging test262 tails — URI/parse/Number/collections/Reflect (#4843)
  • fix(hir): expression-semantics test262 tail — object-literal NamedEval/gen-method dstr, delete, interleaved spread (#4842)
  • fix(runtime): built-ins/Array iteration/mutation methods test262 parity v3 (#4839)
  • fix(runtime): Promise static-method receiver + combinator/reflection/unhandled-rejection parity (#4838)
  • fix(windows): WebView2 COM init + dropped-init-result so WebView renders (#4835, #4837)
  • fix(codegen): dispatch Stripe-style cross-module extend through runtime method call (#4831, #4836)
  • fix(stdlib): emit one header line per array-valued header in node:http (#4826, #4829)
  • style/refactor: unbreak the lint gate on main — cargo fmt after #4853 + body_stmt.rs file-size split (#4855)

Known issues

  • date::tests::test_full_year_setters_revive_invalid_date_only fails when run in a non-UTC local timezone (CI is UTC): local-time revive of an invalid Date via setFullYear returns NaN.

Don't miss a new perry release

NewReleases is sending notifications on new releases.