pub enum OnionObject {
Show 16 variants
Integer(i64),
Float(f64),
String(Arc<String>),
Bytes(Arc<Vec<u8>>),
Boolean(bool),
Range(i64, i64),
Null,
Undefined(Option<Arc<String>>),
InstructionPackage(Arc<VMInstructionPackage>),
Tuple(Arc<OnionTuple>),
Pair(Arc<OnionPair>),
Named(Arc<OnionNamed>),
LazySet(Arc<OnionLazySet>),
Lambda(Arc<OnionLambdaDefinition>),
Custom(Arc<dyn OnionObjectExt>),
Mut(GCArcWeak<OnionObjectCell>),
}Expand description
OnionObject is the main type for all objects in the Onion VM.
The VM’s types are all immutable(Mut is a immutable pointer to a VM object)
If we need to mutate an object, it is IMPOSSIBLE to mutate the object itself, we can only let the Mut object point to a reconstructed object.
reconstruct_container is used to reconstruct the container object, which is used to regenerate all Arc references to the object.
Variants§
Integer(i64)
Float(f64)
String(Arc<String>)
Bytes(Arc<Vec<u8>>)
Boolean(bool)
Range(i64, i64)
Null
Undefined(Option<Arc<String>>)
InstructionPackage(Arc<VMInstructionPackage>)
Tuple(Arc<OnionTuple>)
Pair(Arc<OnionPair>)
Named(Arc<OnionNamed>)
LazySet(Arc<OnionLazySet>)
Lambda(Arc<OnionLambdaDefinition>)
Custom(Arc<dyn OnionObjectExt>)
Mut(GCArcWeak<OnionObjectCell>)
Implementations§
Source§impl OnionObject
impl OnionObject
pub fn upgrade(&self, collected: &mut Vec<GCArc<OnionObjectCell>>)
pub fn to_cell(self) -> OnionObjectCell
pub fn stabilize(&self) -> OnionStaticObject
pub fn consume_and_stabilize(self) -> OnionStaticObject
pub fn len(&self) -> Result<OnionStaticObject, RuntimeError>
pub fn contains(&self, other: &OnionObject) -> Result<bool, RuntimeError>
Sourcepub fn clone_value(&self) -> Result<OnionStaticObject, RuntimeError>
pub fn clone_value(&self) -> Result<OnionStaticObject, RuntimeError>
Warning: This method can cause stack overflow if there are nested Mut references.
TODO: Add recursion depth limit after VM core is complete.
Sourcepub fn with_data<T, F>(&self, f: F) -> Result<T, RuntimeError>
pub fn with_data<T, F>(&self, f: F) -> Result<T, RuntimeError>
Warning: This method can cause stack overflow if there are nested Mut references.
TODO: Add recursion depth limit after VM core is complete.
Sourcepub fn with_data_mut<T, F>(&mut self, f: F) -> Result<T, RuntimeError>
pub fn with_data_mut<T, F>(&mut self, f: F) -> Result<T, RuntimeError>
Warning: This method can cause stack overflow if there are nested Mut references.
TODO: Add recursion depth limit after VM core is complete.
Sourcepub fn assign(&self, other: &OnionObject) -> Result<(), RuntimeError>
pub fn assign(&self, other: &OnionObject) -> Result<(), RuntimeError>
Assign a new value to a mutable object.
pub fn with_data_ref_mut<T, F>(&self, f: F) -> Result<T, RuntimeError>
Sourcepub fn reconstruct_container(&self) -> Result<OnionObject, RuntimeError>
pub fn reconstruct_container(&self) -> Result<OnionObject, RuntimeError>
重建容器对象,主要用于 mutable_obj1 = obj2 这种赋值
pub fn to_integer(&self) -> Result<i64, RuntimeError>
pub fn to_float(&self) -> Result<f64, RuntimeError>
pub fn to_string( &self, ptrs: &Vec<*const OnionObject>, ) -> Result<String, RuntimeError>
pub fn repr( &self, ptrs: &Vec<*const OnionObject>, ) -> Result<String, RuntimeError>
pub fn to_bytes(&self) -> Result<Vec<u8>, RuntimeError>
pub fn to_boolean(&self) -> Result<bool, RuntimeError>
pub fn mutablize(self, gc: &mut GC<OnionObjectCell>) -> OnionStaticObject
Source§impl OnionObject
impl OnionObject
pub fn equals(&self, other: &Self) -> Result<bool, RuntimeError>
pub fn is_same(&self, other: &Self) -> Result<bool, RuntimeError>
pub fn binary_add( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_sub( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_mul( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_div( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_mod( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_pow( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_and( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_or(&self, other: &Self) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_xor( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_shl( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_shr( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>
pub fn binary_eq(&self, other: &Self) -> Result<bool, RuntimeError>
pub fn binary_lt(&self, other: &Self) -> Result<bool, RuntimeError>
pub fn binary_gt(&self, other: &Self) -> Result<bool, RuntimeError>
pub fn unary_neg(&self) -> Result<OnionStaticObject, RuntimeError>
pub fn unary_plus(&self) -> Result<OnionStaticObject, RuntimeError>
pub fn unary_not(&self) -> Result<OnionStaticObject, RuntimeError>
pub fn with_attribute<F, R>( &self, key: &OnionObject, f: &F, ) -> Result<R, RuntimeError>
pub fn at(&self, index: i64) -> Result<OnionStaticObject, RuntimeError>
pub fn key_of(&self) -> Result<OnionStaticObject, RuntimeError>
pub fn value_of(&self) -> Result<OnionStaticObject, RuntimeError>
pub fn type_of(&self) -> Result<String, RuntimeError>
pub fn copy(&self) -> Result<OnionStaticObject, RuntimeError>
Trait Implementations§
Source§impl Clone for OnionObject
impl Clone for OnionObject
Source§fn clone(&self) -> OnionObject
fn clone(&self) -> OnionObject
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
source. Read more