Skip to content

Commit 41b6877

Browse files
authored
flambda-backend: Backport upstream PRs for recursive value compilation (#2394)
* Propagate the classification from Rec_check (#12551) * Add Constant and Class classifications for recursive bindings (#12608) * Fix Rec_check for lazy expressions and first-class modules (#12782) * Compile recursive bindings in Lambda (#12596) * Fixes * Add test * Remove outdated runtime assertion * Update comment + review
1 parent 927e29d commit 41b6877

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1620
-1084
lines changed

.depend

+61-37
Original file line numberDiff line numberDiff line change
@@ -1503,29 +1503,6 @@ typing/printtyped.cmx : \
15031503
typing/printtyped.cmi
15041504
typing/printtyped.cmi : \
15051505
typing/typedtree.cmi
1506-
typing/rec_check.cmo : \
1507-
typing/types.cmi \
1508-
typing/typeopt.cmi \
1509-
typing/typedtree.cmi \
1510-
typing/primitive.cmi \
1511-
typing/path.cmi \
1512-
lambda/lambda.cmi \
1513-
typing/ident.cmi \
1514-
parsing/asttypes.cmi \
1515-
typing/rec_check.cmi
1516-
typing/rec_check.cmx : \
1517-
typing/types.cmx \
1518-
typing/typeopt.cmx \
1519-
typing/typedtree.cmx \
1520-
typing/primitive.cmx \
1521-
typing/path.cmx \
1522-
lambda/lambda.cmx \
1523-
typing/ident.cmx \
1524-
parsing/asttypes.cmi \
1525-
typing/rec_check.cmi
1526-
typing/rec_check.cmi : \
1527-
typing/typedtree.cmi \
1528-
typing/ident.cmi
15291506
typing/shape.cmo : \
15301507
typing/path.cmi \
15311508
utils/misc.cmi \
@@ -1764,6 +1741,7 @@ typing/typeclass.cmi : \
17641741
typing/typecore.cmo : \
17651742
utils/zero_alloc_utils.cmi \
17661743
utils/warnings.cmi \
1744+
typing/value_rec_check.cmi \
17671745
typing/untypeast.cmi \
17681746
typing/uniqueness_analysis.cmi \
17691747
typing/typetexp.cmi \
@@ -1773,7 +1751,6 @@ typing/typecore.cmo : \
17731751
typing/typedecl.cmi \
17741752
typing/subst.cmi \
17751753
typing/shape.cmi \
1776-
typing/rec_check.cmi \
17771754
typing/printtyp.cmi \
17781755
typing/printpat.cmi \
17791756
typing/primitive.cmi \
@@ -1806,6 +1783,7 @@ typing/typecore.cmo : \
18061783
typing/typecore.cmx : \
18071784
utils/zero_alloc_utils.cmx \
18081785
utils/warnings.cmx \
1786+
typing/value_rec_check.cmx \
18091787
typing/untypeast.cmx \
18101788
typing/uniqueness_analysis.cmx \
18111789
typing/typetexp.cmx \
@@ -1815,7 +1793,6 @@ typing/typecore.cmx : \
18151793
typing/typedecl.cmx \
18161794
typing/subst.cmx \
18171795
typing/shape.cmx \
1818-
typing/rec_check.cmx \
18191796
typing/printtyp.cmx \
18201797
typing/printpat.cmx \
18211798
typing/primitive.cmx \
@@ -2031,6 +2008,7 @@ typing/typedecl_variance.cmi : \
20312008
parsing/asttypes.cmi
20322009
typing/typedtree.cmo : \
20332010
utils/zero_alloc_utils.cmi \
2011+
typing/value_rec_types.cmi \
20342012
typing/types.cmi \
20352013
typing/shape.cmi \
20362014
typing/primitive.cmi \
@@ -2049,6 +2027,7 @@ typing/typedtree.cmo : \
20492027
typing/typedtree.cmi
20502028
typing/typedtree.cmx : \
20512029
utils/zero_alloc_utils.cmx \
2030+
typing/value_rec_types.cmi \
20522031
typing/types.cmx \
20532032
typing/shape.cmx \
20542033
typing/primitive.cmx \
@@ -2067,6 +2046,7 @@ typing/typedtree.cmx : \
20672046
typing/typedtree.cmi
20682047
typing/typedtree.cmi : \
20692048
utils/zero_alloc_utils.cmi \
2049+
typing/value_rec_types.cmi \
20702050
typing/types.cmi \
20712051
typing/shape.cmi \
20722052
typing/primitive.cmi \
@@ -2421,8 +2401,36 @@ typing/untypeast.cmi : \
24212401
parsing/longident.cmi \
24222402
parsing/location.cmi \
24232403
parsing/jane_syntax.cmi
2424-
bytecomp/bytegen.cmo : \
2404+
typing/value_rec_check.cmo : \
2405+
typing/value_rec_types.cmi \
24252406
typing/types.cmi \
2407+
typing/typeopt.cmi \
2408+
typing/typedtree.cmi \
2409+
typing/primitive.cmi \
2410+
typing/path.cmi \
2411+
utils/misc.cmi \
2412+
lambda/lambda.cmi \
2413+
typing/ident.cmi \
2414+
parsing/asttypes.cmi \
2415+
typing/value_rec_check.cmi
2416+
typing/value_rec_check.cmx : \
2417+
typing/value_rec_types.cmi \
2418+
typing/types.cmx \
2419+
typing/typeopt.cmx \
2420+
typing/typedtree.cmx \
2421+
typing/primitive.cmx \
2422+
typing/path.cmx \
2423+
utils/misc.cmx \
2424+
lambda/lambda.cmx \
2425+
typing/ident.cmx \
2426+
parsing/asttypes.cmi \
2427+
typing/value_rec_check.cmi
2428+
typing/value_rec_check.cmi : \
2429+
typing/value_rec_types.cmi \
2430+
typing/typedtree.cmi \
2431+
typing/ident.cmi
2432+
typing/value_rec_types.cmi :
2433+
bytecomp/bytegen.cmo : \
24262434
lambda/switch.cmi \
24272435
typing/subst.cmi \
24282436
lambda/printlambda.cmi \
@@ -2440,7 +2448,6 @@ bytecomp/bytegen.cmo : \
24402448
parsing/asttypes.cmi \
24412449
bytecomp/bytegen.cmi
24422450
bytecomp/bytegen.cmx : \
2443-
typing/types.cmx \
24442451
lambda/switch.cmx \
24452452
typing/subst.cmx \
24462453
lambda/printlambda.cmx \
@@ -3128,7 +3135,6 @@ asmcomp/cmm_invariants.cmx : \
31283135
asmcomp/cmm_invariants.cmi : \
31293136
asmcomp/cmm.cmi
31303137
asmcomp/cmmgen.cmo : \
3131-
typing/types.cmi \
31323138
middle_end/printclambda_primitives.cmi \
31333139
typing/primitive.cmi \
31343140
utils/misc.cmi \
@@ -3148,7 +3154,6 @@ asmcomp/cmmgen.cmo : \
31483154
asmcomp/afl_instrument.cmi \
31493155
asmcomp/cmmgen.cmi
31503156
asmcomp/cmmgen.cmx : \
3151-
typing/types.cmx \
31523157
middle_end/printclambda_primitives.cmx \
31533158
typing/primitive.cmx \
31543159
utils/misc.cmx \
@@ -4311,6 +4316,7 @@ lambda/translattribute.cmi : \
43114316
parsing/location.cmi \
43124317
lambda/lambda.cmi
43134318
lambda/translclass.cmo : \
4319+
typing/value_rec_types.cmi \
43144320
typing/types.cmi \
43154321
typing/typeopt.cmi \
43164322
typing/typedtree.cmi \
@@ -4329,6 +4335,7 @@ lambda/translclass.cmo : \
43294335
parsing/asttypes.cmi \
43304336
lambda/translclass.cmi
43314337
lambda/translclass.cmx : \
4338+
typing/value_rec_types.cmi \
43324339
typing/types.cmx \
43334340
typing/typeopt.cmx \
43344341
typing/typedtree.cmx \
@@ -4347,6 +4354,7 @@ lambda/translclass.cmx : \
43474354
parsing/asttypes.cmi \
43484355
lambda/translclass.cmi
43494356
lambda/translclass.cmi : \
4357+
typing/value_rec_types.cmi \
43504358
typing/typedtree.cmi \
43514359
parsing/location.cmi \
43524360
lambda/lambda.cmi \
@@ -4355,6 +4363,7 @@ lambda/translclass.cmi : \
43554363
parsing/asttypes.cmi
43564364
lambda/translcore.cmo : \
43574365
utils/zero_alloc_utils.cmi \
4366+
lambda/value_rec_compiler.cmi \
43584367
typing/types.cmi \
43594368
typing/typeopt.cmi \
43604369
typing/typedtree.cmi \
@@ -4390,6 +4399,7 @@ lambda/translcore.cmo : \
43904399
lambda/translcore.cmi
43914400
lambda/translcore.cmx : \
43924401
utils/zero_alloc_utils.cmx \
4402+
lambda/value_rec_compiler.cmx \
43934403
typing/types.cmx \
43944404
typing/typeopt.cmx \
43954405
typing/typedtree.cmx \
@@ -4435,6 +4445,7 @@ lambda/translcore.cmi : \
44354445
lambda/debuginfo.cmi \
44364446
parsing/asttypes.cmi
44374447
lambda/translmod.cmo : \
4448+
lambda/value_rec_compiler.cmi \
44384449
typing/types.cmi \
44394450
typing/typedtree.cmi \
44404451
lambda/translprim.cmi \
@@ -4461,6 +4472,7 @@ lambda/translmod.cmo : \
44614472
parsing/asttypes.cmi \
44624473
lambda/translmod.cmi
44634474
lambda/translmod.cmx : \
4475+
lambda/value_rec_compiler.cmx \
44644476
typing/types.cmx \
44654477
typing/typedtree.cmx \
44664478
lambda/translprim.cmx \
@@ -4587,6 +4599,26 @@ lambda/translprim.cmi : \
45874599
typing/ident.cmi \
45884600
typing/env.cmi \
45894601
utils/compilation_unit.cmi
4602+
lambda/value_rec_compiler.cmo : \
4603+
typing/value_rec_types.cmi \
4604+
utils/misc.cmi \
4605+
utils/lazy_backtrack.cmi \
4606+
lambda/lambda.cmi \
4607+
typing/ident.cmi \
4608+
lambda/debuginfo.cmi \
4609+
lambda/value_rec_compiler.cmi
4610+
lambda/value_rec_compiler.cmx : \
4611+
typing/value_rec_types.cmi \
4612+
utils/misc.cmx \
4613+
utils/lazy_backtrack.cmx \
4614+
lambda/lambda.cmx \
4615+
typing/ident.cmx \
4616+
lambda/debuginfo.cmx \
4617+
lambda/value_rec_compiler.cmi
4618+
lambda/value_rec_compiler.cmi : \
4619+
typing/value_rec_types.cmi \
4620+
lambda/lambda.cmi \
4621+
typing/ident.cmi
45904622
file_formats/cmi_format.cmo : \
45914623
typing/types.cmi \
45924624
typing/subst.cmi \
@@ -5973,7 +6005,6 @@ middle_end/flambda/invariant_params.cmi : \
59736005
middle_end/flambda/flambda.cmi
59746006
middle_end/flambda/lift_code.cmo : \
59756007
middle_end/variable.cmi \
5976-
utils/strongly_connected_components.cmi \
59776008
middle_end/flambda/base_types/mutable_variable.cmi \
59786009
lambda/lambda.cmi \
59796010
utils/int_replace_polymorphic_compare.cmi \
@@ -5983,7 +6014,6 @@ middle_end/flambda/lift_code.cmo : \
59836014
middle_end/flambda/lift_code.cmi
59846015
middle_end/flambda/lift_code.cmx : \
59856016
middle_end/variable.cmx \
5986-
utils/strongly_connected_components.cmx \
59876017
middle_end/flambda/base_types/mutable_variable.cmx \
59886018
lambda/lambda.cmx \
59896019
utils/int_replace_polymorphic_compare.cmx \
@@ -6047,24 +6077,18 @@ middle_end/flambda/lift_let_to_initialize_symbol.cmo : \
60476077
middle_end/flambda/base_types/tag.cmi \
60486078
middle_end/symbol_utils.cmi \
60496079
utils/symbol.cmi \
6050-
lambda/lambda.cmi \
6051-
middle_end/internal_variable_names.cmi \
60526080
utils/int_replace_polymorphic_compare.cmi \
60536081
middle_end/flambda/flambda_utils.cmi \
60546082
middle_end/flambda/flambda.cmi \
6055-
lambda/debuginfo.cmi \
60566083
middle_end/flambda/lift_let_to_initialize_symbol.cmi
60576084
middle_end/flambda/lift_let_to_initialize_symbol.cmx : \
60586085
middle_end/variable.cmx \
60596086
middle_end/flambda/base_types/tag.cmx \
60606087
middle_end/symbol_utils.cmx \
60616088
utils/symbol.cmx \
6062-
lambda/lambda.cmx \
6063-
middle_end/internal_variable_names.cmx \
60646089
utils/int_replace_polymorphic_compare.cmx \
60656090
middle_end/flambda/flambda_utils.cmx \
60666091
middle_end/flambda/flambda.cmx \
6067-
lambda/debuginfo.cmx \
60686092
middle_end/flambda/lift_let_to_initialize_symbol.cmi
60696093
middle_end/flambda/lift_let_to_initialize_symbol.cmi : \
60706094
middle_end/flambda/flambda.cmi \

Changes

+6
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ OCaml 5.1.0 (14 September 2023)
3030
(David Allsopp, review by Xavier Leroy, Guillaume Munch-Maccagnoni
3131
and Gabriel Scherer)
3232

33+
- #12551, #12608, #12782, #12596: Overhaul of recursive value compilation.
34+
Non-function recursive bindings are now forbidden from Lambda onwards,
35+
and compiled using a new Value_rec_compiler module.
36+
(Vincent Laviron and Lunia Ayanides, review by Gabriel Scherer,
37+
Stefan Muenzel and Nathanaëlle Courant)
38+
3339
### Standard library:
3440

3541
- #12006, #12064: Add `Marshal.Compression` flag to `Marshal.to_*` functions.

0 commit comments

Comments
 (0)