Skip to content

Commit b5f5e04

Browse files
committed
Add counters to other block constructs
1 parent 3d5cd3c commit b5f5e04

4 files changed

Lines changed: 15 additions & 9 deletions

File tree

lib/elixir/src/elixir_clauses.erl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,9 @@ with(Meta, Args, S, E) ->
322322
ok
323323
end,
324324

325-
{{with, Meta, EExprs ++ [[{do, EDo} | EOpts]]}, S3, E}.
325+
#elixir_ex{version=Counter} = S3,
326+
{{with, [{version, Counter} | Meta], EExprs ++ [[{do, EDo} | EOpts]]},
327+
S3#elixir_ex{version=Counter+1}, E}.
326328

327329
expand_with({'<-', Meta, [Left, Right]}, {S, E, HasMatch}) ->
328330
{ERight, SR, ER} = elixir_expand:expand(Right, S, E),

lib/elixir/src/elixir_expand.erl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,8 @@ expand({'cond', Meta, [Opts]}, S, E) ->
331331
assert_no_match_or_guard_scope(Meta, "cond", S, E),
332332
assert_no_underscore_clause_in_cond(Opts, E),
333333
{EClauses, SC, EC} = elixir_clauses:'cond'(Meta, Opts, S, E),
334-
{{'cond', Meta, [EClauses]}, SC, EC};
334+
#elixir_ex{version=Counter} = SC,
335+
{{'cond', [{version, Counter} | Meta], [EClauses]}, SC#elixir_ex{version=Counter+1}, EC};
335336

336337
expand({'case', Meta, [Expr, Options]}, S, E) ->
337338
assert_no_match_or_guard_scope(Meta, "case", S, E),
@@ -340,12 +341,14 @@ expand({'case', Meta, [Expr, Options]}, S, E) ->
340341
expand({'receive', Meta, [Opts]}, S, E) ->
341342
assert_no_match_or_guard_scope(Meta, "receive", S, E),
342343
{EClauses, SC, EC} = elixir_clauses:'receive'(Meta, Opts, S, E),
343-
{{'receive', Meta, [EClauses]}, SC, EC};
344+
#elixir_ex{version=Counter} = SC,
345+
{{'receive', [{version, Counter} | Meta], [EClauses]}, SC#elixir_ex{version=Counter+1}, EC};
344346

345347
expand({'try', Meta, [Opts]}, S, E) ->
346348
assert_no_match_or_guard_scope(Meta, "try", S, E),
347349
{EClauses, SC, EC} = elixir_clauses:'try'(Meta, Opts, S, E),
348-
{{'try', Meta, [EClauses]}, SC, EC};
350+
#elixir_ex{version=Counter} = SC,
351+
{{'try', [{version, Counter} | Meta], [EClauses]}, SC#elixir_ex{version=Counter+1}, EC};
349352

350353
%% Comprehensions
351354

@@ -857,9 +860,9 @@ expand_for({for, Meta, [_ | _] = Args}, S, E, Return) ->
857860
{error, Error} -> {file_error(Meta, E, ?MODULE, Error), EOpts}
858861
end,
859862

860-
{{for, Meta, ECases ++ [[{do, EExpr} | NormalizedOpts]]},
861-
elixir_env:merge_and_check_unused_vars(SE, S, EE),
862-
E}.
863+
#elixir_ex{version=Counter} = SF = elixir_env:merge_and_check_unused_vars(SE, S, EE),
864+
{{for, [{version, Counter} | Meta], ECases ++ [[{do, EExpr} | NormalizedOpts]]},
865+
SF#elixir_ex{version=Counter+1}, E}.
863866

864867
validate_for_options([{into, _} = Pair | Opts], _Into, Uniq, Reduce, Return, Meta, E, Acc) ->
865868
validate_for_options(Opts, Pair, Uniq, Reduce, Return, Meta, E, [Pair | Acc]);

lib/elixir/src/elixir_fn.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ expand(Meta, Clauses, S, E) when is_list(Clauses) ->
2929

3030
case lists:usort(EArities) of
3131
[_] ->
32-
{{fn, Meta, EClauses}, SE, E};
32+
#elixir_ex{version=Counter} = SE,
33+
{{fn, [{version, Counter} | Meta], EClauses}, SE#elixir_ex{version=Counter+1}, E};
3334
_ ->
3435
file_error(Meta, E, ?MODULE, clauses_with_different_arities)
3536
end.

lib/elixir/test/elixir/kernel/expansion_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ defmodule Kernel.ExpansionTest do
404404
{:=, _, [var_ver(:x, 0), 0]},
405405
{:fn, _, [{:->, _, [[var_ver(:x, 1)], {:=, _, [var_ver(:x, 2), 2]}]}]},
406406
{:=, _, [_, var_ver(:x, 0)]},
407-
{:=, _, [var_ver(:x, 4), 3]}
407+
{:=, _, [var_ver(:x, 5), 3]}
408408
]} =
409409
expand_with_version(
410410
quote do

0 commit comments

Comments
 (0)