Packages
orb
0.0.42
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
0.0.51
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
retired
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
DSL for WebAssembly
Current section
Files
Jump to
Current section
Files
lib/orb/data.ex
defmodule Orb.Data do
@moduledoc false
defstruct [:offset, :value, :nul_terminated]
defimpl Orb.ToWat do
def to_wat(%Orb.Data{offset: offset, value: value, nul_terminated: nul_terminated}, indent) do
[
indent,
"(data (i32.const ",
to_string(offset),
") ",
?",
case value do
string when is_binary(string) ->
string |> String.replace(~S["], ~S[\"]) |> String.replace("\n", ~S"\n")
list when is_list(list) ->
for option <- list do
case option do
{:u8, bytes} ->
for byte <- List.wrap(bytes), do: encode_byte(byte)
{:u32, u32s} ->
for u32 <- List.wrap(u32s) do
<<a::8, b::8, c::8, d::8>> = <<u32::little-size(32)>>
[
encode_byte(a),
encode_byte(b),
encode_byte(c),
encode_byte(d)
]
end
end
end
end,
?",
if(nul_terminated, do: ~S| "\00"|, else: []),
")\n"
]
end
defp encode_byte(byte) do
[
?\\,
byte |> Integer.to_string(16) |> String.downcase(:ascii) |> String.pad_leading(2, "0")
]
end
end
end