Skip to content

Commit 45e6bd6

Browse files
lthlsgasche
authored andcommitted
Compile recursive bindings in Lambda (#12596)
(cherry picked from commit d6b7459)
1 parent 0291ca3 commit 45e6bd6

49 files changed

Lines changed: 1238 additions & 1199 deletions

Some content is hidden

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

.depend

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2005,8 +2005,6 @@ typing/value_rec_check.cmi : \
20052005
typing/ident.cmi
20062006
typing/value_rec_types.cmi :
20072007
bytecomp/bytegen.cmo : \
2008-
typing/value_rec_types.cmi \
2009-
typing/types.cmi \
20102008
lambda/switch.cmi \
20112009
typing/subst.cmi \
20122010
typing/primitive.cmi \
@@ -2022,8 +2020,6 @@ bytecomp/bytegen.cmo : \
20222020
parsing/asttypes.cmi \
20232021
bytecomp/bytegen.cmi
20242022
bytecomp/bytegen.cmx : \
2025-
typing/value_rec_types.cmi \
2026-
typing/types.cmx \
20272023
lambda/switch.cmx \
20282024
typing/subst.cmx \
20292025
typing/primitive.cmx \
@@ -2686,8 +2682,6 @@ asmcomp/cmm_invariants.cmx : \
26862682
asmcomp/cmm_invariants.cmi : \
26872683
asmcomp/cmm.cmi
26882684
asmcomp/cmmgen.cmo : \
2689-
typing/value_rec_types.cmi \
2690-
typing/types.cmi \
26912685
asmcomp/thread_sanitizer.cmi \
26922686
middle_end/printclambda_primitives.cmi \
26932687
typing/primitive.cmi \
@@ -2707,8 +2701,6 @@ asmcomp/cmmgen.cmo : \
27072701
asmcomp/afl_instrument.cmi \
27082702
asmcomp/cmmgen.cmi
27092703
asmcomp/cmmgen.cmx : \
2710-
typing/value_rec_types.cmi \
2711-
typing/types.cmx \
27122704
asmcomp/thread_sanitizer.cmx \
27132705
middle_end/printclambda_primitives.cmx \
27142706
typing/primitive.cmx \
@@ -3392,7 +3384,6 @@ middle_end/backend_var.cmi : \
33923384
typing/ident.cmi \
33933385
lambda/debuginfo.cmi
33943386
middle_end/clambda.cmo : \
3395-
typing/value_rec_types.cmi \
33963387
typing/path.cmi \
33973388
lambda/lambda.cmi \
33983389
typing/ident.cmi \
@@ -3402,7 +3393,6 @@ middle_end/clambda.cmo : \
34023393
parsing/asttypes.cmi \
34033394
middle_end/clambda.cmi
34043395
middle_end/clambda.cmx : \
3405-
typing/value_rec_types.cmi \
34063396
typing/path.cmx \
34073397
lambda/lambda.cmx \
34083398
typing/ident.cmx \
@@ -3412,7 +3402,6 @@ middle_end/clambda.cmx : \
34123402
parsing/asttypes.cmi \
34133403
middle_end/clambda.cmi
34143404
middle_end/clambda.cmi : \
3415-
typing/value_rec_types.cmi \
34163405
typing/path.cmi \
34173406
lambda/lambda.cmi \
34183407
typing/ident.cmi \
@@ -3546,7 +3535,6 @@ middle_end/linkage_name.cmx : \
35463535
middle_end/linkage_name.cmi : \
35473536
utils/identifiable.cmi
35483537
middle_end/printclambda.cmo : \
3549-
typing/value_rec_types.cmi \
35503538
lambda/printlambda.cmi \
35513539
middle_end/printclambda_primitives.cmi \
35523540
lambda/lambda.cmi \
@@ -3556,7 +3544,6 @@ middle_end/printclambda.cmo : \
35563544
parsing/asttypes.cmi \
35573545
middle_end/printclambda.cmi
35583546
middle_end/printclambda.cmx : \
3559-
typing/value_rec_types.cmi \
35603547
lambda/printlambda.cmx \
35613548
middle_end/printclambda_primitives.cmx \
35623549
lambda/lambda.cmx \
@@ -3650,7 +3637,6 @@ lambda/debuginfo.cmi : \
36503637
typing/ident.cmi \
36513638
parsing/asttypes.cmi
36523639
lambda/lambda.cmo : \
3653-
typing/value_rec_types.cmi \
36543640
typing/types.cmi \
36553641
typing/primitive.cmi \
36563642
typing/path.cmi \
@@ -3663,7 +3649,6 @@ lambda/lambda.cmo : \
36633649
parsing/asttypes.cmi \
36643650
lambda/lambda.cmi
36653651
lambda/lambda.cmx : \
3666-
typing/value_rec_types.cmi \
36673652
typing/types.cmx \
36683653
typing/primitive.cmx \
36693654
typing/path.cmx \
@@ -3676,7 +3661,6 @@ lambda/lambda.cmx : \
36763661
parsing/asttypes.cmi \
36773662
lambda/lambda.cmi
36783663
lambda/lambda.cmi : \
3679-
typing/value_rec_types.cmi \
36803664
typing/types.cmi \
36813665
typing/primitive.cmi \
36823666
typing/path.cmi \
@@ -3842,6 +3826,7 @@ lambda/translattribute.cmi : \
38423826
parsing/location.cmi \
38433827
lambda/lambda.cmi
38443828
lambda/translclass.cmo : \
3829+
typing/value_rec_types.cmi \
38453830
typing/types.cmi \
38463831
typing/typeopt.cmi \
38473832
typing/typedtree.cmi \
@@ -3860,6 +3845,7 @@ lambda/translclass.cmo : \
38603845
parsing/asttypes.cmi \
38613846
lambda/translclass.cmi
38623847
lambda/translclass.cmx : \
3848+
typing/value_rec_types.cmi \
38633849
typing/types.cmx \
38643850
typing/typeopt.cmx \
38653851
typing/typedtree.cmx \
@@ -3878,13 +3864,15 @@ lambda/translclass.cmx : \
38783864
parsing/asttypes.cmi \
38793865
lambda/translclass.cmi
38803866
lambda/translclass.cmi : \
3867+
typing/value_rec_types.cmi \
38813868
typing/typedtree.cmi \
38823869
parsing/location.cmi \
38833870
lambda/lambda.cmi \
38843871
typing/ident.cmi \
38853872
lambda/debuginfo.cmi \
38863873
parsing/asttypes.cmi
38873874
lambda/translcore.cmo : \
3875+
lambda/value_rec_compiler.cmi \
38883876
typing/types.cmi \
38893877
typing/typeopt.cmi \
38903878
typing/typedtree.cmi \
@@ -3909,6 +3897,7 @@ lambda/translcore.cmo : \
39093897
parsing/asttypes.cmi \
39103898
lambda/translcore.cmi
39113899
lambda/translcore.cmx : \
3900+
lambda/value_rec_compiler.cmx \
39123901
typing/types.cmx \
39133902
typing/typeopt.cmx \
39143903
typing/typedtree.cmx \
@@ -3942,6 +3931,7 @@ lambda/translcore.cmi : \
39423931
lambda/debuginfo.cmi \
39433932
parsing/asttypes.cmi
39443933
lambda/translmod.cmo : \
3934+
lambda/value_rec_compiler.cmi \
39453935
typing/types.cmi \
39463936
typing/typedtree.cmi \
39473937
lambda/translprim.cmi \
@@ -3964,6 +3954,7 @@ lambda/translmod.cmo : \
39643954
parsing/asttypes.cmi \
39653955
lambda/translmod.cmi
39663956
lambda/translmod.cmx : \
3957+
lambda/value_rec_compiler.cmx \
39673958
typing/types.cmx \
39683959
typing/typedtree.cmx \
39693960
lambda/translprim.cmx \
@@ -4062,6 +4053,30 @@ lambda/translprim.cmi : \
40624053
lambda/lambda.cmi \
40634054
typing/ident.cmi \
40644055
typing/env.cmi
4056+
lambda/value_rec_compiler.cmo : \
4057+
typing/value_rec_types.cmi \
4058+
typing/primitive.cmi \
4059+
utils/misc.cmi \
4060+
utils/lazy_backtrack.cmi \
4061+
lambda/lambda.cmi \
4062+
typing/ident.cmi \
4063+
lambda/debuginfo.cmi \
4064+
parsing/asttypes.cmi \
4065+
lambda/value_rec_compiler.cmi
4066+
lambda/value_rec_compiler.cmx : \
4067+
typing/value_rec_types.cmi \
4068+
typing/primitive.cmx \
4069+
utils/misc.cmx \
4070+
utils/lazy_backtrack.cmx \
4071+
lambda/lambda.cmx \
4072+
typing/ident.cmx \
4073+
lambda/debuginfo.cmx \
4074+
parsing/asttypes.cmi \
4075+
lambda/value_rec_compiler.cmi
4076+
lambda/value_rec_compiler.cmi : \
4077+
typing/value_rec_types.cmi \
4078+
lambda/lambda.cmi \
4079+
typing/ident.cmi
40654080
file_formats/cmi_format.cmo : \
40664081
typing/types.cmi \
40674082
utils/misc.cmi \
@@ -4606,7 +4621,6 @@ middle_end/flambda/find_recursive_functions.cmi : \
46064621
middle_end/backend_intf.cmi
46074622
middle_end/flambda/flambda.cmo : \
46084623
middle_end/variable.cmi \
4609-
typing/value_rec_types.cmi \
46104624
middle_end/flambda/base_types/tag.cmi \
46114625
middle_end/symbol.cmi \
46124626
middle_end/flambda/base_types/static_exception.cmi \
@@ -4633,7 +4647,6 @@ middle_end/flambda/flambda.cmo : \
46334647
middle_end/flambda/flambda.cmi
46344648
middle_end/flambda/flambda.cmx : \
46354649
middle_end/variable.cmx \
4636-
typing/value_rec_types.cmi \
46374650
middle_end/flambda/base_types/tag.cmx \
46384651
middle_end/symbol.cmx \
46394652
middle_end/flambda/base_types/static_exception.cmx \
@@ -4660,7 +4673,6 @@ middle_end/flambda/flambda.cmx : \
46604673
middle_end/flambda/flambda.cmi
46614674
middle_end/flambda/flambda.cmi : \
46624675
middle_end/variable.cmi \
4663-
typing/value_rec_types.cmi \
46644676
middle_end/flambda/base_types/tag.cmi \
46654677
middle_end/symbol.cmi \
46664678
middle_end/flambda/base_types/static_exception.cmi \
@@ -4730,13 +4742,11 @@ middle_end/flambda/flambda_invariants.cmi : \
47304742
middle_end/flambda/flambda.cmi
47314743
middle_end/flambda/flambda_iterators.cmo : \
47324744
middle_end/variable.cmi \
4733-
typing/value_rec_types.cmi \
47344745
utils/int_replace_polymorphic_compare.cmi \
47354746
middle_end/flambda/flambda.cmi \
47364747
middle_end/flambda/flambda_iterators.cmi
47374748
middle_end/flambda/flambda_iterators.cmx : \
47384749
middle_end/variable.cmx \
4739-
typing/value_rec_types.cmi \
47404750
utils/int_replace_polymorphic_compare.cmx \
47414751
middle_end/flambda/flambda.cmx \
47424752
middle_end/flambda/flambda_iterators.cmi
@@ -4886,7 +4896,6 @@ middle_end/flambda/flambda_to_clambda.cmi : \
48864896
middle_end/flambda/flambda_utils.cmo : \
48874897
middle_end/variable.cmi \
48884898
middle_end/flambda/base_types/var_within_closure.cmi \
4889-
typing/value_rec_types.cmi \
48904899
middle_end/symbol.cmi \
48914900
lambda/switch.cmi \
48924901
middle_end/flambda/base_types/static_exception.cmi \
@@ -4912,7 +4921,6 @@ middle_end/flambda/flambda_utils.cmo : \
49124921
middle_end/flambda/flambda_utils.cmx : \
49134922
middle_end/variable.cmx \
49144923
middle_end/flambda/base_types/var_within_closure.cmx \
4915-
typing/value_rec_types.cmi \
49164924
middle_end/symbol.cmx \
49174925
lambda/switch.cmx \
49184926
middle_end/flambda/base_types/static_exception.cmx \
@@ -5410,7 +5418,6 @@ middle_end/flambda/invariant_params.cmi : \
54105418
middle_end/backend_intf.cmi
54115419
middle_end/flambda/lift_code.cmo : \
54125420
middle_end/variable.cmi \
5413-
utils/strongly_connected_components.cmi \
54145421
middle_end/flambda/base_types/mutable_variable.cmi \
54155422
lambda/lambda.cmi \
54165423
utils/int_replace_polymorphic_compare.cmi \
@@ -5420,7 +5427,6 @@ middle_end/flambda/lift_code.cmo : \
54205427
middle_end/flambda/lift_code.cmi
54215428
middle_end/flambda/lift_code.cmx : \
54225429
middle_end/variable.cmx \
5423-
utils/strongly_connected_components.cmx \
54245430
middle_end/flambda/base_types/mutable_variable.cmx \
54255431
lambda/lambda.cmx \
54265432
utils/int_replace_polymorphic_compare.cmx \
@@ -5481,22 +5487,18 @@ middle_end/flambda/lift_let_to_initialize_symbol.cmo : \
54815487
middle_end/variable.cmi \
54825488
middle_end/flambda/base_types/tag.cmi \
54835489
middle_end/symbol.cmi \
5484-
middle_end/internal_variable_names.cmi \
54855490
utils/int_replace_polymorphic_compare.cmi \
54865491
middle_end/flambda/flambda_utils.cmi \
54875492
middle_end/flambda/flambda.cmi \
5488-
lambda/debuginfo.cmi \
54895493
parsing/asttypes.cmi \
54905494
middle_end/flambda/lift_let_to_initialize_symbol.cmi
54915495
middle_end/flambda/lift_let_to_initialize_symbol.cmx : \
54925496
middle_end/variable.cmx \
54935497
middle_end/flambda/base_types/tag.cmx \
54945498
middle_end/symbol.cmx \
5495-
middle_end/internal_variable_names.cmx \
54965499
utils/int_replace_polymorphic_compare.cmx \
54975500
middle_end/flambda/flambda_utils.cmx \
54985501
middle_end/flambda/flambda.cmx \
5499-
lambda/debuginfo.cmx \
55005502
parsing/asttypes.cmi \
55015503
middle_end/flambda/lift_let_to_initialize_symbol.cmi
55025504
middle_end/flambda/lift_let_to_initialize_symbol.cmi : \
@@ -5853,7 +5855,6 @@ middle_end/flambda/traverse_for_exported_symbols.cmi : \
58535855
middle_end/flambda/base_types/export_id.cmi \
58545856
middle_end/flambda/base_types/closure_id.cmi
58555857
middle_end/flambda/un_anf.cmo : \
5856-
typing/value_rec_types.cmi \
58575858
middle_end/symbol.cmi \
58585859
middle_end/semantics_of_primitives.cmi \
58595860
middle_end/printclambda.cmi \
@@ -5867,7 +5868,6 @@ middle_end/flambda/un_anf.cmo : \
58675868
parsing/asttypes.cmi \
58685869
middle_end/flambda/un_anf.cmi
58695870
middle_end/flambda/un_anf.cmx : \
5870-
typing/value_rec_types.cmi \
58715871
middle_end/symbol.cmx \
58725872
middle_end/semantics_of_primitives.cmx \
58735873
middle_end/printclambda.cmx \

Changes

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,11 @@ OCaml 5.2.0
240240
were not correctly rounded sometimes.
241241
(Xavier Leroy, review by Anil Madhavapeddy and Tim McGilchrist)
242242

243-
- #12551, #12608, #12782: Overhaul of recursive value compilation.
244-
Extend the Rec_check classification to handle constants, propagate the
245-
classification through the compiler, compute sizes during classification.
246-
(Vincent Laviron and Lunia Ayanides, review by Gabriel Scherer)
243+
- #12551, #12608, #12782, #12596: Overhaul of recursive value compilation.
244+
Non-function recursive bindings are now forbidden from Lambda onwards,
245+
and compiled using a new Value_rec_compiler module.
246+
(Vincent Laviron and Lunia Ayanides, review by Gabriel Scherer,
247+
Stefan Muenzel and Nathanaëlle Courant)
247248

248249
- #1809, #12181: rewrite `compare x y op 0` to `x op y` when values are integers
249250
(Xavier Clerc, Stefan Muenzel, review by Gabriel Scherer and Vincent Laviron)

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ lambda_SOURCES = $(addprefix lambda/, \
165165
printlambda.mli printlambda.ml \
166166
switch.mli switch.ml \
167167
matching.mli matching.ml \
168+
value_rec_compiler.mli value_rec_compiler.ml \
168169
translobj.mli translobj.ml \
169170
translattribute.mli translattribute.ml \
170171
translprim.mli translprim.ml \

0 commit comments

Comments
 (0)