minor fixes
This commit is contained in:
parent
b65c9ca67f
commit
0e17e8b274
@ -27,8 +27,8 @@ module Errors = struct
|
|||||||
error ~data title message
|
error ~data title message
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
open Errors
|
open Errors
|
||||||
|
|
||||||
open Operators.Simplify.Ligodity
|
open Operators.Simplify.Ligodity
|
||||||
|
|
||||||
let r_split = Location.r_split
|
let r_split = Location.r_split
|
||||||
@ -48,7 +48,7 @@ let rec pattern_to_typed_var : Raw.pattern -> _ = fun p ->
|
|||||||
ok (v , Some tp.type_expr)
|
ok (v , Some tp.type_expr)
|
||||||
)
|
)
|
||||||
| Raw.PVar v -> ok (v , None)
|
| Raw.PVar v -> ok (v , None)
|
||||||
| _ -> fail @@ wrong_pattern "var" p
|
| _ -> fail @@ wrong_pattern "var/typed" p
|
||||||
|
|
||||||
let rec expr_to_typed_expr : Raw.expr -> _ = fun e ->
|
let rec expr_to_typed_expr : Raw.expr -> _ = fun e ->
|
||||||
match e with
|
match e with
|
||||||
@ -57,11 +57,13 @@ let rec expr_to_typed_expr : Raw.expr -> _ = fun e ->
|
|||||||
| _ -> ok (e , None)
|
| _ -> ok (e , None)
|
||||||
|
|
||||||
let patterns_to_var : Raw.pattern list -> _ = fun ps ->
|
let patterns_to_var : Raw.pattern list -> _ = fun ps ->
|
||||||
let%bind () = Assert.assert_list_size ps 1 in
|
match ps with
|
||||||
pattern_to_var @@ List.hd ps
|
| [ pattern ] -> pattern_to_var pattern
|
||||||
|
| _ -> fail (simple_error "multiple patterns not supported on lets yet")
|
||||||
|
|
||||||
let rec simpl_type_expression : Raw.type_expr -> type_expression result =
|
let rec simpl_type_expression : Raw.type_expr -> type_expression result = fun te ->
|
||||||
function
|
trace (simple_info "simplifying this type expression...") @@
|
||||||
|
match te with
|
||||||
| TPar x -> simpl_type_expression x.value.inside
|
| TPar x -> simpl_type_expression x.value.inside
|
||||||
| TAlias v -> (
|
| TAlias v -> (
|
||||||
match List.assoc_opt v.value type_constants with
|
match List.assoc_opt v.value type_constants with
|
||||||
@ -71,7 +73,10 @@ let rec simpl_type_expression : Raw.type_expr -> type_expression result =
|
|||||||
| TFun x -> (
|
| TFun x -> (
|
||||||
let%bind (a , b) =
|
let%bind (a , b) =
|
||||||
let (a , _ , b) = x.value in
|
let (a , _ , b) = x.value in
|
||||||
bind_map_pair simpl_type_expression (a , b) in
|
let%bind a = simpl_type_expression a in
|
||||||
|
let%bind b = simpl_type_expression b in
|
||||||
|
ok (a , b)
|
||||||
|
in
|
||||||
ok @@ T_function (a , b)
|
ok @@ T_function (a , b)
|
||||||
)
|
)
|
||||||
| TApp x ->
|
| TApp x ->
|
||||||
@ -79,8 +84,9 @@ let rec simpl_type_expression : Raw.type_expr -> type_expression result =
|
|||||||
let lst = npseq_to_list tuple.value.inside in
|
let lst = npseq_to_list tuple.value.inside in
|
||||||
let%bind cst =
|
let%bind cst =
|
||||||
trace_option (simple_error "unrecognized type constants") @@
|
trace_option (simple_error "unrecognized type constants") @@
|
||||||
List.assoc_opt name.value type_constants in
|
List.assoc_opt name.value type_constants
|
||||||
let%bind lst' = bind_list @@ List.map simpl_type_expression lst in
|
in
|
||||||
|
let%bind lst' = bind_map_list simpl_type_expression lst in
|
||||||
ok @@ T_constant (cst , lst')
|
ok @@ T_constant (cst , lst')
|
||||||
| TProd p ->
|
| TProd p ->
|
||||||
let%bind tpl = simpl_list_type_expression
|
let%bind tpl = simpl_list_type_expression
|
||||||
@ -88,7 +94,8 @@ let rec simpl_type_expression : Raw.type_expr -> type_expression result =
|
|||||||
ok tpl
|
ok tpl
|
||||||
| TRecord r ->
|
| TRecord r ->
|
||||||
let aux = fun (x, y) -> let%bind y = simpl_type_expression y in ok (x, y) in
|
let aux = fun (x, y) -> let%bind y = simpl_type_expression y in ok (x, y) in
|
||||||
let%bind lst = bind_list
|
let%bind lst =
|
||||||
|
bind_list
|
||||||
@@ List.map aux
|
@@ List.map aux
|
||||||
@@ List.map (fun (x:Raw.field_decl Raw.reg) -> (x.value.field_name.value, x.value.field_type))
|
@@ List.map (fun (x:Raw.field_decl Raw.reg) -> (x.value.field_name.value, x.value.field_type))
|
||||||
@@ pseq_to_list r.value.elements in
|
@@ pseq_to_list r.value.elements in
|
||||||
@ -116,7 +123,7 @@ and simpl_list_type_expression (lst:Raw.type_expr list) : type_expression result
|
|||||||
| [] -> assert false
|
| [] -> assert false
|
||||||
| [hd] -> simpl_type_expression hd
|
| [hd] -> simpl_type_expression hd
|
||||||
| lst ->
|
| lst ->
|
||||||
let%bind lst = bind_list @@ List.map simpl_type_expression lst in
|
let%bind lst = bind_map_list simpl_type_expression lst in
|
||||||
ok @@ T_tuple lst
|
ok @@ T_tuple lst
|
||||||
|
|
||||||
let rec simpl_expression :
|
let rec simpl_expression :
|
||||||
@ -525,7 +532,7 @@ and simpl_cases : type a . (Raw.pattern * a) list -> a matching result = fun t -
|
|||||||
ok @@ Match_list {match_cons = (a, b, cons) ; match_nil = nil}
|
ok @@ Match_list {match_cons = (a, b, cons) ; match_nil = nil}
|
||||||
)
|
)
|
||||||
| lst -> (
|
| lst -> (
|
||||||
trace (simple_error "weird patterns not supported yet") @@
|
trace (simple_info "weird patterns not supported yet") @@
|
||||||
let%bind constrs =
|
let%bind constrs =
|
||||||
let aux (x , y) =
|
let aux (x , y) =
|
||||||
let error =
|
let error =
|
||||||
|
4
vendors/ligo-utils/simple-utils/trace.ml
vendored
4
vendors/ligo-utils/simple-utils/trace.ml
vendored
@ -237,11 +237,11 @@ let dummy_fail = simple_fail "dummy"
|
|||||||
*)
|
*)
|
||||||
let trace info = function
|
let trace info = function
|
||||||
| Ok _ as o -> o
|
| Ok _ as o -> o
|
||||||
| Error err -> Error (thunk @@ prepend_info (info ()) (err ()))
|
| Error err -> Error (fun () -> prepend_info (info ()) (err ()))
|
||||||
|
|
||||||
(**
|
(**
|
||||||
Erase the current error stack, and replace it by the given error. It's useful
|
Erase the current error stack, and replace it by the given error. It's useful
|
||||||
when using `Asserts` and you want to discard its auto-generated message.
|
when using `Assert` and you want to discard its auto-generated message.
|
||||||
*)
|
*)
|
||||||
let trace_strong err = function
|
let trace_strong err = function
|
||||||
| Ok _ as o -> o
|
| Ok _ as o -> o
|
||||||
|
Loading…
Reference in New Issue
Block a user