diff --git a/lib/elixir/src/elixir_bitstring.erl b/lib/elixir/src/elixir_bitstring.erl index f35fe56eba..00d72fda74 100644 --- a/lib/elixir/src/elixir_bitstring.erl +++ b/lib/elixir/src/elixir_bitstring.erl @@ -56,6 +56,11 @@ expr_type(_) -> default. %% Expands the expression of a bitstring, that is, the LHS of :: or %% an argument of the bitstring (such as "foo" in "<>"). +expand_expr(Meta, {{'.', M1, ['Elixir.Kernel', to_string]}, M2, [Arg]}, Fun, E) -> + case expand_expr(Meta, Arg, Fun, E) of + {Bin, _} = Pair when is_binary(Bin) -> Pair; + {EArg, EE} -> {{{'.', M1, ['Elixir.Kernel', to_string]}, M2, [EArg]}, EE} + end; expand_expr(Meta, Component, Fun, E) -> case Fun(Component, E) of {EComponent, _} when is_list(EComponent); is_atom(EComponent) -> diff --git a/lib/elixir/test/elixir/kernel/expansion_test.exs b/lib/elixir/test/elixir/kernel/expansion_test.exs index f05a0edf7e..156e3d2652 100644 --- a/lib/elixir/test/elixir/kernel/expansion_test.exs +++ b/lib/elixir/test/elixir/kernel/expansion_test.exs @@ -2,6 +2,7 @@ Code.require_file "../test_helper.exs", __DIR__ defmodule Kernel.ExpansionTarget do defmacro seventeen, do: 17 + defmacro bar, do: "bar" end defmodule Kernel.ExpansionTest do @@ -980,6 +981,12 @@ defmodule Kernel.ExpansionTest do end describe "bitstrings" do + test "inlines binaries inside interpolation" do + import Kernel.ExpansionTarget + assert expand(quote do: "foo#{bar()}" = "foobar") == + quote do: (<<"foo"::binary(), "bar"::binary()>> = "foobar") + end + test "expands size * unit" do import Kernel, except: [-: 2] @@ -1045,13 +1052,13 @@ defmodule Kernel.ExpansionTest do test "expands macro specifiers" do import Kernel, except: [-: 2] + import Kernel.ExpansionTarget - assert expand(quote do: (import Kernel.ExpansionTarget; <>)) == - quote do: (:"Elixir.Kernel.ExpansionTarget"; <>) + assert expand(quote do: <>) == + quote do: (<>) - assert expand(quote do: (import Kernel.ExpansionTarget; <> = 1)) == - quote do: (:"Elixir.Kernel.ExpansionTarget"; - <> = 1) + assert expand(quote do: (<> = 1)) == + quote do: (<> = 1) end test "expands macro in args" do