Packages
orb
0.0.32
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/stack.ex
defmodule Orb.Stack do
@moduledoc false
defmodule Drop do
defstruct instruction: nil, count: 0
require alias Orb.Ops
def new(instruction) do
count = Ops.typeof(instruction) |> Ops.type_stack_count()
# if count === 0 do
# raise CompileError,
# line: line,
# file: env.file,
# description: "Function params must use keyword list."
# end
%__MODULE__{
instruction: instruction,
count: count
}
end
defimpl Orb.ToWat do
def to_wat(
%Orb.Stack.Drop{instruction: instruction, count: count},
indent
) do
[
Orb.ToWat.to_wat(instruction, indent),
for _ <- 1..count do
["\n", indent, "drop"]
end
]
end
end
end
defmodule Pop do
defstruct type: nil, count: 0
require alias Orb.Ops
def new(type) do
count = type |> Ops.type_stack_count()
%__MODULE__{
type: type,
count: count
}
end
defimpl Orb.ToWat do
def to_wat(%Orb.Stack.Pop{}, _), do: []
end
end
def drop(instruction), do: Drop.new(instruction)
def pop(type), do: Pop.new(type)
end