Struct koto_runtime::CallContext

source ·
pub struct CallContext<'a> {
    pub vm: &'a mut KotoVm,
    /* private fields */
}
Expand description

The context provided when a call to a KNativeFunction is made

See also: crate::MethodContext.

Fields§

§vm: &'a mut KotoVm

The VM making the call

The VM can be used for operations like KotoVm::call_function, although the CallContext::args and CallContext::instance functions return references, so the values need to be cloned before mutable operations can be called.

If a VM needs to be retained after the call, then see KotoVm::spawn_shared_vm.

Implementations§

source§

impl<'a> CallContext<'a>

source

pub fn new(vm: &'a mut KotoVm, frame_base: u8, arg_count: u8) -> Self

Returns a new context for calling external functions

source

pub fn instance(&self) -> &KValue

Returns the self instance with which the function was called

source

pub fn args(&self) -> &[KValue]

Returns the function call’s arguments

source

pub fn instance_and_args( &self, instance_check: impl Fn(&KValue) -> bool, expected_args_message: &str ) -> Result<(&KValue, &[KValue])>

Returns the instance and args with which the function was called

instance_check should check the provided value and return true if it is acceptable as an instance value for the function. If the function was called without an instance (e.g. it’s being called as a standalone function), then the first argument will be checked and returned as the instance. If no instance is available that passes the check, then an ‘expected arguments’ error will be returned with the expected_args_message.

This is used in the core library to allow operations like list.size() to be used in method contexts like [1, 2, 3].to_tuple(), or as standalone functions like to_tuple [1, 2, 3].

Auto Trait Implementations§

§

impl<'a> Freeze for CallContext<'a>

§

impl<'a> !RefUnwindSafe for CallContext<'a>

§

impl<'a> Send for CallContext<'a>

§

impl<'a> Sync for CallContext<'a>

§

impl<'a> Unpin for CallContext<'a>

§

impl<'a> !UnwindSafe for CallContext<'a>

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> Downcast for T
where T: Any,

source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.