pub enum ValType {
Show 15 variants
Bool,
I8,
I16,
I32,
I64,
U8,
U16,
U32,
U64,
F32,
F64,
Char,
Str,
Dyn,
Ref(TypeId),
}Expand description
The declared type of a register, a global, a field, or a parameter.
Every register slot is 64 bits wide. Scalars (bool, the integers, the
floats, char) are stored unboxed in typed registers. Dyn
holds a dynamically typed value (the NaN-boxed value of the dynamic
languages). Str, Ref, and Dyn
holding a heap object share one reference representation, and nil
is the null reference, so a heap instruction works the same whichever of
those registers holds the object. Declared types are what make a frame’s
garbage-collection roots exact: a register is traced if and only if its
type is_reference.
§Examples
use bytecode_lang::{IntTy, TypeId, ValType};
assert_eq!(ValType::int(IntTy::U8), ValType::U8);
assert_eq!(ValType::I64.as_int(), Some(IntTy::I64));
assert!(ValType::Dyn.is_reference());
assert!(!ValType::F64.is_reference());
assert_eq!(ValType::Ref(TypeId(3)).to_string(), "ref t3");Variants§
Bool
false or true.
I8
Signed 8-bit integer.
I16
Signed 16-bit integer.
I32
Signed 32-bit integer.
I64
Signed 64-bit integer.
U8
Unsigned 8-bit integer.
U16
Unsigned 16-bit integer.
U32
Unsigned 32-bit integer.
U64
Unsigned 64-bit integer.
F32
IEEE 754 binary32.
F64
IEEE 754 binary64.
Char
A Unicode scalar value.
Str
An immutable byte string, or nil.
Dyn
A dynamically typed value of any Kind.
Ref(TypeId)
A reference to a heap object of the given type-table entry, or nil.
Implementations§
Source§impl ValType
impl ValType
Sourcepub const fn int(ty: IntTy) -> Self
pub const fn int(ty: IntTy) -> Self
The integer value type for ty.
§Examples
use bytecode_lang::{IntTy, ValType};
assert_eq!(ValType::int(IntTy::I32), ValType::I32);Sourcepub const fn float(ty: FloatTy) -> Self
pub const fn float(ty: FloatTy) -> Self
The float value type for ty.
§Examples
use bytecode_lang::{FloatTy, ValType};
assert_eq!(ValType::float(FloatTy::F32), ValType::F32);Sourcepub const fn as_int(self) -> Option<IntTy>
pub const fn as_int(self) -> Option<IntTy>
The integer type, if this is an integer value type.
§Examples
use bytecode_lang::{IntTy, ValType};
assert_eq!(ValType::U64.as_int(), Some(IntTy::U64));
assert_eq!(ValType::F64.as_int(), None);Sourcepub const fn is_reference(self) -> bool
pub const fn is_reference(self) -> bool
Whether a register of this type can hold a heap reference, and so is a garbage-collection root.
§Examples
use bytecode_lang::{TypeId, ValType};
assert!(ValType::Str.is_reference());
assert!(ValType::Ref(TypeId(0)).is_reference());
assert!(!ValType::Bool.is_reference());