Enum OnionObject

Source
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

Source

pub fn upgrade(&self, collected: &mut Vec<GCArc<OnionObjectCell>>)

Source

pub fn to_cell(self) -> OnionObjectCell

Source

pub fn stabilize(&self) -> OnionStaticObject

Source

pub fn consume_and_stabilize(self) -> OnionStaticObject

Source

pub fn len(&self) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn contains(&self, other: &OnionObject) -> Result<bool, RuntimeError>

Source

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.

Source

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.

Source

pub fn with_data_mut<T, F>(&mut self, f: F) -> Result<T, RuntimeError>
where F: FnOnce(&mut OnionObject) -> 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.

Source

pub fn assign(&self, other: &OnionObject) -> Result<(), RuntimeError>

Assign a new value to a mutable object.

Source

pub fn with_data_ref_mut<T, F>(&self, f: F) -> Result<T, RuntimeError>
where F: FnOnce(&mut OnionObject) -> Result<T, RuntimeError>,

Source

pub fn reconstruct_container(&self) -> Result<OnionObject, RuntimeError>

重建容器对象,主要用于 mutable_obj1 = obj2 这种赋值

Source

pub fn to_integer(&self) -> Result<i64, RuntimeError>

Source

pub fn to_float(&self) -> Result<f64, RuntimeError>

Source

pub fn to_string( &self, ptrs: &Vec<*const OnionObject>, ) -> Result<String, RuntimeError>

Source

pub fn repr( &self, ptrs: &Vec<*const OnionObject>, ) -> Result<String, RuntimeError>

Source

pub fn to_bytes(&self) -> Result<Vec<u8>, RuntimeError>

Source

pub fn to_boolean(&self) -> Result<bool, RuntimeError>

Source

pub fn mutablize(self, gc: &mut GC<OnionObjectCell>) -> OnionStaticObject

Source§

impl OnionObject

Source

pub fn equals(&self, other: &Self) -> Result<bool, RuntimeError>

Source

pub fn is_same(&self, other: &Self) -> Result<bool, RuntimeError>

Source

pub fn binary_add( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_sub( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_mul( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_div( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_mod( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_pow( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_and( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_or(&self, other: &Self) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_xor( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_shl( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_shr( &self, other: &Self, ) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn binary_eq(&self, other: &Self) -> Result<bool, RuntimeError>

Source

pub fn binary_lt(&self, other: &Self) -> Result<bool, RuntimeError>

Source

pub fn binary_gt(&self, other: &Self) -> Result<bool, RuntimeError>

Source

pub fn unary_neg(&self) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn unary_plus(&self) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn unary_not(&self) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn with_attribute<F, R>( &self, key: &OnionObject, f: &F, ) -> Result<R, RuntimeError>
where F: Fn(&OnionObject) -> Result<R, RuntimeError>,

Source

pub fn at(&self, index: i64) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn key_of(&self) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn value_of(&self) -> Result<OnionStaticObject, RuntimeError>

Source

pub fn type_of(&self) -> Result<String, RuntimeError>

Source

pub fn copy(&self) -> Result<OnionStaticObject, RuntimeError>

Trait Implementations§

Source§

impl Clone for OnionObject

Source§

fn clone(&self) -> OnionObject

Returns a duplicate of the value. Read more
1.0.0 · Source§

const fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for OnionObject

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<OnionObject> for OnionObjectCell

Source§

fn from(obj: OnionObject) -> Self

Converts to this type from the input type.
Source§

impl GCTraceable<OnionObjectCell> for OnionObject

Source§

fn collect(&self, queue: &mut VecDeque<GCArcWeak<OnionObjectCell>>)

collects all reachable objects and adds them to the provided queue.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.