diff options
author | Son Ho | 2022-02-23 23:36:53 +0100 |
---|---|---|
committer | Son Ho | 2022-02-23 23:36:53 +0100 |
commit | 532b43ad73a4964cd75d8548d43eb894b7f225c1 (patch) | |
tree | 485fc8c35aebd2467878dc18e3f675a9e43175a1 /src/PureUtils.ml | |
parent | e3430dcb5e944af0903b272669e6ddbb8e7d59c3 (diff) |
Start working on generating code which uses a state-error monad
Diffstat (limited to 'src/PureUtils.ml')
-rw-r--r-- | src/PureUtils.ml | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/PureUtils.ml b/src/PureUtils.ml index e637b6ba..26dc6294 100644 --- a/src/PureUtils.ml +++ b/src/PureUtils.ml @@ -98,12 +98,14 @@ let mk_adt_lvalue (adt_ty : ty) (variant_id : VariantId.id) { value; ty = adt_ty } let ty_as_integer (t : ty) : T.integer_type = - match t with Integer int_ty -> int_ty | _ -> failwith "Unreachable" + match t with Integer int_ty -> int_ty | _ -> raise (Failure "Unreachable") (* TODO: move *) let type_def_is_enum (def : T.type_def) : bool = match def.kind with T.Struct _ -> false | Enum _ -> true +let mk_state_ty : ty = Adt (Assumed State, []) + let mk_result_ty (ty : ty) : ty = Adt (Assumed Result, [ ty ]) let mk_result_fail_rvalue (ty : ty) : typed_rvalue = @@ -130,6 +132,13 @@ let mk_result_return_lvalue (v : typed_lvalue) : typed_lvalue = in { value; ty } +let mk_arrow_ty (arg_ty : ty) (ret_ty : ty) : ty = Arrow (arg_ty, ret_ty) + +let dest_arrow_ty (ty : ty) : ty * ty = + match ty with + | Arrow (arg_ty, ret_ty) -> (arg_ty, ret_ty) + | _ -> raise (Failure "Unreachable") + let compute_constant_value_ty (cv : constant_value) : ty = match cv with | V.Scalar sv -> Integer sv.V.int_ty |