aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/src/shell.erl
diff options
context:
space:
mode:
authorHans Bolinder <[email protected]>2017-06-26 12:26:43 +0200
committerHans Bolinder <[email protected]>2017-06-26 12:26:43 +0200
commitcd624830428978aa466369eb8951fa510753d781 (patch)
treed987616dcf26ab336505f44b8669626e724afdb9 /lib/stdlib/src/shell.erl
parent900ef806aed51dd9b976e14cde63e3282a39b685 (diff)
parent693691a8e82e892cab23ee66fe3984a3f98e2aa6 (diff)
downloadotp-cd624830428978aa466369eb8951fa510753d781.tar.gz
otp-cd624830428978aa466369eb8951fa510753d781.tar.bz2
otp-cd624830428978aa466369eb8951fa510753d781.zip
Merge branch 'maint'
* maint: Add test for using typed records in shell Fix infinite loop in shell caused by record with recursive typespec
Diffstat (limited to 'lib/stdlib/src/shell.erl')
-rw-r--r--lib/stdlib/src/shell.erl16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/stdlib/src/shell.erl b/lib/stdlib/src/shell.erl
index 6eafc7b209..26b3960f4f 100644
--- a/lib/stdlib/src/shell.erl
+++ b/lib/stdlib/src/shell.erl
@@ -727,7 +727,7 @@ result_will_be_saved() ->
used_record_defs(E, RT) ->
%% Be careful to return a list where used records come before
%% records that use them. The linter wants them ordered that way.
- UR = case used_records(E, [], RT) of
+ UR = case used_records(E, [], RT, []) of
[] ->
[];
L0 ->
@@ -737,13 +737,19 @@ used_record_defs(E, RT) ->
end,
record_defs(RT, UR).
-used_records(E, U0, RT) ->
+used_records(E, U0, RT, Skip) ->
case used_records(E) of
{name,Name,E1} ->
- U = used_records(ets:lookup(RT, Name), [Name | U0], RT),
- used_records(E1, U, RT);
+ U = case lists:member(Name, Skip) of
+ true ->
+ U0;
+ false ->
+ R = ets:lookup(RT, Name),
+ used_records(R, [Name | U0], RT, [Name | Skip])
+ end,
+ used_records(E1, U, RT, Skip);
{expr,[E1 | Es]} ->
- used_records(Es, used_records(E1, U0, RT), RT);
+ used_records(Es, used_records(E1, U0, RT, Skip), RT, Skip);
_ ->
U0
end.