From c20cbdea8723d2dd28da39ba8ec7f8fb645eccb3 Mon Sep 17 00:00:00 2001 From: ygrek Date: Wed, 18 Apr 2018 10:10:34 +0300 Subject: [PATCH] caml: do not generate duplicate code in Fold (close #48) --- run_test | 6 ++++-- src/gen_caml.ml | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/run_test b/run_test index 6462225..9106575 100755 --- a/run_test +++ b/run_test @@ -2,7 +2,9 @@ set -e -u -if [ "$1" = "init" ] ; then +mode=${1:-run} + +if [ "$mode" = "init" ] ; then OUTDIR=test/out echo Initializing test outputs in $OUTDIR else @@ -16,6 +18,6 @@ for file in test/*.sql; do ./cli.native -no-header -gen xml $file > $OUTDIR/${basename%.sql}.xml || { echo FAILED $file; exit 2; } done -[ "$1" = "init" ] || diff -u test/out test/tmp +[ "$mode" = "init" ] || diff -u test/out test/tmp echo OK diff --git a/src/gen_caml.ml b/src/gen_caml.ml index 2dd2f25..9413b79 100644 --- a/src/gen_caml.ml +++ b/src/gen_caml.ml @@ -110,6 +110,9 @@ let generate_stmt fold index stmt = let name = choose_name stmt.props stmt.kind index |> String.uncapitalize in let subst = Props.get_all stmt.props "subst" in let values = (subst @ params_to_values stmt.params) |> List.map (prepend "~") |> inline_values in + match fold, is_callback stmt with + | true, false -> output "let %s = %s" name name (* alias non-fold impl, identical *) + | _ -> let fold = fold && is_callback stmt in let all_params = values ^ (if is_callback stmt then " callback" else "") ^ (if fold then " acc" else "") in output "let %s db %s =" name all_params; -- 2.11.4.GIT