Allow using namespace to appear in the top level

This commit is contained in:
Gaith Hallak 2021-08-17 18:34:15 +03:00
parent 3a4b63baa2
commit 519e60039e

View File

@ -813,6 +813,10 @@ infer1(Env, [{namespace, Ann, Name, Code} | Rest], Acc, Options) ->
{Env1, Code1} = infer_contract_top(push_scope(namespace, Name, Env), namespace, Code, Options),
Namespace1 = {namespace, Ann, Name, Code1},
infer1(pop_scope(Env1), Rest, [Namespace1 | Acc], Options);
infer1(Env, [Using = {using, _, _} | Rest], Acc, Options) ->
infer1(check_usings(Env, [Using]), Rest, Acc, Options);
infer1(Env, [Using = {using, _, _, _} | Rest], Acc, Options) ->
infer1(check_usings(Env, [Using]), Rest, Acc, Options);
infer1(Env, [{pragma, _, _} | Rest], Acc, Options) ->
%% Pragmas are checked in check_modifiers
infer1(Env, Rest, Acc, Options).
@ -1003,9 +1007,9 @@ check_typedef(Env, {variant_t, Cons}) ->
check_usings(Env, []) ->
Env;
check_usings(Env = #env{ used_namespaces = UsedNamespaces }, [{using, Ann, Con} | Rest]) ->
check_usings(Env = #env{ used_namespaces = UsedNamespaces }, [{using, _, Con} | Rest]) ->
check_usings(Env#env{ used_namespaces = UsedNamespaces ++ [{qname(Con), none}] }, Rest);
check_usings(Env = #env{ used_namespaces = UsedNamespaces }, [{using, Ann, Con, Alias} | Rest]) ->
check_usings(Env = #env{ used_namespaces = UsedNamespaces }, [{using, _, Con, Alias} | Rest]) ->
check_usings(Env#env{ used_namespaces = UsedNamespaces ++ [{qname(Con), qname(Alias)}] }, Rest).
check_unexpected(Xs) ->
@ -1037,6 +1041,10 @@ check_modifiers_(Env, [{namespace, _, _, Decls} | Rest]) ->
check_modifiers_(Env, [{pragma, Ann, Pragma} | Rest]) ->
check_pragma(Env, Ann, Pragma),
check_modifiers_(Env, Rest);
check_modifiers_(Env, [{using, _, _} | Rest]) ->
check_modifiers_(Env, Rest);
check_modifiers_(Env, [{using, _, _, _} | Rest]) ->
check_modifiers_(Env, Rest);
check_modifiers_(Env, [Decl | Rest]) ->
type_error({bad_top_level_decl, Decl}),
check_modifiers_(Env, Rest);