Packages
orb
0.0.4
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/i32/pointer.ex
defmodule Orb.I32.Pointer do
@moduledoc """
Custom `Orb.Type` for pointer to 32-bit integer in memory.
"""
@behaviour Orb.Type
@behaviour Access
@impl Orb.Type
def wasm_type(), do: :i32
@impl Orb.Type
def byte_count(), do: 4
@impl Access
def fetch(%Orb.VariableReference{} = var_ref, at!: offset) do
address =
offset
|> then(&Orb.Numeric.Multiply.optimized(Orb.I32, &1, 4))
|> then(&Orb.Numeric.Add.optimized(Orb.I32, &1, var_ref))
ast = {:i32, :load, address}
{:ok, ast}
end
end