|
70 | 70 | - Represent optional parameters with defaults structurally, removing downstream name-based detection and producing more consistent JavaScript parameter names. https://github.com/rescript-lang/rescript/pull/8580 |
71 | 71 | - Sync the platform npm package's compiler binaries (`packages/@rescript/<platform>/bin`) via dune promotion on every `dune build`, instead of Makefile/CI copy steps that only ran when make did: a plain `dune build` can no longer leave `cli/*.js` and the test harnesses running a stale compiler. https://github.com/rescript-lang/rescript/pull/8560 |
72 | 72 | - Remove unused compiler IR definitions, modules, helpers, error variants, and Typedtree fields. https://github.com/rescript-lang/rescript/pull/8551 https://github.com/rescript-lang/rescript/pull/8555 |
73 | | -- Remove the unused OCaml pipe primitives `%revapply`/`%apply` and the `Ploc` Lambda constructor. `__LOC__` and friends still compile to location constants in `translcore`. |
74 | | -- Lower exception packing in `translcore` instead of convert, drop unused `raise_kind` / reraise tracking, and emit `RE_EXN_ID` string equality from matching instead of `Pextension_slot_eq`. |
75 | | -- Remove the `Pwrap_exn` / `%wrap_exn` primitive. Exception packing, `Promise.catch`, and `JsExn.anyToExnInternal` call `Primitive_exceptions.internalToException` as a normal module function. |
76 | | -- Split `let rec` groups into actual recursive clusters when Lambda is produced (`Lambda_scc.bind_rec`). Convert `Lletrec` is identity; `Lam_scc` is removed. JS compile only sorts functions before values for dummy/`updateDummy` init. |
77 | | -- Remove the dense int-switch-to-add peephole (`happens_to_be_diff`) from Lambda-to-Lam conversion. Convert `Lswitch` is identity. |
78 | | -- Remove the switcher-offset peephole from Lambda-to-Lam conversion. Convert `Llet` is identity. |
79 | | -- Convert `Lstaticcatch` / `Lstaticraise` are identity. Drop exit aliasing (`exit_map`); `Lam_pass_exits` already inlines a catch whose handler is a tiny `Lstaticraise`. |
80 | | -- Drop the unused `exports` argument from Lambda-to-Lam conversion. |
81 | | -- Represent `%identity` / `%ignore` / unary `+` as `Peliminated` on both Lambda and Lam. `Lambda.mk_prim` expands them so they never appear as `Lprim` nodes; Lam matches `assert false`. |
82 | | -- Use a single `int32` integer constant on Lambda and Lam (`Const_int of int32`). Assert-false is a dedicated constant (`Const_assertfalse`), not a tagged `0`. |
83 | | -- Drop dead typedtree constants `Const_int32` and `Const_int64`. Integer literals are `Const_int` (native `int`) or `Const_bigint`. |
84 | | -- Put char, string, float, and bigint constants on Lambda and drop `Const_base`. |
85 | | -- Drop Lambda `Const_immstring`; location primitives use `Const_string`, and matching can share equivalent string-valued actions. |
| 73 | +- Make Lambda-to-Lam conversion structural for lets, switches, static exits, recursive binding groups, exception packing, and eliminated identity operations. Semantic rewrites now happen during Lambda production or in named Lam passes; obsolete conversion state and `Lam_scc` are removed. |
| 74 | +- Remove obsolete Lambda and Lam primitives and align their scalar constant representations. Lambda and Lam now use `int32` integers and matching char, string, float, and bigint cases; Lambda strings carry their parsed output delimiter, assert-false is distinct from integer zero, and dead typedtree integer variants are removed. |
86 | 75 | - Make locally abstract value constraints (`let f: type a. t = value`) structural in the parsetree, remove the obsolete `Pexp_newtype` and `Texp_newtype` wrapper metadata, and keep the old encoding confined to the frozen external-PPX bridge. The CMT magic number is bumped to `Caml1999T024`. https://github.com/rescript-lang/rescript/pull/8575 |
87 | 76 | - Eliminate the `Pjs_fn_make`/`Pjs_fn_make_unit` arity-adjustment primitives and the `unsafe_adjust_to_arity` machinery: with structural arity, functions are constructed at their final arity, so the enforcement layer (and the active-pattern currying split it compensated for) is deleted. Generated code improves: no adapter closures for patterns on mutable fields, better constant propagation and name preservation, and recursive modules whose members are plain functions compile statically without the runtime bootstrap. https://github.com/rescript-lang/rescript/pull/8570 |
88 | 77 | - Cleanups enabled by structural arity: remove the unreachable `Too_many_arguments` error and the `?in_function` threading through the type checker that existed only to decorate it; remove the dead `function$`-vs-arrow unification bridge, `Ctype.arity`, and the unused parsetree arity helpers; deduplicate the analysis arrow-flattening helpers. https://github.com/rescript-lang/rescript/pull/8569 |
|
0 commit comments