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>
impl<'a> CallContext<'a>
sourcepub fn new(vm: &'a mut KotoVm, frame_base: u8, arg_count: u8) -> Self
pub fn new(vm: &'a mut KotoVm, frame_base: u8, arg_count: u8) -> Self
Returns a new context for calling external functions
sourcepub fn instance_and_args(
&self,
instance_check: impl Fn(&KValue) -> bool,
expected_args_message: &str
) -> Result<(&KValue, &[KValue])>
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> 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
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.