Skip to content

Commit ebc61dd

Browse files
committed
Condense Lambda merge changelog entry
Signed-off-by: Cristiano Calcagno <cristianoc@users.noreply.github.com>
1 parent d8c298a commit ebc61dd

1 file changed

Lines changed: 1 addition & 5 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,7 @@
6363

6464
#### :house: Internal
6565

66-
- Merge the Lam intermediate representation into Lambda. With conversion already structural, `Lam.t` was `Lambda.lambda` constructor for constructor, so it becomes that type: `Lam_convert` and its one-to-one rebuild are gone, and `Lam`, `Lam_primitive`, `Lam_constant`, `Lam_compat`, `Lam_tag_info`, `Lam_free_variables`, `Lam_subst`, `Lam_iter` and `Lam_print` retire with it. `Lambda.t` is private with a constructor per variant, seven of which normalize as they build, so a pass cannot bypass normalization by writing a constructor directly. Generated JavaScript is unchanged. https://github.com/rescript-lang/rescript/pull/8608
67-
- Give Lambda the constant and shape decisions conversion used to make: JavaScript null, undefined, `Some`, assert-false, module-alias and nominal-constructor constants are explicit; polymorphic variant runtime names are produced at translation; a block's mutability is derived from its tag info; and a module reference is an `Lglobal_module` name in Lambda too, with the dependencies read off the term. Erasing builtins are classified in the primitive table rather than carried as a `Peliminated` primitive through both layers. https://github.com/rescript-lang/rescript/pull/8608
68-
- Remove the primitives and passes the merged representation no longer needs: the curried-application machinery (`Primitive_curry._N`, `ap_status`, `Js_call_info.arity`, `Curry_gen`), `%function_arity`, `Poffsetref`, `Poffsetint`, `Pisout` with `E.is_out`, and `Lam_pass_apply_arity` with `Lam_eta_conversion`. An `external` declared as `"%function_arity"`, `"%succint"` or `"%predint"` is now rejected as an unknown builtin. Generated JavaScript is unchanged apart from the operand order of two-value range tests, which was previously decided by whether the offset landed in an addition or a subtraction. https://github.com/rescript-lang/rescript/pull/8608
69-
- Specialize the switch compiler to Lambda. `Switch.Make` has had a single instantiation since native code generation was dropped, so the functor goes, along with a dead signature member and a location threaded through it for nothing. The range test the switcher wraps around a jump table is folded into the switch's failaction where it is produced, since a JavaScript `switch` has a native `default`; and the guard-clause rewrite that lifts a raising branch out of an `if` becomes a scheduled pass, being code motion rather than normalization. https://github.com/rescript-lang/rescript/pull/8608
70-
- Add sharing variants of the list and option maps, and a shallow Lambda traversal built on them, so a pass that rewrites nothing returns its input physically unchanged and allocates nothing. Consolidate the four ident set implementations - `Set_ident` plus `Set.Make (Ident)` written out again in `lambda.ml`, `mtype.ml` and `parmatch.ml` - into `Set_ident`. Merge the two Lambda printers, keeping `Printlambda`'s field debug info, block tags and import paths, `Lam_print`'s mutable-block form and file dumps, and tagging every comparison with its operand kind so `Pintcomp`, `Pjscomp` and `Pstringcomp` are no longer all printed `==`. https://github.com/rescript-lang/rescript/pull/8608
66+
- Merge the duplicate Lam intermediate representation into Lambda, removing the conversion layer and obsolete supporting infrastructure. Lambda is now a single private, normalized representation, with generated JavaScript remaining semantically unchanged. https://github.com/rescript-lang/rescript/pull/8608
7167
- Rework the object-type representation end to end: object rows are plain field chains carrying a per-field mutability state (no phantom setter members), object literals are typed directly and property access and assignment are first-class AST and Lambda nodes shared between the Lambda and JS pipelines, and dead class-system remnants (the field-presence lattice, the class-abbreviation memo on object types, method-send typing) are removed. https://github.com/rescript-lang/rescript/pull/8597
7268
- Upgrade the development toolchain and primary CI builds to OCaml 5.5 while retaining OCaml 5.0 as the minimum supported version. https://github.com/rescript-lang/rescript/pull/8589
7369
- Upgrade the vendored Flow parser from 0.267.0 to 0.320.0, the final release of the OCaml implementation. https://github.com/rescript-lang/rescript/pull/8588

0 commit comments

Comments
 (0)