Skip to content

Commit 73d7762

Browse files
committed
Avoid double tracing on captures
1 parent ebe3474 commit 73d7762

File tree

3 files changed

+56
-51
lines changed

3 files changed

+56
-51
lines changed

lib/elixir/src/elixir_expand.erl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -545,8 +545,6 @@ resolve_super(Meta, Arity, E) ->
545545
expand_fn_capture(Meta, Arg, S, E) ->
546546
case elixir_fn:capture(Meta, Arg, S, E) of
547547
{{remote, Remote, Fun, Arity}, RequireMeta, DotMeta, SE, EE} ->
548-
is_atom(Remote) andalso
549-
elixir_env:trace({remote_function, RequireMeta, Remote, Fun, Arity}, E),
550548
AttachedMeta = attach_runtime_module(Remote, RequireMeta, S, E),
551549
{{'&', Meta, [{'/', [], [{{'.', DotMeta, [Remote, Fun]}, AttachedMeta, []}, Arity]}]}, SE, EE};
552550
{{local, Fun, Arity}, _, _, _SE, #{function := nil}} ->

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

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -621,23 +621,6 @@ defmodule Kernel.ExpansionTest do
621621
assert expand(quote(do: quote(do: hello)), []) == {:{}, [], [:hello, [], __MODULE__]}
622622
end
623623

624-
test "expand bind_quoted once" do
625-
expand_env(
626-
quote do
627-
var = 123
628-
quote(bind_quoted: [var: var], do: var)
629-
end,
630-
__ENV__,
631-
[]
632-
)
633-
|> elem(0)
634-
|> Macro.prewalk(fn
635-
{:var, [version: 0], Kernel.ExpansionTest} -> :ok
636-
{:var, _, Kernel.ExpansionTest} = invalid -> flunk("unexpected node #{inspect(invalid)}")
637-
node -> node
638-
end)
639-
end
640-
641624
test "raises if the :bind_quoted option is invalid" do
642625
assert_compile_error(~r"invalid :bind_quoted for quote", fn ->
643626
expand(quote(do: quote(bind_quoted: self(), do: :ok)))

lib/elixir/test/elixir/kernel/tracers_test.exs

Lines changed: 56 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ defmodule Kernel.TracersTest do
2727
Foo
2828
""")
2929

30-
assert_receive {:start, %{lexical_tracker: pid}} when is_pid(pid)
31-
assert_receive {:stop, %{lexical_tracker: pid}} when is_pid(pid)
30+
assert_received {:start, %{lexical_tracker: pid}} when is_pid(pid)
31+
assert_received {:stop, %{lexical_tracker: pid}} when is_pid(pid)
3232
end
3333

3434
test "traces alias references" do
3535
compile_string("""
3636
Foo
3737
""")
3838

39-
assert_receive {{:alias_reference, meta, Foo}, _}
39+
assert_received {{:alias_reference, meta, Foo}, _}
4040
assert meta[:line] == 1
4141
assert meta[:column] == 1
4242
end
@@ -50,17 +50,17 @@ defmodule Kernel.TracersTest do
5050
Bar
5151
""")
5252

53-
assert_receive {{:alias, meta, Hello.World, World, []}, _}
53+
assert_received {{:alias, meta, Hello.World, World, []}, _}
5454
assert meta[:line] == 1
5555
assert meta[:column] == 1
56-
assert_receive {{:alias_expansion, meta, World, Hello.World}, _}
56+
assert_received {{:alias_expansion, meta, World, Hello.World}, _}
5757
assert meta[:line] == 2
5858
assert meta[:column] == 1
5959

60-
assert_receive {{:alias, meta, Foo, Bar, [as: Bar, warn: true]}, _}
60+
assert_received {{:alias, meta, Foo, Bar, [as: Bar, warn: true]}, _}
6161
assert meta[:line] == 4
6262
assert meta[:column] == 1
63-
assert_receive {{:alias_expansion, meta, Bar, Foo}, _}
63+
assert_received {{:alias_expansion, meta, Bar, Foo}, _}
6464
assert meta[:line] == 5
6565
assert meta[:column] == 1
6666
end
@@ -72,15 +72,19 @@ defmodule Kernel.TracersTest do
7272
{1, ""} = parse("1")
7373
""")
7474

75-
assert_receive {{:import, meta, Integer, only: [is_odd: 1, parse: 1]}, _}
75+
assert_received {{:import, meta, Integer, only: [is_odd: 1, parse: 1]}, _}
7676
assert meta[:line] == 1
7777
assert meta[:column] == 1
7878

79-
assert_receive {{:imported_macro, meta, Integer, :is_odd, 1}, _}
79+
assert_received {{:imported_macro, meta, Integer, :is_odd, 1}, _}
8080
assert meta[:line] == 2
8181
assert meta[:column] == 8
8282

83-
assert_receive {{:imported_function, meta, Integer, :parse, 1}, _}
83+
assert_received {{:imported_function, meta, Integer, :parse, 1}, _}
84+
assert meta[:line] == 3
85+
assert meta[:column] == 11
86+
87+
assert_received {{:remote_function, meta, Integer, :parse, 1}, _}
8488
assert meta[:line] == 3
8589
assert meta[:column] == 11
8690
end
@@ -92,15 +96,15 @@ defmodule Kernel.TracersTest do
9296
&parse/1
9397
""")
9498

