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>
pub fn with_data<T, F>(&self, f: F) -> Result<T, RuntimeError>
pub fn with_data_mut<T, F>(&mut self, f: F) -> Result<T, RuntimeError>
Sourcepub fn assign(&self, other: &OnionObject) -> Result<(), RuntimeError>
pub fn assign(&self, other: &OnionObject) -> Result<(), RuntimeError>
Assign a new value to a mutable object.
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>
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
Returns a duplicate of the value. Read more
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for OnionObject
impl Debug for OnionObject
Source§impl From<OnionObject> for OnionObjectCell
impl From<OnionObject> for OnionObjectCell
Source§fn from(obj: OnionObject) -> Self
fn from(obj: OnionObject) -> Self
Converts to this type from the input type.
Source§impl GCTraceable<OnionObjectCell> for OnionObject
impl GCTraceable<OnionObjectCell> for OnionObject
Auto Trait Implementations§
impl Freeze for OnionObject
impl !RefUnwindSafe for OnionObject
impl Send for OnionObject
impl Sync for OnionObject
impl Unpin for OnionObject
impl !UnwindSafe for OnionObject
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more