diff --git a/lib/elixir/src/elixir_expand.erl b/lib/elixir/src/elixir_expand.erl index c72d2124362..3b6d67a4918 100644 --- a/lib/elixir/src/elixir_expand.erl +++ b/lib/elixir/src/elixir_expand.erl @@ -894,6 +894,9 @@ attach_context_module(Receiver, Meta, #{context_modules := ContextModules}) -> false -> Meta end. +% Signed numbers can be rewritten no matter the context +rewrite(_, erlang, _, '+', _, [Arg], _S) when is_number(Arg) -> {ok, Arg}; +rewrite(_, erlang, _, '-', _, [Arg], _S) when is_number(Arg) -> {ok, -Arg}; rewrite(match, Receiver, DotMeta, Right, Meta, EArgs, _S) -> elixir_rewrite:match_rewrite(Receiver, DotMeta, Right, Meta, EArgs); rewrite(guard, Receiver, DotMeta, Right, Meta, EArgs, S) -> diff --git a/lib/elixir/src/elixir_rewrite.erl b/lib/elixir/src/elixir_rewrite.erl index 8f67e833ea7..ad2cf5905b3 100644 --- a/lib/elixir/src/elixir_rewrite.erl +++ b/lib/elixir/src/elixir_rewrite.erl @@ -302,8 +302,6 @@ increment(Meta, Other) -> %% The allowed operations are very limited. %% The Kernel operators are already inlined by now, we only need to %% care about Erlang ones. -match_rewrite(erlang, _, '+', _, [Arg]) when is_number(Arg) -> {ok, Arg}; -match_rewrite(erlang, _, '-', _, [Arg]) when is_number(Arg) -> {ok, -Arg}; match_rewrite(erlang, _, '++', Meta, [Left, Right]) -> try {ok, static_append(Left, Right, Meta)} catch impossible -> {error, {invalid_match_append, Left}} diff --git a/lib/elixir/test/elixir/kernel/expansion_test.exs b/lib/elixir/test/elixir/kernel/expansion_test.exs index 8e16612f2df..317b2b7b15e 100644 --- a/lib/elixir/test/elixir/kernel/expansion_test.exs +++ b/lib/elixir/test/elixir/kernel/expansion_test.exs @@ -725,10 +725,10 @@ defmodule Kernel.ExpansionTest do expand(quote(do: [1] ++ 2 ++ [3] = [1, 2, 3])) end) - assert {:=, _, [-1, {{:., _, [:erlang, :-]}, _, [1]}]} = + assert {:=, _, [-1, -1]} = expand(quote(do: -1 = -1)) - assert {:=, _, [1, {{:., _, [:erlang, :+]}, _, [1]}]} = + assert {:=, _, [1, 1]} = expand(quote(do: +1 = +1)) assert {:=, _, [[{:|, _, [1, [{:|, _, [2, 3]}]]}], [1, 2, 3]]} =