95-
assert_receive {{:import, meta, Integer, only: [is_odd: 1, parse: 1]}, _}
99+
assert_received {{:import, meta, Integer, only: [is_odd: 1, parse: 1]}, _}
96100
assert meta[:line] == 1
97101
assert meta[:column] == 1
98102

99-
assert_receive {{:imported_macro, meta, Integer, :is_odd, 1}, _}
103+
assert_received {{:imported_macro, meta, Integer, :is_odd, 1}, _}
100104
assert meta[:line] == 2
101105
assert meta[:column] == 2
102106

103-
assert_receive {{:imported_function, meta, Integer, :parse, 1}, _}
107+
assert_received {{:imported_function, meta, Integer, :parse, 1}, _}
104108
assert meta[:line] == 3
105109
assert meta[:column] == 2
106110
end
@@ -110,7 +114,7 @@ defmodule Kernel.TracersTest do
110114
%URI{path: "/"}
111115
""")
112116

113-
assert_receive {{:struct_expansion, meta, URI, [:path]}, _}
117+
assert_received {{:struct_expansion, meta, URI, [:path]}, _}
114118
assert meta[:line] == 1
115119
assert meta[:column] == 1
116120
end
@@ -123,15 +127,15 @@ defmodule Kernel.TracersTest do
123127
"foo" = Atom.to_string(:foo)
124128
""")
125129

126-
assert_receive {{:remote_macro, meta, Integer, :is_odd, 1}, _}
130+
assert_received {{:remote_macro, meta, Integer, :is_odd, 1}, _}
127131
assert meta[:line] == 2
128132
assert meta[:column] == 16
129133

130-
assert_receive {{:remote_function, meta, Integer, :parse, 1}, _}
134+
assert_received {{:remote_function, meta, Integer, :parse, 1}, _}
131135
assert meta[:line] == 3
132136
assert meta[:column] == 19
133137

134-
assert_receive {{:remote_function, meta, Atom, :to_string, 1}, _}
138+
assert_received {{:remote_function, meta, Atom, :to_string, 1}, _}
135139
assert meta[:line] == 4
136140
assert meta[:column] == 14
137141
end
@@ -143,11 +147,11 @@ defmodule Kernel.TracersTest do
143147
&Integer.parse/1
144148
""")
145149

146-
assert_receive {{:remote_macro, meta, Integer, :is_odd, 1}, _}
150+
assert_received {{:remote_macro, meta, Integer, :is_odd, 1}, _}
147151
assert meta[:line] == 2
148152
assert meta[:column] == 10
149153

150-
assert_receive {{:remote_function, meta, Integer, :parse, 1}, _}
154+
assert_received {{:remote_function, meta, Integer, :parse, 1}, _}
151155
assert meta[:line] == 3
152156
assert meta[:column] == 10
153157
end
@@ -161,11 +165,11 @@ defmodule Kernel.TracersTest do
161165
end
162166
""")
163167

164-
assert_receive {{:local_macro, meta, :foo, 1}, _}
168+
assert_received {{:local_macro, meta, :foo, 1}, _}
165169
assert meta[:line] == 4
166170
assert meta[:column] == 21
167171

