diff options
| author | Alasdair | 2020-09-28 15:01:04 +0100 |
|---|---|---|
| committer | Alasdair | 2020-09-28 15:34:06 +0100 |
| commit | cf42208a74138a32393073fef574c24bd73a27fc (patch) | |
| tree | d2cb2a894c87654c8b6209596fb30c100a65c072 /src/interpreter.ml | |
| parent | 551bca444eaf0acd97324c12005e9a8280437217 (diff) | |
Move the ast defs wrapper into it's own file
This refactoring is intended to allow this type to have more than just a
list of definitions in future.
Diffstat (limited to 'src/interpreter.ml')
| -rw-r--r-- | src/interpreter.ml | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/interpreter.ml b/src/interpreter.ml index b3e8fe31..29598993 100644 --- a/src/interpreter.ml +++ b/src/interpreter.ml @@ -49,6 +49,7 @@ (**************************************************************************) open Ast +open Ast_defs open Ast_util open Value @@ -755,11 +756,11 @@ let exp_of_fundef (FD_aux (FD_function (_, _, _, funcls), annot)) value = let pexp_of_funcl (FCL_aux (FCL_Funcl (_, pexp), _)) = pexp in E_aux (E_case (exp_of_value value, List.map pexp_of_funcl funcls), annot) -let rec ast_letbinds (Defs defs) = +let rec defs_letbinds defs = match defs with | [] -> [] - | DEF_val lb :: defs -> lb :: ast_letbinds (Defs defs) - | _ :: defs -> ast_letbinds (Defs defs) + | DEF_val lb :: defs -> lb :: defs_letbinds defs + | _ :: defs -> defs_letbinds defs let initial_lstate = { locals = Bindings.empty } @@ -945,11 +946,11 @@ let rec run_frame frame = let eval_exp state exp = run_frame (Step (lazy "", state, return exp, [])) -let initial_gstate primops ast env = +let initial_gstate primops defs env = { registers = Bindings.empty; allow_registers = true; primops = primops; - letbinds = ast_letbinds ast; + letbinds = defs_letbinds defs; fundefs = Bindings.empty; last_write_ea = None; typecheck_env = env; @@ -972,14 +973,14 @@ let rec initialize_registers allow_registers gstate = | _ -> gstate in function - | Defs (def :: defs) -> - initialize_registers allow_registers (process_def def) (Defs defs) - | Defs [] -> gstate + | def :: defs -> + initialize_registers allow_registers (process_def def) defs + | [] -> gstate -let initial_state ?(registers=true) ast env primops = - let gstate = initial_gstate primops ast env in +let initial_state ?(registers=true) (Defs defs) env primops = + let gstate = initial_gstate primops defs env in let gstate = - { (initialize_registers registers gstate ast) + { (initialize_registers registers gstate defs) with allow_registers = registers } in initial_lstate, gstate |
