Add error messages for bad include and nested namespace
This commit is contained in:
committed by
Ulf Norell
parent
2b7490776e
commit
421bc01012
@@ -566,11 +566,13 @@ infer_constant({letval, Attrs,_Pattern, Type, E}) ->
|
||||
infer_contract(Env, What, Defs) ->
|
||||
Kind = fun({type_def, _, _, _, _}) -> type;
|
||||
({letfun, _, _, _, _, _}) -> function;
|
||||
({fun_decl, _, _, _}) -> prototype
|
||||
({fun_decl, _, _, _}) -> prototype;
|
||||
(_) -> unexpected
|
||||
end,
|
||||
Get = fun(K) -> [ Def || Def <- Defs, Kind(Def) == K ] end,
|
||||
{Env1, TypeDefs} = check_typedefs(Env, Get(type)),
|
||||
create_type_errors(),
|
||||
check_unexpected(Get(unexpected)),
|
||||
Env2 =
|
||||
case What of
|
||||
namespace -> Env1;
|
||||
@@ -646,6 +648,9 @@ check_typedef(Env, {variant_t, Cons}) ->
|
||||
{variant_t, [ {constr_t, Ann, Con, [ check_type(Env, Arg) || Arg <- Args ]}
|
||||
|| {constr_t, Ann, Con, Args} <- Cons ]}.
|
||||
|
||||
check_unexpected(Xs) ->
|
||||
[ type_error(X) || X <- Xs ].
|
||||
|
||||
-spec check_type(env(), aeso_syntax:type()) -> aeso_syntax:type().
|
||||
check_type(Env, T) ->
|
||||
check_type(Env, T, 0).
|
||||
@@ -1869,6 +1874,12 @@ pp_error({duplicate_definition, Name, Locs}) ->
|
||||
pp_error({duplicate_scope, Kind, Name, OtherKind, L}) ->
|
||||
io_lib:format("The ~p ~s (at ~s) has the same name as a ~p at ~s\n",
|
||||
[Kind, pp(Name), pp_loc(Name), OtherKind, pp_loc(L)]);
|
||||
pp_error({include, {string, Pos, Name}}) ->
|
||||
io_lib:format("Include of '~s' at ~s\nnot allowed, include only allowed at top level.\n",
|
||||
[binary_to_list(Name), pp_loc(Pos)]);
|
||||
pp_error({namespace, _Pos, {con, Pos, Name}, _Def}) ->
|
||||
io_lib:format("Nested namespace not allowed\nNamespace '~s' at ~s not defined at top level.\n",
|
||||
[Name, pp_loc(Pos)]);
|
||||
pp_error(Err) ->
|
||||
io_lib:format("Unknown error: ~p\n", [Err]).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user