summaryrefslogtreecommitdiff
path: root/src/state.ml
diff options
context:
space:
mode:
authorAlasdair2020-09-29 16:23:40 +0100
committerAlasdair2020-09-29 16:32:24 +0100
commit7441db19749fb7fb9383b6361dfbd99547e53486 (patch)
tree779f90dbe139bce648540d517be84b156d92319e /src/state.ml
parent6dbd0facf0962d869d0c3957f668b035a4a6605c (diff)
Refactor: Change AST type from a union to a struct
Diffstat (limited to 'src/state.ml')
-rw-r--r--src/state.ml22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/state.ml b/src/state.ml
index 3491afd3..15475a36 100644
--- a/src/state.ml
+++ b/src/state.ml
@@ -61,9 +61,9 @@ open Pretty_print_sail
let opt_type_grouped_regstate = ref false
-let defs_of_string = ast_of_def_string
+let defs_of_string str = (ast_of_def_string str).defs
-let is_defined defs name = IdSet.mem (mk_id name) (ids_of_ast (Defs defs))
+let is_defined defs name = IdSet.mem (mk_id name) (ids_of_defs defs)
let has_default_order defs =
List.exists (function DEF_default (DT_aux (DT_order _, _)) -> true | _ -> false) defs
@@ -122,7 +122,7 @@ let generate_regstate registers =
in
TD_record (mk_id "regstate", mk_typquant [], fields, false)
in
- Defs [DEF_type (TD_aux (regstate_def, (Unknown, ())))]
+ [DEF_type (TD_aux (regstate_def, (Unknown, ())))]
let generate_initial_regstate defs =
let registers = find_registers defs in
@@ -260,7 +260,7 @@ let generate_regval_typ typs =
(String.concat ", " (builtins :: List.map constr (Bindings.bindings typs))) ^
" }")]
-let add_regval_conv id typ (Defs defs) =
+let add_regval_conv id typ defs =
let id = string_of_id id in
let typ_str = to_string (doc_typ typ) in
(* Create a function that converts from regval to the target type. *)
@@ -276,8 +276,8 @@ let add_regval_conv id typ (Defs defs) =
let to_val = Printf.sprintf "val %s : %s -> register_value" to_name typ_str in
let to_function = Printf.sprintf "function %s v = Regval_%s(v)" to_name id in
let to_defs = if is_defined defs to_name then [] else [to_val; to_function] in
- let cdefs = concat_ast (List.map defs_of_string (from_defs @ to_defs)) in
- append_ast (Defs defs) cdefs
+ let cdefs = List.concat (List.map defs_of_string (from_defs @ to_defs)) in
+ defs @ cdefs
let rec regval_convs_lem mwords (Typ_aux (t, _) as typ) = match t with
| Typ_app _ when (is_vector_typ typ || is_bitvector_typ typ) && not (mwords && is_bitvector_typ typ) ->
@@ -375,7 +375,7 @@ let register_refs_lem mwords registers =
(* TODO Generate well-typedness predicate for register states (and events),
asserting that all lists representing non-bit-vectors have the right length. *)
-let generate_isa_lemmas mwords (Defs defs : tannot ast) =
+let generate_isa_lemmas mwords defs =
let rec drop_while f = function
| x :: xs when f x -> drop_while f xs
| xs -> xs
@@ -553,12 +553,12 @@ let generate_regstate_defs mwords defs =
in
let defs =
option_typ @ regval_typ @ regstate_typ @ initregstate
- |> concat_ast
+ |> List.concat
|> Bindings.fold add_regval_conv regtyps
in
Initial_check.opt_undefined_gen := gen_undef;
defs
-let add_regstate_defs mwords env (Defs defs) =
- let reg_defs, env = Type_error.check env (generate_regstate_defs mwords defs) in
- env, append_ast (Defs defs) reg_defs
+let add_regstate_defs mwords env ast =
+ let reg_defs, env = Type_error.check_defs env (generate_regstate_defs mwords ast.defs) in
+ env, append_ast_defs ast reg_defs