Handle qualified constructors in patterns
This commit is contained in:
parent
b9f585ebaf
commit
d4f291f252
@ -1440,18 +1440,13 @@ infer_prefix({IntOp,As}) when IntOp =:= '-' ->
|
||||
abort_expr(Ann, Str) ->
|
||||
{app, Ann, {id, Ann, "abort"}, [{string, Ann, Str}]}.
|
||||
|
||||
free_vars({int, _, _}) ->
|
||||
[];
|
||||
free_vars({char, _, _}) ->
|
||||
[];
|
||||
free_vars({string, _, _}) ->
|
||||
[];
|
||||
free_vars({bool, _, _}) ->
|
||||
[];
|
||||
free_vars(Id={id, _, _}) ->
|
||||
[Id];
|
||||
free_vars({con, _, _}) ->
|
||||
[];
|
||||
free_vars({int, _, _}) -> [];
|
||||
free_vars({char, _, _}) -> [];
|
||||
free_vars({string, _, _}) -> [];
|
||||
free_vars({bool, _, _}) -> [];
|
||||
free_vars(Id={id, _, _}) -> [Id];
|
||||
free_vars({con, _, _}) -> [];
|
||||
free_vars({qcon, _, _}) -> [];
|
||||
free_vars({tuple, _, Cpts}) ->
|
||||
free_vars(Cpts);
|
||||
free_vars({list, _, Elems}) ->
|
||||
@ -1460,6 +1455,8 @@ free_vars({app, _, {'::', _}, Args}) ->
|
||||
free_vars(Args);
|
||||
free_vars({app, _, {con, _, _}, Args}) ->
|
||||
free_vars(Args);
|
||||
free_vars({app, _, {qcon, _, _}, Args}) ->
|
||||
free_vars(Args);
|
||||
free_vars({record, _, Fields}) ->
|
||||
free_vars([E || {field, _, _, E} <- Fields]);
|
||||
free_vars({typed, _, A, _}) ->
|
||||
|
@ -545,7 +545,7 @@ list_comp_e(Ann, Expr, Binds) -> {list_comp, Ann, Expr, Binds}.
|
||||
-spec parse_pattern(aeso_syntax:expr()) -> aeso_parse_lib:parser(aeso_syntax:pat()).
|
||||
parse_pattern({app, Ann, Con = {'::', _}, Es}) ->
|
||||
{app, Ann, Con, lists:map(fun parse_pattern/1, Es)};
|
||||
parse_pattern({app, Ann, Con = {con, _, _}, Es}) ->
|
||||
parse_pattern({app, Ann, Con = {Tag, _, _}, Es}) when Tag == con; Tag == qcon ->
|
||||
{app, Ann, Con, lists:map(fun parse_pattern/1, Es)};
|
||||
parse_pattern({tuple, Ann, Es}) ->
|
||||
{tuple, Ann, lists:map(fun parse_pattern/1, Es)};
|
||||
@ -554,6 +554,7 @@ parse_pattern({list, Ann, Es}) ->
|
||||
parse_pattern({record, Ann, Fs}) ->
|
||||
{record, Ann, lists:map(fun parse_field_pattern/1, Fs)};
|
||||
parse_pattern(E = {con, _, _}) -> E;
|
||||
parse_pattern(E = {qcon, _, _}) -> E;
|
||||
parse_pattern(E = {id, _, _}) -> E;
|
||||
parse_pattern(E = {int, _, _}) -> E;
|
||||
parse_pattern(E = {bool, _, _}) -> E;
|
||||
|
@ -161,7 +161,8 @@ compilable_contracts() ->
|
||||
"list_comp",
|
||||
"payable",
|
||||
"unapplied_builtins",
|
||||
"underscore_number_literals"
|
||||
"underscore_number_literals",
|
||||
"qualified_constructor"
|
||||
].
|
||||
|
||||
not_yet_compilable(fate) -> [];
|
||||
|
8
test/contracts/qualified_constructor.aes
Normal file
8
test/contracts/qualified_constructor.aes
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Foo =
|
||||
datatype x = A | B(int)
|
||||
|
||||
contract Bar =
|
||||
entrypoint f(a : Foo.x) =
|
||||
switch(a)
|
||||
Foo.A => 0
|
||||
Foo.B(n) => n
|
Loading…
x
Reference in New Issue
Block a user