Handle name collisions

This commit is contained in:
Gaith Hallak 2021-08-18 11:43:33 +03:00
parent 06dc68a7f2
commit 0782f439f5

View File

@ -317,13 +317,13 @@ bind_contract({Contract, Ann, Id, Contents}, Env)
-spec possible_scopes(env(), qname()) -> [qname()]. -spec possible_scopes(env(), qname()) -> [qname()].
possible_scopes(#env{ namespace = Current, used_namespaces = UsedNamespaces }, Name) -> possible_scopes(#env{ namespace = Current, used_namespaces = UsedNamespaces }, Name) ->
Qual = lists:droplast(Name), Qual = lists:droplast(Name),
NewQual = case lists:keyfind(Qual, 2, UsedNamespaces) of NewQuals = case lists:filter(fun(X) -> element(2, X) == Qual end, UsedNamespaces) of
{Namespace, _} -> [] ->
Namespace; [Qual];
false -> Namespaces ->
Qual lists:map(fun(X) -> element(1, X) end, Namespaces)
end, end,
Ret = [ lists:sublist(Current, I) ++ NewQual || I <- lists:seq(0, length(Current)) ] ++ [ Namespace ++ NewQual || {Namespace, none} <- UsedNamespaces ], Ret = [ lists:sublist(Current, I) ++ Q || I <- lists:seq(0, length(Current)), Q <- NewQuals ] ++ [ Namespace ++ Q || {Namespace, none} <- UsedNamespaces, Q <- NewQuals ],
Ret. Ret.
-spec lookup_type(env(), type_id()) -> false | {qname(), type_info()}. -spec lookup_type(env(), type_id()) -> false | {qname(), type_info()}.