ReasonLIGO: Add support for _ as an argument

This commit is contained in:
Sander Spies 2020-03-26 20:40:18 +01:00
parent 24f4364978
commit 62d1a77b3d
4 changed files with 1107 additions and 1102 deletions

View File

@ -445,8 +445,12 @@ fun_expr:
let rec arg_to_pattern = function let rec arg_to_pattern = function
EVar v -> EVar v ->
if v.value = "_" then
PWild v.region
else (
Scoping.check_reserved_name v; Scoping.check_reserved_name v;
PVar v PVar v
)
| EAnnot {region; value = {inside = EVar v, colon, typ; _}} -> | EAnnot {region; value = {inside = EVar v, colon, typ; _}} ->
Scoping.check_reserved_name v; Scoping.check_reserved_name v;
let value = {pattern = PVar v; colon; type_expr = typ} let value = {pattern = PVar v; colon; type_expr = typ}
@ -778,6 +782,7 @@ common_expr:
| "<nat>" { EArith (Nat $1) } | "<nat>" { EArith (Nat $1) }
| "<bytes>" { EBytes $1 } | "<bytes>" { EBytes $1 }
| "<ident>" | module_field { EVar $1 } | "<ident>" | module_field { EVar $1 }
| "_" { EVar {value = "_"; region = $1} }
| projection { EProj $1 } | projection { EProj $1 }
| update_record { EUpdate $1 } | update_record { EUpdate $1 }
| "<string>" { EString (String $1) } | "<string>" { EString (String $1) }

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@ type storage = map (int, big_map (nat, big_map (int, string)));
type return = (list (operation), storage); type return = (list (operation), storage);
let main = ((ignore, store): (unit, storage)): return => { let main = ((_, store): (unit, storage)): return => {
([]: list(operation), store) ([]: list(operation), store)
}; };

View File

@ -15,7 +15,7 @@ let arguments = (b: int, c: int) => { b + c; };
let arguments_type_def = (b: fun_type) => b (5, 3); let arguments_type_def = (b: fun_type) => b (5, 3);
let arguments_test = (ignore: int) => arguments_type_def (arguments); let arguments_test = (_: int) => arguments_type_def (arguments);
type tuple_type = ((int, int)) => int; type tuple_type = ((int, int)) => int;
@ -23,7 +23,7 @@ let tuple = ((a, b): (int, int)) => { a + b; };
let tuple_type_def = (b: tuple_type) => b ((5, 3)); let tuple_type_def = (b: tuple_type) => b ((5, 3));
let tuple_test = (ignore: int) => tuple_type_def (tuple); let tuple_test = (_: int) => tuple_type_def (tuple);
/* inline */ /* inline */
@ -32,12 +32,12 @@ let arguments_inline = (b: int, c: int) => { b + c; };
let arguments_type_def_inline = (b: (int, int) => int) => b (5, 3); let arguments_type_def_inline = (b: (int, int) => int) => b (5, 3);
let arguments_test_inline = (ignore: int) => let arguments_test_inline = (_: int) =>
arguments_type_def_inline (arguments_inline); arguments_type_def_inline (arguments_inline);
let tuple_inline = ((a, b): (int, int)) => { a + b; }; let tuple_inline = ((a, b): (int, int)) => { a + b; };
let tuple_type_def_inline = (b: ((int, int)) => int) => b ((5, 3)); let tuple_type_def_inline = (b: ((int, int)) => int) => b ((5, 3));
let tuple_test_inline = (ignore: int) => let tuple_test_inline = (_: int) =>
tuple_type_def_inline(tuple_inline); tuple_type_def_inline(tuple_inline);