Closed mat-hek closed 1 year ago
Hi, trying to compile this:
defmodule Payload do def size(payload) when is_binary(payload) do payload |> byte_size() end def split_at(payload, at_pos) do <<part1::binary-size(at_pos), part2::binary>> = payload {part1, part2} end end
I get the following error:
failed_to_compile: defmodule TriaGlobalContext do def payload_size(payload_nil_419) when :erlang.is_binary(payload_nil_419) do :erlang.byte_size(payload_nil_419) end def payload_split_at( payload_nil_515, at_pos_nil_547 ) do <<HERE_HITS!(part1_nil_579 :: binary_nil - payload_size(at_pos_nil_547)), part2_nil_611::binary_nil>> = payload_nil_515 {part1_nil_579, part2_nil_611} end end 19:31:57.474 [error] GenServer TriaGlobalContext terminating ** (CompileError) Elixir.TriaGlobalContext.ex:1411: unknown bitstring specifier: payload_size(at_pos) (elixir 1.13.4) src/elixir_bitstring.erl:160: :elixir_bitstring.expand_specs/7 (elixir 1.13.4) src/elixir_bitstring.erl:38: :elixir_bitstring.expand/8 (elixir 1.13.4) src/elixir_bitstring.erl:14: :elixir_bitstring.expand/5 (elixir 1.13.4) src/elixir_clauses.erl:23: :elixir_clauses.match/5 (elixir 1.13.4) src/elixir_expand.erl:11: :elixir_expand.expand/3 (elixir 1.13.4) src/elixir_expand.erl:550: :elixir_expand.expand_block/5 (elixir 1.13.4) src/elixir_expand.erl:40: :elixir_expand.expand/3 Last message (from #PID<0.94.0>): :generate State: %{definitions: %{{Payload, :size, 1} => {:def, [{[{:payload, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 2], 163}], [{{:., [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 2], [:erlang, :is_binary]}, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 2], [{:payload, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 2], 163}]}], [do: {{:., [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 3], [:erlang, :byte_size]}, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 3], [{:payload, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 3], 163}]}]}]}, {Payload, :split_at, 2} => {:def, [{[{:payload, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 6], 227}, {:at_pos, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 6], 259}], [], [do: {:__block__, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex"], [{:=, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 7], [{:<<>>, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 7], [{:"::", [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 7], [{:part1, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 7], 291}, {:-, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex"], [{:binary, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex"], nil}, {{:., [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex"], [Payload, :size]}, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex"], [{:at_pos, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 7], 259}]}]}]}, {:"::", [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 7], [{:part2, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 7], 323}, {:binary, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex"], nil}]}]}, {:payload, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 7], 227}]}, {{:part1, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 8], 291}, {:part2, [file: "/Users/matheksm/Desktop/sm/membrane_test/try_tria/lib/try_tria.ex", line: 8], 323}}]}]}]}}, name: TriaGlobalContext} Client #PID<0.94.0> is alive (stdlib 4.0.1) gen.erl:237: :gen.do_call/4 (elixir 1.13.4) lib/gen_server.ex:1027: GenServer.call/3 (tria 0.0.1) lib/tria/compiler.ex:90: Tria.Compiler.compile/2 (tria 0.0.1) lib/mix/tasks/compile.tria.ex:42: Mix.Tasks.Compile.Tria.compile/2 (mix 1.13.4) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3 (mix 1.13.4) lib/mix/tasks/compile.all.ex:92: Mix.Tasks.Compile.All.run_compiler/2 (mix 1.13.4) lib/mix/tasks/compile.all.ex:72: Mix.Tasks.Compile.All.compile/4 (mix 1.13.4) lib/mix/tasks/compile.all.ex:59: Mix.Tasks.Compile.All.with_logger_app/2 ** (exit) exited in: GenServer.call(#PID<0.180.0>, :generate, :infinity) ** (EXIT) an exception was raised: ** (CompileError) Elixir.TriaGlobalContext.ex:1411: unknown bitstring specifier: payload_size(at_pos) (elixir 1.13.4) src/elixir_bitstring.erl:160: :elixir_bitstring.expand_specs/7 (elixir 1.13.4) src/elixir_bitstring.erl:38: :elixir_bitstring.expand/8 (elixir 1.13.4) src/elixir_bitstring.erl:14: :elixir_bitstring.expand/5 (elixir 1.13.4) src/elixir_clauses.erl:23: :elixir_clauses.match/5 (elixir 1.13.4) src/elixir_expand.erl:11: :elixir_expand.expand/3 (elixir 1.13.4) src/elixir_expand.erl:550: :elixir_expand.expand_block/5 (elixir 1.13.4) src/elixir_expand.erl:40: :elixir_expand.expand/3 (elixir 1.13.4) lib/gen_server.ex:1030: GenServer.call/3 (tria 0.0.1) lib/tria/compiler.ex:90: Tria.Compiler.compile/2 (tria 0.0.1) lib/mix/tasks/compile.tria.ex:42: Mix.Tasks.Compile.Tria.compile/2 (mix 1.13.4) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3 (mix 1.13.4) lib/mix/tasks/compile.all.ex:92: Mix.Tasks.Compile.All.run_compiler/2 (mix 1.13.4) lib/mix/tasks/compile.all.ex:72: Mix.Tasks.Compile.All.compile/4 (mix 1.13.4) lib/mix/tasks/compile.all.ex:59: Mix.Tasks.Compile.All.with_logger_app/2 (mix 1.13.4) lib/mix/tasks/compile.all.ex:36: Mix.Tasks.Compile.All.run/1
Oh, that's a really good catch. Binary specifiers are represented by the same structure as regular calls.
Hi, trying to compile this:
I get the following error: