From 9acd1b1d8868f6816333f450292c9399d2d0465f Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Wed, 18 Aug 2021 19:26:41 +0300 Subject: [PATCH] Forbid using undefined namespaces --- src/aeso_ast_infer_types.erl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/aeso_ast_infer_types.erl b/src/aeso_ast_infer_types.erl index 48c412b..42be32a 100644 --- a/src/aeso_ast_infer_types.erl +++ b/src/aeso_ast_infer_types.erl @@ -1008,14 +1008,21 @@ check_typedef(Env, {variant_t, Cons}) -> check_usings(Env, []) -> Env; -check_usings(Env = #env{ used_namespaces = UsedNamespaces }, [{using, _, Con, Alias} | Rest]) -> +check_usings(Env = #env{ used_namespaces = UsedNamespaces }, [{using, Ann, Con, Alias} | Rest]) -> AliasName = case Alias of none -> none; _ -> qname(Alias) end, - check_usings(Env#env{ used_namespaces = UsedNamespaces ++ [{qname(Con), AliasName}] }, Rest); + case get_scope(Env, qname(Con)) of + false -> + create_type_errors(), + type_error({using_undefined_namespace, Ann, qname(Con)}), + destroy_and_report_type_errors(Env); + _ -> + check_usings(Env#env{ used_namespaces = UsedNamespaces ++ [{qname(Con), AliasName}] }, Rest) + end; check_usings(Env, Using = {using, _, _, _}) -> check_usings(Env, [Using]). @@ -3026,6 +3033,9 @@ mk_error({ambiguous_name, QIds = [{qid, Ann, _} | _]}) -> Names = lists:map(fun(QId) -> io_lib:format("~s at ~s\n", [pp(QId), pp_loc(QId)]) end, QIds), Msg = "Ambiguous name: " ++ lists:concat(Names), mk_t_err(pos(Ann), Msg); +mk_error({using_undefined_namespace, Ann, Namespace}) -> + Msg = io_lib:format("Cannot use undefined namespace ~s", [Namespace]), + mk_t_err(pos(Ann), Msg); mk_error(Err) -> Msg = io_lib:format("Unknown error: ~p\n", [Err]), mk_t_err(pos(0, 0), Msg).