diff options
| author | Björn Gustavsson <[email protected]> | 2017-06-13 13:07:02 +0200 | 
|---|---|---|
| committer | Björn Gustavsson <[email protected]> | 2017-06-13 13:07:02 +0200 | 
| commit | 4179fda36587ea42d79a7222eb358e4ca3fbcfab (patch) | |
| tree | e129b21c39374756b93d30b52343d2037ba27175 /lib/compiler/src | |
| parent | 2820003c58097805f5ec8d2c82c3006e20662fcb (diff) | |
| download | otp-4179fda36587ea42d79a7222eb358e4ca3fbcfab.tar.gz otp-4179fda36587ea42d79a7222eb358e4ca3fbcfab.tar.bz2 otp-4179fda36587ea42d79a7222eb358e4ca3fbcfab.zip  | |
v3_kernel: Keep orddicts sorted
Diffstat (limited to 'lib/compiler/src')
| -rw-r--r-- | lib/compiler/src/v3_kernel.erl | 27 | 
1 files changed, 15 insertions, 12 deletions
diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl index 004c609311..1fc05109c5 100644 --- a/lib/compiler/src/v3_kernel.erl +++ b/lib/compiler/src/v3_kernel.erl @@ -1313,23 +1313,26 @@ get_vsub(V, Vsub) ->  set_vsub(V, S, Vsub) ->      orddict:store(V, S, Vsub). -subst_vsub(Key, New, [{K,Key}|Dict]) -> +subst_vsub(Key, New, Vsub) -> +    orddict:from_list(subst_vsub_1(Key, New, Vsub)). + +subst_vsub_1(Key, New, [{K,Key}|Dict]) ->      %% Fold chained substitution. -    [{K,New}|subst_vsub(Key, New, Dict)]; -subst_vsub(Key, New, [{K,_}|_]=Dict) when Key < K -> +    [{K,New}|subst_vsub_1(Key, New, Dict)]; +subst_vsub_1(Key, New, [{K,_}|_]=Dict) when Key < K ->      %% Insert the new substitution here, and continue      %% look for chained substitutions. -    [{Key,New}|subst_vsub_1(Key, New, Dict)]; -subst_vsub(Key, New, [{K,_}=E|Dict]) when Key > K -> -    [E|subst_vsub(Key, New, Dict)]; -subst_vsub(Key, New, []) -> [{Key,New}]. +    [{Key,New}|subst_vsub_2(Key, New, Dict)]; +subst_vsub_1(Key, New, [{K,_}=E|Dict]) when Key > K -> +    [E|subst_vsub_1(Key, New, Dict)]; +subst_vsub_1(Key, New, []) -> [{Key,New}]. -subst_vsub_1(V, S, [{K,V}|Dict]) -> +subst_vsub_2(V, S, [{K,V}|Dict]) ->      %% Fold chained substitution. -    [{K,S}|subst_vsub_1(V, S, Dict)]; -subst_vsub_1(V, S, [E|Dict]) -> -    [E|subst_vsub_1(V, S, Dict)]; -subst_vsub_1(_, _, []) -> []. +    [{K,S}|subst_vsub_2(V, S, Dict)]; +subst_vsub_2(V, S, [E|Dict]) -> +    [E|subst_vsub_2(V, S, Dict)]; +subst_vsub_2(_, _, []) -> [].  get_fsub(F, A, Fsub) ->      case orddict:find({F,A}, Fsub) of  | 
