diff --git a/src/aeso_ast_infer_types.erl b/src/aeso_ast_infer_types.erl index 212eb64..573bc34 100644 --- a/src/aeso_ast_infer_types.erl +++ b/src/aeso_ast_infer_types.erl @@ -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);