From 8a4f51158e770df7b4434e82fbf8ff280da3bb11 Mon Sep 17 00:00:00 2001 From: Son Ho Date: Thu, 27 Jan 2022 01:16:08 +0100 Subject: Start working on Translate --- src/Translate.ml | 57 ++++++++++++++++++++++++-------------------------------- 1 file changed, 24 insertions(+), 33 deletions(-) (limited to 'src/Translate.ml') diff --git a/src/Translate.ml b/src/Translate.ml index efdad619..69e09334 100644 --- a/src/Translate.ml +++ b/src/Translate.ml @@ -11,46 +11,37 @@ open InterpreterStatements (** The local logger *) let log = L.translate_log -(** Execute the symbolic interpreter on a function to generate a symbolic AST. *) -let translate_function_to_symbolic (config : C.partial_config) - (m : M.cfim_module) (fid : A.FunDefId.id) - (back_id : T.RegionGroupId.id option) : unit = +(** Execute the symbolic interpreter on a function to generate a list of symbolic ASTs, + for the forward function and the backward functions. *) +let translate_function_to_symbolics (config : C.partial_config) + (m : M.cfim_module) (fid : A.FunDefId.id) : + SA.expression * SA.expression list = (* Retrieve the function declaration *) let fdef = A.FunDefId.nth m.functions fid in (* Debug *) log#ldebug (lazy - ("translate_function_to_pure: " - ^ Print.name_to_string fdef.A.name - ^ " (" - ^ Print.option_to_string T.RegionGroupId.to_string back_id - ^ ")")); - - (* Create the evaluation context *) - let ctx = initialize_symbolic_context_for_fun m fdef in - - (* Create the continuation to check the function's result *) - let cf_check res _ = - match res with - | Return -> raise Errors.Unimplemented - | Panic -> - (* Note that as we explore all the execution branches, one of - * the executions can lead to a panic *) - if synthesize then Some SA.Panic else None - | _ -> - failwith - ("Unit test failed (symbolic execution) on: " - ^ Print.name_to_string fdef.A.name) + ("translate_function_to_symbolics: " ^ Print.name_to_string fdef.A.name)); + + (* Evaluate *) + let evaluate = evaluate_function_symbolic config synthesize m fid in + (* Execute the forward function *) + let forward = evaluate None in + (* Execute the backward functions *) + let backwards = + T.RegionGroupId.mapi + (fun gid _ -> evaluate (Some gid)) + fdef.signature.regions_hierarchy in - (* Evaluate the function *) - let config = C.config_of_partial C.SymbolicMode config in - let _ = eval_function_body config fdef.A.body cf_check ctx in - () + (* Return *) + (forward, backwards) -let translate (config : C.partial_config) (m : M.cfim_module) : unit = - (* Translate all the type definitions *) +(*let translate (config : C.partial_config) (m : M.cfim_module) : unit = + (* Translate all the type definitions *) + let type_defs = SymbolicToPure.translate_type_defs m.type_defs in - (* Translate all the function signatures *) - raise Unimplemented + (* Translate all the function signatures *) + let fun_defs = SymbolicToPure.translate_fun_signatures types_infos + raise Unimplemented*) -- cgit v1.2.3