168-
assert_receive {{:local_function, meta, :bar, 1}, _}
172+
assert_received {{:local_function, meta, :bar, 1}, _}
169173
assert meta[:line] == 4
170174
assert meta[:column] == 32
171175
after
@@ -182,11 +186,11 @@ defmodule Kernel.TracersTest do
182186
end
183187
""")
184188

185-
assert_receive {{:local_macro, meta, :foo, 1}, _}
189+
assert_received {{:local_macro, meta, :foo, 1}, _}
186190
assert meta[:line] == 4
187191
assert meta[:column] == 21
188192

189-
assert_receive {{:local_function, meta, :bar, 1}, _}
193+
assert_received {{:local_function, meta, :bar, 1}, _}
190194
assert meta[:line] == 4
191195
assert meta[:column] == 29
192196
after
@@ -201,8 +205,8 @@ defmodule Kernel.TracersTest do
201205
end
202206
""")
203207

204-
assert_receive {:defmodule, %{module: Sample, function: nil}}
205-
assert_receive {{:on_module, <<_::binary>>, :none}, %{module: Sample, function: nil}}
208+
assert_received {:defmodule, %{module: Sample, function: nil}}
209+
assert_received {{:on_module, <<_::binary>>, :none}, %{module: Sample, function: nil}}
206210
after
207211
:code.purge(Sample)
208212
:code.delete(Sample)
@@ -213,8 +217,8 @@ defmodule Kernel.TracersTest do
213217
Module.create(Sample, :ok, __ENV__)
214218
""")
215219

216-
assert_receive {:defmodule, %{module: Sample, function: nil}}
217-
assert_receive {{:on_module, <<_::binary>>, :none}, %{module: Sample, function: nil}}
220+
assert_received {:defmodule, %{module: Sample, function: nil}}
221+
assert_received {{:on_module, <<_::binary>>, :none}, %{module: Sample, function: nil}}
218222
after
219223
:code.purge(Sample)
220224
:code.delete(Sample)
@@ -226,7 +230,7 @@ defmodule Kernel.TracersTest do
226230
"foo\#{arg}"
227231
""")
228232

229-
assert_receive {{:remote_macro, meta, Kernel, :to_string, 1}, _env}
233+
assert_received {{:remote_macro, meta, Kernel, :to_string, 1}, _env}
230234
assert meta[:from_interpolation]
231235
end
232236

@@ -236,7 +240,7 @@ defmodule Kernel.TracersTest do
236240
foo[:bar]
237241
""")
238242

239-
assert_receive {{:remote_function, meta, Access, :get, 2}, _env}
243+
assert_received {{:remote_function, meta, Access, :get, 2}, _env}
240244
assert meta[:from_brackets]
241245

242246
compile_string("""
@@ -248,17 +252,37 @@ defmodule Kernel.TracersTest do
248252
end
249253
""")
250254

251-
assert_receive {{:remote_function, meta, Access, :get, 2}, _env}
255+
assert_received {{:remote_function, meta, Access, :get, 2}, _env}
252256
assert meta[:from_brackets]
253257

254258
compile_string("""
255259
%{bar: 3}[:bar]
256260
""")
257261

258-
assert_receive {{:remote_function, meta, Access, :get, 2}, _env}
262+
assert_received {{:remote_function, meta, Access, :get, 2}, _env}
259263
assert meta[:from_brackets]
260264
end
261265

266+
test "does not trace bind quoted twice" do
267+
compile_string("""
268+
quote bind_quoted: [foo: List.flatten([])] do
269+
foo
270+
end
271+
""")
272+
273+
assert_received {{:remote_function, _, List, :flatten, 1}, _}
274+
refute_received {{:remote_function, _, List, :flatten, 1}, _}
275+
end
276+
277+
test "does not trace captures twice" do
278+
compile_string("""
279+
&List.flatten/1
280+
""")
281+
282+
assert_received {{:remote_function, _, List, :flatten, 1}, _}
283+
refute_received {{:remote_function, _, List, :flatten, 1}, _}
284+
end
285+
262286
"""
263287
# Make sure this module is compiled with column information
264288
defmodule MacroWithColumn do
@@ -278,7 +302,7 @@ defmodule Kernel.TracersTest do
278302
MacroWithColumn.some_macro(["hello", "world", "!"])
279303
""")
280304

281-
assert_receive {{:alias_reference, meta, Enum}, _env}
305+
assert_received {{:alias_reference, meta, Enum}, _env}
282306
refute meta[:column]
283307
end
284308
end

0 commit comments

Comments
 (0)