Skip to content

Commit 16f06f6

Browse files
committed
for mutual recursive function, do a topological sort before compiling, so that
we can recognize faked recursive function(check if the cluster size is 1 and if it is self recursive). note that inlining will further break the mutual recursive function size down
1 parent c089860 commit 16f06f6

39 files changed

+8563
-6091
lines changed

Diff for: jscomp/Makefile

+5-4
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ OUNIT_TESTS_SRCS = ounit_array_tests ounit_list_test ounit_path_tests ounit_uni
5252
OUNIT_TESTS_CMXS = $(addprefix ounit_tests/, $(addsuffix .cmx, $(OUNIT_TESTS_SRCS)))
5353

5454
EXT_SRCS = ext_array ext_bytes ext_char resize_array string_vec int_vec int_vec_vec ext_file_pp ext_format ext_hashtbl ext_list ext_map ext_marshal ext_option \
55-
ext_pervasives ext_pp ext_ref ext_string ext_sys hash_set ordered_hash_set union_find ident_set int_map literals string_map \
55+
ext_pervasives ext_pp ext_ref ext_string ext_sys hash_set ordered_hash_set ordered_hash_map union_find ident_set int_map literals string_map \
5656
string_set ext_scc ext_pp_scope ext_io ext_ident ext_filename
5757

5858
EXT_CMXS=$(addprefix ext/, $(addsuffix .cmx, $(EXT_SRCS)))
@@ -66,11 +66,12 @@ SYNTAX_CMXS=$(addprefix syntax/, $(addsuffix .cmx, $(SYNTAX_SRCS)))
6666
DEPENDS_SRCS= depends_post_process bs_exception ast_extract binary_ast
6767
DEPENDS_CMXS=$(addprefix depends/, $(addsuffix .cmx, $(DEPENDS_SRCS)))
6868
CORE_SRCS= type_int_to_string type_util ident_map ocaml_stdlib_slots ident_util bs_conditional_initial ocaml_options ocaml_parse lam\
69-
lam_iter lam_print lam_beta_reduce_util lam_inline_util lam_analysis js_cmj_format js_fun_env js_call_info js_closure js_op js_number js_cmj_datasets\
69+
lam_print lam_beta_reduce_util lam_inline_util lam_analysis js_cmj_format js_fun_env js_call_info js_closure js_op js_number js_cmj_datasets\
7070
lam_exit_code j lam_module_ident lam_compile_util lam_stats config_util lam_compile_defs js_map js_fold js_fold_basic js_pass_scope\
7171
js_op_util js_analyzer js_shake js_exp_make js_long js_of_lam_exception js_of_lam_module js_of_lam_array js_of_lam_block js_of_lam_string\
72-
js_of_lam_tuple js_of_lam_record js_of_lam_float_record js_arr lam_compile_const lam_util lam_group js_stmt_make js_pass_flatten\
73-
js_pass_tailcall_inline js_of_lam_variant js_pass_flatten_and_mark_dead js_ast_util lam_dce lam_compile_env lam_stats_util\
72+
js_of_lam_tuple js_of_lam_record js_of_lam_float_record js_arr lam_compile_const \
73+
lam_inner lam_util lam_group js_stmt_make js_pass_flatten\
74+
js_pass_tailcall_inline js_of_lam_variant js_pass_flatten_and_mark_dead js_ast_util lam_dce lam_group_pass lam_compile_env lam_stats_util\
7475
lam_stats_export lam_pass_alpha_conversion lam_pass_collect js_program_loader js_dump js_pass_debug\
7576
js_of_lam_option js_output lam_compile_global lam_dispatch_primitive lam_beta_reduce\
7677
lam_compile_external_call lam_compile_primitive lam_compile lam_pass_exits\

Diff for: jscomp/all.depend

