From 430812463d0519beb79526637f6f61bec6d332b7 Mon Sep 17 00:00:00 2001 From: Wonho Date: Thu, 22 Feb 2024 15:44:13 +0900 Subject: [PATCH] Remove SubE in interpreter backend --- spectec/src/il2al/translate.ml | 17 ++++++++++++++--- spectec/src/il2al/transpile.mli | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/spectec/src/il2al/translate.ml b/spectec/src/il2al/translate.ml index dfb4f74c2d..61f3d70a27 100644 --- a/spectec/src/il2al/translate.ml +++ b/spectec/src/il2al/translate.ml @@ -665,7 +665,12 @@ let translate_helper partial_funcs def = let name = id.it in let unified_clauses = Il2il.unify_defs clauses in let Il.DefD (_, args, _, _) = List.hd unified_clauses |> it in - let params' = translate_args args in + let params = + args + |> translate_args + |> List.map + Walk.(walk_expr { default_config with pre_expr = Transpile.remove_sub }) + in let blocks = List.map (translate_helper_body name) unified_clauses in let body = blocks @@ -673,7 +678,7 @@ let translate_helper partial_funcs def = |> Transpile.enhance_readability |> if List.mem id partial_funcs then Fun.id else Transpile.ensure_return in - Some (FuncA (name, params', body)) + Some (FuncA (name, params, body)) | _ -> None @@ -920,13 +925,19 @@ and translate_rgroup (instr_name, rgroup) = get_params winstr |> List.map translate_exp | Some params -> params in + (* TODO: refactor transpiles *) + let al_params' = + List.map + Walk.(walk_expr { default_config with pre_expr = Transpile.remove_sub }) + al_params + in let body = state_instr @ instrs |> insert_nop |> Transpile.enhance_readability |> Transpile.infer_assert in - RuleA (kwd, al_params, body) + RuleA (kwd, al_params', body) let rule_to_tup rule = diff --git a/spectec/src/il2al/transpile.mli b/spectec/src/il2al/transpile.mli index 4c8a0208c8..c9b265a1a7 100644 --- a/spectec/src/il2al/transpile.mli +++ b/spectec/src/il2al/transpile.mli @@ -5,5 +5,6 @@ val push_either :instr -> instr list val simplify_record_concat : expr -> expr val enhance_readability : instr list -> instr list val remove_state : algorithm -> algorithm +val remove_sub : expr -> expr val infer_assert : instr list -> instr list val ensure_return : instr list -> instr list