diff --git a/lib/elixir/lib/inspect.ex b/lib/elixir/lib/inspect.ex index a4d8e8143a..374f80af15 100644 --- a/lib/elixir/lib/inspect.ex +++ b/lib/elixir/lib/inspect.ex @@ -669,6 +669,11 @@ defimpl Inspect, for: Any do Inspect.Map.inspect_as_struct(struct, Macro.inspect_atom(:literal, module), info, opts) end + # A temporary clause to deal with native records until they are officially supported + def inspect(native_record, _opts) do + :io_lib.format("~p", [native_record]) |> IO.iodata_to_binary() + end + def inspect_as_struct(map, name, infos, opts) do open = color_doc("#" <> name <> "<", :map, opts) sep = color_doc(",", :map, opts) diff --git a/lib/elixir/test/elixir/inspect_test.exs b/lib/elixir/test/elixir/inspect_test.exs index 67a1544c9e..ace9a2391c 100644 --- a/lib/elixir/test/elixir/inspect_test.exs +++ b/lib/elixir/test/elixir/inspect_test.exs @@ -268,6 +268,36 @@ defmodule Inspect.TupleTest do end end +defmodule Inspect.NativeRecordTest do + use ExUnit.Case, async: true + + @moduletag skip: System.otp_release() < "29" + + @tag :tmp_dir + test "basic", %{tmp_dir: tmp_dir} do + File.write!("#{tmp_dir}/native_records_test.erl", """ + -module(native_records_test). + -export([test/0]). + -record #point{ x = 0.0, y = 0.0 }. + + test() -> + #point{}. + """) + + {"", 0} = System.cmd("erlc", ["native_records_test.erl"], cd: tmp_dir, stderr_to_stdout: true) + + {:module, _} = + :code.load_binary( + :native_records_test, + ~c"nofile", + File.read!("#{tmp_dir}/native_records_test.beam") + ) + + assert inspect(apply(:native_records_test, :test, [])) == + "#native_records_test:point{x = 0.0,y = 0.0}" + end +end + defmodule Inspect.ListTest do use ExUnit.Case, async: true