Packages
orb
0.0.35
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/i64/dsl.ex
defmodule Orb.I64.DSL do
@moduledoc """
The operators that work consistently signed or unsigned.
Signed specific: `Orb.S64.DSL`
Unsigned specific: `Orb.U64.DSL`
"""
import Kernel, except: [+: 2, -: 2, *: 2, ===: 2, !==: 2, not: 1, or: 2]
def left + right do
Orb.Numeric.Add.optimized(Orb.I64, left, right)
end
def left - right do
Orb.Numeric.Subtract.optimized(Orb.I64, left, right)
end
def left * right do
Orb.Numeric.Multiply.optimized(Orb.I64, left, right)
end
def _left == _right do
raise "== is not supported in Orb. Use === instead."
end
def _left != _right do
raise "!= is not supported in Orb. Use !== instead."
end
def left === right do
alias Orb.Ops
case Ops.extract_common_type(left, right) do
:i64 ->
Orb.I64.eq(left, right)
:i32 ->
Orb.I32.eq(left, right)
end
end
def left !== right do
Orb.Numeric.NotEqual.optimized(Orb.I64, left, right)
end
def left ||| right do
Orb.I64.or(left, right)
end
def left &&& right do
Orb.I64.band(left, right)
end
def left <<< right do
Orb.I64.shl(left, right)
end
def not value do
Orb.I64.eqz(value)
end
def left or right do
Orb.I64.or(left, right)
end
# def left and right do
# Orb.I64.band(left, right)
# end
end