diff --git a/src/aeso_parser.erl b/src/aeso_parser.erl index c33e47c..9ea8286 100644 --- a/src/aeso_parser.erl +++ b/src/aeso_parser.erl @@ -282,9 +282,14 @@ stmt() -> , {else, keyword(else), body()} ])). -branch() -> +branch() -> choice(unguarded_branch(), guarded_branch()). + +unguarded_branch() -> ?RULE(pattern(), keyword('=>'), body(), {'case', _2, _1, _3}). +guarded_branch() -> + ?RULE(pattern(), tok('|'), expr(), keyword('=>'), body(), {'case', _4, _1, _3, _5}). + pattern() -> ?LET_P(E, expr(), parse_pattern(E)). diff --git a/src/aeso_syntax.erl b/src/aeso_syntax.erl index 1873d8e..b22f97d 100644 --- a/src/aeso_syntax.erl +++ b/src/aeso_syntax.erl @@ -145,7 +145,8 @@ -type stmt() :: letbind() | expr(). --type alt() :: {'case', ann(), pat(), expr()}. +-type alt() :: {'case', ann(), pat(), expr()} + | {'case', ann(), pat(), expr(), expr()}. -type lvalue() :: nonempty_list(elim()).