Use ban_when_const for function applications
This commit is contained in:
parent
42c34ce3d8
commit
95d372c718
@ -1995,7 +1995,7 @@ infer_expr(Env, {typed, As, Body, Type}) ->
|
|||||||
Type1 = check_type(Env, Type),
|
Type1 = check_type(Env, Type),
|
||||||
{typed, _, NewBody, NewType} = check_expr(Env, Body, Type1),
|
{typed, _, NewBody, NewType} = check_expr(Env, Body, Type1),
|
||||||
{typed, As, NewBody, NewType};
|
{typed, As, NewBody, NewType};
|
||||||
infer_expr(Env = #env{ current_const = CurrentConst }, {app, Ann, Fun, Args0} = App) ->
|
infer_expr(Env, {app, Ann, Fun, Args0} = App) ->
|
||||||
{NamedArgs, Args} = split_args(Args0),
|
{NamedArgs, Args} = split_args(Args0),
|
||||||
case aeso_syntax:get_ann(format, Ann) of
|
case aeso_syntax:get_ann(format, Ann) of
|
||||||
infix ->
|
infix ->
|
||||||
@ -2003,17 +2003,9 @@ infer_expr(Env = #env{ current_const = CurrentConst }, {app, Ann, Fun, Args0} =
|
|||||||
prefix ->
|
prefix ->
|
||||||
infer_op(Env, Ann, Fun, Args, fun infer_prefix/1);
|
infer_op(Env, Ann, Fun, Args, fun infer_prefix/1);
|
||||||
_ ->
|
_ ->
|
||||||
case CurrentConst of
|
%% Applications of data constructors are allowed in constants
|
||||||
none -> ok;
|
lists:member(element(1, Fun), [con, qcon]) orelse ban_when_const(Env),
|
||||||
Id ->
|
|
||||||
case Fun of
|
|
||||||
{con, _, _} -> ok;
|
|
||||||
{qcon, _, _} -> ok;
|
|
||||||
_ ->
|
|
||||||
type_error({invalid_const_expr, Id}),
|
|
||||||
destroy_and_report_type_errors(Env)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
NamedArgsVar = fresh_uvar(Ann),
|
NamedArgsVar = fresh_uvar(Ann),
|
||||||
NamedArgs1 = [ infer_named_arg(Env, NamedArgsVar, Arg) || Arg <- NamedArgs ],
|
NamedArgs1 = [ infer_named_arg(Env, NamedArgsVar, Arg) || Arg <- NamedArgs ],
|
||||||
NewFun0 = infer_expr(Env, Fun),
|
NewFun0 = infer_expr(Env, Fun),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user