summaryrefslogtreecommitdiff
path: root/lib/stdlib/src/erl_expand_records.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/stdlib/src/erl_expand_records.erl')
-rw-r--r--lib/stdlib/src/erl_expand_records.erl8
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/stdlib/src/erl_expand_records.erl b/lib/stdlib/src/erl_expand_records.erl
index 83f21670c2..7715f7d458 100644
--- a/lib/stdlib/src/erl_expand_records.erl
+++ b/lib/stdlib/src/erl_expand_records.erl
@@ -30,6 +30,7 @@
vcount=0, % Variable counter
calltype=#{}, % Call types
records=#{}, % Record definitions
+ raw_records=[],% Raw record forms
strict_ra=[], % strict record accesses
checked_ra=[], % successfully accessed records
dialyzer=false % Cached value of compile flag 'dialyzer'
@@ -70,7 +71,8 @@ init_calltype_imports([], Ctype) -> Ctype.
forms([{attribute,_,record,{Name,Defs}}=Attr | Fs], St0) ->
NDefs = normalise_fields(Defs),
- St = St0#exprec{records=maps:put(Name, NDefs, St0#exprec.records)},
+ St = St0#exprec{records=maps:put(Name, NDefs, St0#exprec.records),
+ raw_records=[Attr | St0#exprec.raw_records]},
{Fs1, St1} = forms(Fs, St),
{[Attr | Fs1], St1};
forms([{function,Anno,N,A,Cs0} | Fs0], St0) ->
@@ -511,7 +513,7 @@ lc_tq(Anno, [{b_generate,AnnoG,P0,G0} | Qs0], St0) ->
{P1,St2} = pattern(P0, St1),
{Qs1,St3} = lc_tq(Anno, Qs0, St2),
{[{b_generate,AnnoG,P1,G1} | Qs1],St3};
-lc_tq(Anno, [F0 | Qs0], #exprec{calltype=Calltype}=St0) ->
+lc_tq(Anno, [F0 | Qs0], #exprec{calltype=Calltype,raw_records=Records}=St0) ->
%% Allow record/2 and expand out as guard test.
IsOverriden = fun(FA) ->
case Calltype of
@@ -520,7 +522,7 @@ lc_tq(Anno, [F0 | Qs0], #exprec{calltype=Calltype}=St0) ->
_ -> false
end
end,
- case erl_lint:is_guard_test(F0, [], IsOverriden) of
+ case erl_lint:is_guard_test(F0, Records, IsOverriden) of
true ->
{F1,St1} = guard_test(F0, St0),
{Qs1,St2} = lc_tq(Anno, Qs0, St1),