@@ -8,11 +8,18 @@ store(_Meta, New, New, _TKV, Aliases, MacroAliases, _Lexical) ->
88 { Aliases , MacroAliases };
99store (Meta , New , Old , TKV , Aliases , MacroAliases , Lexical ) ->
1010 record_warn (Meta , New , TKV , Lexical ),
11- NewAliases = orddict :store (New , Old , Aliases ),
12-
13- case lists :keymember (context , 1 , Meta ) of
14- true -> { NewAliases , orddict :store (New , Old , MacroAliases ) };
15- false -> { NewAliases , MacroAliases }
11+ { store_alias (New , Old , Aliases ),
12+ store_macro_alias (Meta , New , Old , MacroAliases ) }.
13+
14+ store_alias (New , Old , Aliases ) ->
15+ lists :keystore (New , 1 , Aliases , { New , Old }).
16+ store_macro_alias (Meta , New , Old , Aliases ) ->
17+ case lists :keymember (context , 1 , Meta ) andalso
18+ lists :keyfind (counter , 1 , Meta ) of
19+ { counter , Counter } when is_integer (Counter ) ->
20+ lists :keystore (New , 1 , Aliases , { New , { Counter , Old } });
21+ _ ->
22+ Aliases
1623 end .
1724
1825record_warn (Meta , Ref , Opts , Lexical ) ->
@@ -27,48 +34,38 @@ record_warn(Meta, Ref, Opts, Lexical) ->
2734% % Expand an alias. It returns an atom (meaning that there
2835% % was an expansion) or a list of atoms.
2936
37+ expand ({ '__aliases__' , _Meta , ['Elixir' |_ ] = List }, _Aliases , _MacroAliases , _LexicalTracker ) ->
38+ concat (List );
39+
3040expand ({ '__aliases__' , Meta , _ } = Alias , Aliases , MacroAliases , LexicalTracker ) ->
3141 case lists :keyfind (alias , 1 , Meta ) of
3242 { alias , false } ->
3343 expand (Alias , MacroAliases , LexicalTracker );
3444 { alias , Atom } when is_atom (Atom ) ->
35- case expand (Alias , MacroAliases , LexicalTracker ) of
36- OtherAtom when is_atom (OtherAtom ) -> OtherAtom ;
37- OtherAliases when is_list (OtherAliases ) -> Atom
38- end ;
45+ Atom ;
3946 false ->
4047 expand (Alias , Aliases , LexicalTracker )
4148 end .
4249
43- expand ({ '__aliases__' , _Meta , [H ] }, Aliases , LexicalTracker ) when H /= 'Elixir' ->
44- case expand_one (H , Aliases , LexicalTracker ) of
45- false -> [H ];
46- Atom -> Atom
47- end ;
48-
49- expand ({ '__aliases__' , _Meta , [H |T ] }, Aliases , LexicalTracker ) when is_atom (H ) ->
50- case H of
51- 'Elixir' ->
52- concat (T );
53- _ ->
54- case expand_one (H , Aliases , LexicalTracker ) of
55- false -> [H |T ];
56- Atom -> concat ([Atom |T ])
50+ expand ({ '__aliases__' , Meta , [H |T ] }, Aliases , LexicalTracker ) when is_atom (H ) ->
51+ Lookup = list_to_atom (" Elixir." ++ atom_to_list (H )),
52+ Counter = case lists :keyfind (counter , 1 , Meta ) of
53+ { counter , C } -> C ;
54+ _ -> nil
55+ end ,
56+ case lookup (Lookup , Aliases , Counter ) of
57+ Lookup -> [H |T ];
58+ Atom ->
59+ elixir_lexical :record_alias (Lookup , LexicalTracker ),
60+ case T of
61+ [] -> Atom ;
62+ _ -> concat ([Atom |T ])
5763 end
5864 end ;
5965
6066expand ({ '__aliases__' , _Meta , List }, _Aliases , _LexicalTracker ) ->
6167 List .
6268
63- expand_one (H , Aliases , LexicalTracker ) ->
64- Lookup = list_to_atom (" Elixir." ++ atom_to_list (H )),
65- case lookup (Lookup , Aliases ) of
66- Lookup -> false ;
67- Else ->
68- elixir_lexical :record_alias (Lookup , LexicalTracker ),
69- Else
70- end .
71-
7269% % Ensure a module is loaded before its usage.
7370
7471ensure_loaded (Line , Ref , S ) ->
@@ -129,9 +126,10 @@ to_partial(Arg) when is_binary(Arg) -> Arg.
129126
130127% % Lookup an alias in the current scope.
131128
132- lookup (Else , Dict ) ->
133- case orddict :find (Else , Dict ) of
134- { ok , Value } when Value /= Else -> lookup (Value , Dict );
129+ lookup (Else , Dict , Counter ) ->
130+ case lists :keyfind (Else , 1 , Dict ) of
131+ { Else , { Counter , Value } } -> lookup (Value , Dict , Counter );
132+ { Else , Value } when is_atom (Value ) -> lookup (Value , Dict , Counter );
135133 _ -> Else
136134 end .
137135
0 commit comments