From 33dbeeefad4501616baa6284311cc7a6e2fb5db4 Mon Sep 17 00:00:00 2001 From: Hans Svensson Date: Mon, 27 May 2019 15:56:43 +0200 Subject: [PATCH] Consider namespaces when collecting used_types --- src/aeso_ast_infer_types.erl | 4 ++-- src/aeso_syntax_utils.erl | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/aeso_ast_infer_types.erl b/src/aeso_ast_infer_types.erl index 1e5bfc8..5c97c5d 100644 --- a/src/aeso_ast_infer_types.erl +++ b/src/aeso_ast_infer_types.erl @@ -611,11 +611,11 @@ infer_contract(Env, What, Defs) -> {Env4, TypeDefs ++ Decls ++ Defs1}. -spec check_typedefs(env(), [aeso_syntax:decl()]) -> {env(), [aeso_syntax:decl()]}. -check_typedefs(Env, Defs) -> +check_typedefs(Env = #env{ namespace = Ns }, Defs) -> create_type_errors(), GetName = fun({type_def, _, {id, _, Name}, _, _}) -> Name end, TypeMap = maps:from_list([ {GetName(Def), Def} || Def <- Defs ]), - DepGraph = maps:map(fun(_, Def) -> aeso_syntax_utils:used_types(Def) end, TypeMap), + DepGraph = maps:map(fun(_, Def) -> aeso_syntax_utils:used_types(Ns, Def) end, TypeMap), SCCs = aeso_utils:scc(DepGraph), {Env1, Defs1} = check_typedef_sccs(Env, TypeMap, SCCs, []), destroy_and_report_type_errors(Env), diff --git a/src/aeso_syntax_utils.erl b/src/aeso_syntax_utils.erl index 95b61d2..21c1314 100644 --- a/src/aeso_syntax_utils.erl +++ b/src/aeso_syntax_utils.erl @@ -6,7 +6,7 @@ %%%------------------------------------------------------------------- -module(aeso_syntax_utils). --export([used_ids/1, used_types/1, used/1]). +-export([used_ids/1, used_types/2, used/1]). -record(alg, {zero, plus, scoped}). @@ -100,8 +100,12 @@ fold(Alg = #alg{zero = Zero, plus = Plus, scoped = Scoped}, Fun, K, X) -> used_ids(E) -> [ X || {{term, [X]}, _} <- used(E) ]. -used_types(T) -> - [ X || {{type, [X]}, _} <- used(T) ]. +used_types([Top] = _CurrentNS, T) -> + F = fun({{type, [X]}, _}) -> [X]; + ({{type, [Top1, X]}, _}) when Top1 == Top -> [X]; + (_) -> [] + end, + lists:flatmap(F, used(T)). -type entity() :: {term, [string()]} | {type, [string()]}