Skip to content

Commit 3d982fd

Browse files
author
José Valim
committed
Deprecate var!(:atom), add Macro.var/1
1 parent 396b1e6 commit 3d982fd

File tree

4 files changed

+17
-1
lines changed

4 files changed

+17
-1
lines changed

lib/elixir/lib/kernel.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2733,6 +2733,8 @@ defmodule Kernel do
27332733
defmacro var!(var, context \\ nil)
27342734

27352735
defmacro var!(var, context) when is_atom(var) do
2736+
IO.write :stderr, "passing an atom to var! is deprecated\n" <>
2737+
Exception.format_stacktrace(Macro.Env.stacktrace(__CALLER__))
27362738
do_var!(var, [], context, __CALLER__)
27372739
end
27382740

lib/elixir/lib/macro.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,15 @@ defmodule Macro do
109109
other
110110
end
111111

112+
@doc """
113+
Genrates a AST node representing the variable given
114+
by the atoms `var` and `context`.
115+
"""
116+
@spec var(var, context) :: {var, [], context} when var: atom, context: atom
117+
def var(var, context \\ nil) when is_atom(var) and is_atom(context) do
118+
{var, [], context}
119+
end
120+
112121
@doc """
113122
Performs a depth-first, pre-order traversal of quoted expressions.
114123
"""

lib/elixir/test/elixir/kernel/quote_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ defmodule Kernel.QuoteTest.VarHygiene do
229229
end
230230

231231
defmacro cross_module_interference do
232-
quote do: var!(:a, Kernel.QuoteTest.VarHygieneTest) = 1
232+
quote do: var!(a, Kernel.QuoteTest.VarHygieneTest) = 1
233233
end
234234
end
235235

lib/elixir/test/elixir/macro_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,11 @@ defmodule MacroTest do
232232
end)
233233
end
234234

235+
test :var do
236+
assert Macro.var(:foo) == {:foo, [], nil}
237+
assert Macro.var(:foo, Other) == {:foo, [], Other}
238+
end
239+
235240
## to_string
236241

237242
test :var_to_string do

0 commit comments

Comments
 (0)