Merge branch 'feature/cameligo-tuple-order-fix' into 'dev'
Fix bug where tuples are destructured with the members in the wrong order Closes #63 See merge request ligolang/ligo!235
This commit is contained in:
commit
0312f1bf64
@ -593,14 +593,15 @@ and simpl_declaration : Raw.declaration -> declaration Location.wrap list result
|
|||||||
if i = (List.length variables) then accesses
|
if i = (List.length variables) then accesses
|
||||||
else
|
else
|
||||||
let accesses =
|
let accesses =
|
||||||
build_access_expr :: accesses
|
build_access_expr :: accesses
|
||||||
in
|
in
|
||||||
gen_access_tuple name ~i: (i + 1) ~accesses
|
gen_access_tuple name ~i: (i + 1) ~accesses
|
||||||
in ok (gen_access_tuple name)
|
in ok (gen_access_tuple name)
|
||||||
(* TODO: Improve this error message *)
|
(* TODO: Improve this error message *)
|
||||||
| other -> fail @@ simplifying_expr other
|
| other -> fail @@ simplifying_expr other
|
||||||
in let%bind decls =
|
in let%bind decls =
|
||||||
bind_map_list process_variable (List.combine variables expr_bind_lst)
|
(* TODO: Rewrite the gen_access_tuple so there's no List.rev *)
|
||||||
|
bind_map_list process_variable (List.combine variables (List.rev expr_bind_lst))
|
||||||
in ok @@ decls
|
in ok @@ decls
|
||||||
| PPar {region = _ ; value = { lpar = _ ; inside = pt; rpar = _; } } ->
|
| PPar {region = _ ; value = { lpar = _ ; inside = pt; rpar = _; } } ->
|
||||||
(* Extract parenthetical multi-bind *)
|
(* Extract parenthetical multi-bind *)
|
||||||
|
@ -11,4 +11,28 @@ let main_paren (p: unit) : int = x + y
|
|||||||
let foobar : (int * int) = (23 , 42)
|
let foobar : (int * int) = (23 , 42)
|
||||||
let (foo : int) , (bar : int) = foobar
|
let (foo : int) , (bar : int) = foobar
|
||||||
|
|
||||||
let non_tuple_rhs (p: unit) : int = foo + bar
|
(* Here to prevent a regression of https://gitlab.com/ligolang/ligo/issues/63#note_254106580 *)
|
||||||
|
|
||||||
|
let correct_values_bound (p: unit) : int * int =
|
||||||
|
foo, bar
|
||||||
|
|
||||||
|
let non_tuple_rhs (p: unit) : int =
|
||||||
|
bar - foo
|
||||||
|
|
||||||
|
(* Here to prevent a regression of https://gitlab.com/ligolang/ligo/issues/63#note_254106580 *)
|
||||||
|
|
||||||
|
let big_tuple : (int * int * int * int * int) = (10, 20, 30, 40, 50)
|
||||||
|
|
||||||
|
let (a: int), (b: int), (c: int), (d: int), (e: int) = big_tuple
|
||||||
|
|
||||||
|
let correct_values_big_tuple (p: unit) : int * int * int * int * int =
|
||||||
|
a, b, c, d, e
|
||||||
|
|
||||||
|
(* Here to prevent a regression of https://gitlab.com/ligolang/ligo/issues/63#note_254106580 *)
|
||||||
|
|
||||||
|
let different_types: (int * string) = 10, "hello"
|
||||||
|
|
||||||
|
let (greet_num: int), (greeting: string) = different_types
|
||||||
|
|
||||||
|
let correct_values_different_types (p: unit) : int * string =
|
||||||
|
greet_num, greeting
|
||||||
|
@ -1215,9 +1215,24 @@ let mligo_let_multiple () : unit result =
|
|||||||
in
|
in
|
||||||
let%bind () =
|
let%bind () =
|
||||||
let input = e_unit () in
|
let input = e_unit () in
|
||||||
let expected = e_int 65 in
|
let expected = e_tuple [e_int 23 ; e_int 42] in
|
||||||
|
expect_eq program "correct_values_bound" input expected
|
||||||
|
in
|
||||||
|
let%bind () =
|
||||||
|
let input = e_unit () in
|
||||||
|
let expected = e_int 19 in
|
||||||
expect_eq program "non_tuple_rhs" input expected
|
expect_eq program "non_tuple_rhs" input expected
|
||||||
in
|
in
|
||||||
|
let%bind () =
|
||||||
|
let input = e_unit () in
|
||||||
|
let expected = e_tuple [e_int 10; e_int 20; e_int 30; e_int 40; e_int 50] in
|
||||||
|
expect_eq program "correct_values_big_tuple" input expected
|
||||||
|
in
|
||||||
|
let%bind () =
|
||||||
|
let input = e_unit () in
|
||||||
|
let expected = e_tuple [e_int 10 ; e_string "hello"] in
|
||||||
|
expect_eq program "correct_values_different_types" input expected
|
||||||
|
in
|
||||||
ok ()
|
ok ()
|
||||||
|
|
||||||
let balance_constant () : unit result =
|
let balance_constant () : unit result =
|
||||||
|
Loading…
Reference in New Issue
Block a user