Packages
orb
0.2.0
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/leb.ex
defmodule Orb.Leb do
@moduledoc false
def leb128_u(0), do: [0]
def leb128_u(n), do: leb128_u(n, [])
defp leb128_u(0, bytes), do: bytes |> Enum.reverse()
defp leb128_u(value, bytes) do
import Bitwise
byte = value &&& 0x7F
value = value >>> 7
byte =
case value do
0 ->
byte
_ ->
byte ||| 0x80
end
leb128_u(value, [byte | bytes])
end
def leb128_s(0), do: [0]
def leb128_s(n), do: leb128_s(n, [])
defp leb128_s(value, bytes) do
import Bitwise
byte = value &&& 0x7F
value = value >>> 7
cond do
(value === 0 and (byte &&& 0x40) === 0) or (value === -1 and (byte &&& 0x40) !== 0) ->
[byte | bytes] |> Enum.reverse()
true ->
byte = byte ||| 0x80
leb128_s(value, [byte | bytes])
end
end
end