Changed tuple type parsing rule

This commit is contained in:
radrow 2019-07-20 19:00:53 +02:00
parent 7daf218b2a
commit 4c72045a86

View File

@ -140,7 +140,8 @@ type100() -> type200().
type200() -> type200() ->
?RULE(many({fun_domain(), keyword('=>')}), type300(), fun_t(_1, _2)). ?RULE(many({fun_domain(), keyword('=>')}), type300(), fun_t(_1, _2)).
type300() -> type400(). type300() ->
?RULE(sep1(type400(), tok('*')), tuple_t(get_ann(_1), _1)).
type400() -> type400() ->
choice( choice(
@ -156,10 +157,12 @@ type400() ->
typeAtom() -> typeAtom() ->
?LAZY_P(choice( ?LAZY_P(choice(
[ id(), token(con), token(qcon), token(qid), tvar() [ id(), token(con), token(qcon), token(qid), tvar()
, ?RULE(keyword('('), comma_sep(type()), tok(')'), tuple_t(_1, _2))
])). ])).
fun_domain() -> ?RULE(?LAZY_P(type300()), fun_domain(_1)). fun_domain() -> ?LAZY_P(choice(
[ paren_list(type())
, type300()
])).
%% -- Statements ------------------------------------------------------------- %% -- Statements -------------------------------------------------------------
@ -473,10 +476,6 @@ fun_t(Domains, Type) ->
tuple_e(_Ann, [Expr]) -> Expr; %% Not a tuple tuple_e(_Ann, [Expr]) -> Expr; %% Not a tuple
tuple_e(Ann, Exprs) -> {tuple, Ann, Exprs}. tuple_e(Ann, Exprs) -> {tuple, Ann, Exprs}.
%% TODO: not nice
fun_domain({tuple_t, _, Args}) -> Args;
fun_domain(T) -> [T].
-spec parse_pattern(aeso_syntax:expr()) -> aeso_parse_lib:parser(aeso_syntax:pat()). -spec parse_pattern(aeso_syntax:expr()) -> aeso_parse_lib:parser(aeso_syntax:pat()).
parse_pattern({app, Ann, Con = {'::', _}, Es}) -> parse_pattern({app, Ann, Con = {'::', _}, Es}) ->
{app, Ann, Con, lists:map(fun parse_pattern/1, Es)}; {app, Ann, Con, lists:map(fun parse_pattern/1, Es)};