Skip to content

Commit d120aff

Browse files
committed
Emit defmodule tracing event
1 parent 3c55db7 commit d120aff

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

lib/elixir/lib/code.ex

+4
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ defmodule Code do
158158
of keys to traverse in the application environment and `return` is either
159159
`{:ok, value}` or `:error`.
160160
161+
* `:defmodule` - (since v1.16.2) traced as soon as the definition of a module
162+
starts. This is invoked early on in the module life-cycle, `Module.open?/1`
163+
still returns `false` for such traces
164+
161165
* `{:on_module, bytecode, _ignore}` - (since v1.13.0) traced whenever a module
162166
is defined. This is equivalent to the `@after_compile` callback and invoked
163167
after any `@after_compile` in the given module. The third element is currently

lib/elixir/src/elixir_module.erl

+1
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ invalid_module_name(Module) ->
118118
compile(Line, Module, ModuleAsCharlist, Block, Vars, Prune, E) ->
119119
File = ?key(E, file),
120120
check_module_availability(Module, Line, E),
121+
elixir_env:trace(defmodule, E),
121122

122123
CompilerModules = compiler_modules(),
123124
{Tables, Ref} = build(Module, Line, File, E),

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

+13
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,19 @@ defmodule Kernel.TracersTest do
201201
end
202202
""")
203203

204+
assert_receive {:defmodule, %{module: Sample, function: nil}}
205+
assert_receive {{:on_module, <<_::binary>>, :none}, %{module: Sample, function: nil}}
206+
after
207+
:code.purge(Sample)
208+
:code.delete(Sample)
209+
end
210+
211+
test "traces dynamic modules" do
212+
compile_string("""
213+
Module.create(Sample, :ok, __ENV__)
214+
""")
215+
216+
assert_receive {:defmodule, %{module: Sample, function: nil}}
204217
assert_receive {{:on_module, <<_::binary>>, :none}, %{module: Sample, function: nil}}
205218
after
206219
:code.purge(Sample)

0 commit comments

Comments
 (0)