#[repr(u8)]pub enum Hook {
Show 31 variants
Add = 0,
Sub = 1,
Mul = 2,
Div = 3,
Rem = 4,
FloorDiv = 5,
FloorMod = 6,
BitAnd = 7,
BitOr = 8,
BitXor = 9,
Shl = 10,
Shr = 11,
Neg = 12,
BitNot = 13,
Eq = 14,
Lt = 15,
Le = 16,
Truthy = 17,
Concat = 18,
GetIndex = 19,
SetIndex = 20,
GetProp = 21,
SetProp = 22,
HasProp = 23,
Iter = 24,
Len = 25,
Call = 26,
Spawn = 27,
Pow = 28,
Abs = 29,
CallShape = 30,
}Expand description
A dynamic-operation hook: the function a dynamic instruction calls when
its built-in fast path does not apply (for example dadd on two
strings, or get_prop on an object with no such field).
Hooks are how a dynamic language supplies its own semantics (PHP’s
loose ==, Python’s list equality) without a separate instruction
set per language. A missing hook makes the operation raise
TypeError (E0100) or the error the instruction documents.
§Examples
use bytecode_lang::Hook;
assert_eq!(Hook::Add.code(), 0);
assert_eq!(Hook::GetProp.to_string(), "get_prop");Variants§
Add = 0
dadd fallback: (dyn, dyn) -> dyn.
Sub = 1
dsub fallback: (dyn, dyn) -> dyn.
Mul = 2
dmul fallback: (dyn, dyn) -> dyn.
Div = 3
ddiv fallback: (dyn, dyn) -> dyn.
Rem = 4
drem fallback: (dyn, dyn) -> dyn.
FloorDiv = 5
dfloor_div fallback: (dyn, dyn) -> dyn.
FloorMod = 6
dfloor_mod fallback: (dyn, dyn) -> dyn.
BitAnd = 7
dand fallback: (dyn, dyn) -> dyn.
BitOr = 8
dor fallback: (dyn, dyn) -> dyn.
BitXor = 9
dxor fallback: (dyn, dyn) -> dyn.
Shl = 10
dshl fallback: (dyn, dyn) -> dyn.
Shr = 11
dshr fallback: (dyn, dyn) -> dyn.
Neg = 12
dneg fallback: (dyn) -> dyn.
BitNot = 13
dnot fallback: (dyn) -> dyn.
Eq = 14
deq/dne fallback: (dyn, dyn) -> dyn returning a boolean.
Lt = 15
dlt/dgt fallback: (dyn, dyn) -> dyn returning a boolean.
Le = 16
dle/dge fallback: (dyn, dyn) -> dyn returning a boolean.
Truthy = 17
dtruthy for kinds other than nil, bool, int, float: (dyn) -> dyn.
Concat = 18
dconcat fallback: (dyn, dyn) -> dyn.
GetIndex = 19
dget_index fallback: (dyn, dyn) -> dyn.
SetIndex = 20
dset_index fallback: (dyn, dyn, dyn) -> ().
GetProp = 21
get_prop fallback: (dyn, dyn) -> dyn (object, name string).
SetProp = 22
set_prop fallback: (dyn, dyn, dyn) -> ().
HasProp = 23
has_prop fallback: (dyn, dyn) -> dyn returning a boolean.
Iter = 24
diter_new fallback: (dyn) -> dyn returning something iterable.
Len = 25
dlen fallback: (dyn) -> dyn returning an integer.
Call = 26
dcall on a non-callable: (dyn, dyn) -> dyn (callee, argument array).
Spawn = 27
spawn: hands a new coroutine to the host scheduler
(host-lang): (dyn) -> dyn (coroutine, task handle).
Pow = 28
dpow fallback: (dyn, dyn) -> dyn.
Abs = 29
dabs fallback: (dyn) -> dyn.
CallShape = 30
dcall_shape on a non-callable: (dyn, dyn, dyn) -> dyn (callee,
positional arguments as an array, named arguments as a map from
name to value). Without it, a call with no named arguments falls
back to the call hook.