+16-12
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ ext/int_vec.cmx : ext/resize_array.cmx ext/int_vec.cmi
2727
ext/int_vec_vec.cmx : ext/resize_array.cmx ext/int_vec.cmx \
2828
ext/int_vec_vec.cmi
2929
ext/literals.cmx : ext/literals.cmi
30+
ext/ordered_hash_map.cmx : ext/ordered_hash_map.cmi
3031
ext/ordered_hash_set.cmx : ext/ordered_hash_set.cmi
31-
ext/resize_array.cmx : ext/resize_array.cmi
32+
ext/resize_array.cmx : ext/ext_array.cmx ext/resize_array.cmi
3233
ext/string_map.cmx : ext/string_map.cmi
3334
ext/string_set.cmx : ext/string_set.cmi
3435
ext/string_vec.cmx : ext/resize_array.cmx ext/string_vec.cmi
@@ -59,6 +60,7 @@ ext/int_map.cmi :
5960
ext/int_vec.cmi : ext/resize_array.cmi
6061
ext/int_vec_vec.cmi : ext/resize_array.cmi ext/int_vec.cmi
6162
ext/literals.cmi :
63+
ext/ordered_hash_map.cmi :
6264
ext/ordered_hash_set.cmi :
6365
ext/resize_array.cmi :
6466
ext/string_map.cmi :
@@ -270,8 +272,9 @@ core/js_stmt_make.cmx : core/lam_util.cmx core/lam.cmx core/js_exp_make.cmx \
270272
core/jsoo_main.cmx : syntax/ppx_entry.cmx core/lam_compile_group.cmx \
271273
core/js_dump.cmx ext/ext_pp.cmx common/bs_version.cmx \
272274
core/bs_conditional_initial.cmx core/jsoo_main.cmi
273-
core/lam.cmx : core/ocaml_stdlib_slots.cmx ext/literals.cmx \
274-
common/js_config.cmx ext/ext_string.cmx core/lam.cmi
275+
core/lam.cmx : ext/ordered_hash_map.cmx core/ocaml_stdlib_slots.cmx \
276+
ext/literals.cmx common/js_config.cmx ext/int_vec_vec.cmx ext/int_vec.cmx \
277+
ext/ident_set.cmx ext/ext_string.cmx ext/ext_scc.cmx core/lam.cmi
275278
core/lam_analysis.cmx : core/lam.cmx ext/ident_set.cmx core/ident_map.cmx \
276279
core/lam_analysis.cmi
277280
core/lam_beta_reduce.cmx : core/lam_util.cmx core/lam_stats.cmx \
@@ -335,8 +338,8 @@ core/lam_compile_primitive.cmx : core/lam_util.cmx \
335338
core/js_exp_make.cmx common/js_config.cmx core/j.cmx common/ext_log.cmx \
336339
core/lam_compile_primitive.cmi
337340
core/lam_compile_util.cmx : core/js_op.cmx core/lam_compile_util.cmi
338-
core/lam_dce.cmx : core/lam_util.cmx core/lam_group.cmx \
339-
core/lam_analysis.cmx core/lam.cmx ext/ident_set.cmx ext/hash_set.cmx \
341+
core/lam_dce.cmx : core/lam_group.cmx core/lam_analysis.cmx core/lam.cmx \
342+
ext/ident_set.cmx ext/hash_set.cmx ext/ext_pervasives.cmx \
340343
ext/ext_ident.cmx core/lam_dce.cmi
341344
core/lam_dispatch_primitive.cmx : core/js_stmt_make.cmx \
342345
core/js_of_lam_tuple.cmx core/js_of_lam_option.cmx \
@@ -347,8 +350,9 @@ core/lam_dispatch_primitive.cmx : core/js_stmt_make.cmx \
347350
core/lam_exit_code.cmx : core/lam.cmx core/lam_exit_code.cmi
348351
core/lam_group.cmx : core/lam_util.cmx core/lam_print.cmx core/lam.cmx \
349352
core/js_number.cmx ext/ident_set.cmx core/lam_group.cmi
353+
core/lam_group_pass.cmx : core/lam.cmx
350354
core/lam_inline_util.cmx : core/lam.cmx core/lam_inline_util.cmi
351-
core/lam_iter.cmx : core/lam.cmx core/lam_iter.cmi
355+
core/lam_inner.cmx : core/lam.cmx core/lam_inner.cmi
352356
core/lam_module_ident.cmx : core/js_op.cmx common/js_config.cmx core/j.cmx \
353357
core/lam_module_ident.cmi
354358
core/lam_pass_alpha_conversion.cmx : core/lam_util.cmx \
@@ -381,10 +385,10 @@ core/lam_stats_export.cmx : ext/string_map.cmx core/lam_stats_util.cmx \
381385
core/lam_stats_util.cmx : core/lam_stats.cmx core/lam_compile_env.cmx \
382386
core/lam.cmx ext/ext_list.cmx core/lam_stats_util.cmi
383387
core/lam_util.cmx : ext/literals.cmx core/lam_stats.cmx core/lam_print.cmx \
384-
core/lam_module_ident.cmx core/lam_iter.cmx core/lam_analysis.cmx \
385-
core/lam.cmx core/js_fold_basic.cmx common/js_config.cmx \
386-
ext/ident_set.cmx core/ident_map.cmx ext/ext_list.cmx \
387-
ext/ext_filename.cmx core/lam_util.cmi
388+
core/lam_module_ident.cmx core/lam_analysis.cmx core/lam.cmx \
389+
core/js_fold_basic.cmx common/js_config.cmx ext/ident_set.cmx \
390+
core/ident_map.cmx ext/ext_list.cmx ext/ext_filename.cmx \
391+
core/lam_util.cmi
388392
core/ocaml_batch_compile.cmx : core/ocaml_parse.cmx \
389393
core/js_implementation.cmx common/js_config.cmx ext/ext_ref.cmx \
390394
ext/ext_pervasives.cmx ext/ext_format.cmx ext/ext_filename.cmx \
@@ -442,7 +446,7 @@ core/js_program_loader.cmi : core/lam_module_ident.cmi core/j.cmx
442446
core/js_shake.cmi : core/j.cmx
443447
core/js_stmt_make.cmi : core/lam.cmi core/js_closure.cmi core/j.cmx
444448
core/jsoo_main.cmi :
445-
core/lam.cmi :
449+
core/lam.cmi : ext/ident_set.cmi
446450
core/lam_analysis.cmi : core/lam.cmi ext/ident_set.cmi core/ident_map.cmi
447451
core/lam_beta_reduce.cmi : core/lam_stats.cmi core/lam_analysis.cmi \
448452
core/lam.cmi core/ident_map.cmi
@@ -465,7 +469,7 @@ core/lam_dispatch_primitive.cmi : core/j.cmx
465469
core/lam_exit_code.cmi : core/lam.cmi
466470
core/lam_group.cmi : core/lam.cmi
467471
core/lam_inline_util.cmi : core/lam.cmi
468-
core/lam_iter.cmi : core/lam.cmi
472+
core/lam_inner.cmi : core/lam.cmi
469473
core/lam_module_ident.cmi : core/js_op.cmx common/js_config.cmi core/j.cmx
470474
core/lam_pass_alpha_conversion.cmi : core/lam_stats.cmi core/lam.cmi
471475
core/lam_pass_collect.cmi : core/lam_stats.cmi core/lam.cmi

0 commit comments

Comments
 (0)