Highlights
- HarmonyOS Phase 1 complete — full toolchain from
--target harmonyos[-simulator]scaffold through SDK detection, NAPI entry + ArkTS shim, HAP bundler, and the audit-driven emulator-validation fixes (#246, #247, #249, #250, #252, #253). - V8 interop landing —
JsLoadModule/JsGetExport/JsCallFunction/JsCallMethod/JsGetProperty/JsSetProperty/JsNew/JsNewFromHandlecodegen arms; Phase 2BJsCreateCallbackso Perry closures passed to JS-imported functions actually fire (#248, #254, #259). - Async correctness — spec-compliant microtask ordering for plain async functions via a CPS / state-machine transform that mirrors the existing generator transform (#256, #262).
- Geisterhand Phase D — live
apply_styledispatcher across iOS / tvOS / GTK4 / Windows; live screenshot preview in the inspector. Issue #185's three explicit asks (rich styling primitives, cross-platform parity, devtools) are now all shipped end-to-end.
Fixes
- #240 cross-module interface dispatch silently dropped to
undefinedwhen the consumer module type-imported the interface - #241 declare
@llvm.assumeintrinsic in IR module prelude - #255 perry-jsruntime re-entrancy — Perry callbacks can read JS object props without
RefCell already borrowedpanic - #257 V8 interop link order on macOS
- #258
typeofon JS handles - #260
perry.compilePackagesignored when invoking from a sub-dir of the package root - #261 class field closure init compile error (
use of undefined value '@perry_closure_*')
Features
- HarmonyOS: cross-compile target, NAPI bootstrapping, ArkTS entry shim,
.hapbundler, ace_napi.z runtime link, native-object pickup for cc-rs C deps that don't survive the OHOS staticlib wrapper - Codegen:
arr.push(...src)(ArrayPushSpread); V8 interop expression family (8 new HIR arms); generic-function method-call closure marshaling (JsCreateCallback) - Geisterhand: cross-platform
apply_style(iOS / tvOS / GTK4 / Windows), live screenshot preview with selection-overlay highlighting, auto-refresh polling
Infrastructure
- Conservative-scope guards in the new async/generator transform (skip when
__perry_cap_*capture markers are present, or when the body has nested closures with non-empty captures) — both tracked as follow-up work, not regressions.