Struct gluon_vm::thread::RootedThread [−][src]
pub struct RootedThread { /* fields omitted */ }
Expand description
An instance of Thread
which is rooted. See the Thread
type for documentation on interacting
with the type.
Implementations
Creates a new virtual machine with an empty global environment
Converts a RootedThread
into a raw pointer allowing to be passed through a C api.
The reference count for the thread is not modified
Converts a raw pointer into a RootedThread
.
The reference count for the thread is not modified so it is up to the caller to ensure that
the count is correct.
Methods from Deref<Target = Thread>
Spawns a new gluon thread with its own stack and heap but while still sharing the same global environment
Roots self
, extending the lifetime of this thread until at least the returned
RootedThread
is droppped
Retrieves the global called name
.
Examples
Bind the (+)
function in gluon’s prelude standard library
to an add
function in rust
let vm = new_vm_async().await;
vm.run_expr_async::<OpaqueValue<&Thread, Hole>>("example", r#" import! std.int "#)
.await
.unwrap_or_else(|err| panic!("{}", err));
let mut add: FunctionRef<fn(i32, i32) -> i32> =
vm.get_global("std.int.num.(+)").unwrap();
let result = add.call_async(1, 2).await;
assert_eq!(result, Ok(3));
Errors
if the global does not exist or it does not have the correct type.
Retrieves type information about the type name
. Types inside records can be accessed
using dot notation (std.prelude.Option)
Returns the gluon type that was bound to T
Registers the type T
as being a gluon type called name
with generic arguments args
pub fn register_type_as(
&self,
name: Symbol,
alias: Alias<Symbol, ArcType>,
id: TypeId
) -> Result<ArcType>
Locks and retrieves the global environment of the vm
Retrieves the macros defined for this vm
Pushes a value to the top of the stack
Trait Implementations
fn deserialize_state<D>(
seed: &mut DeSeed<'gc>,
deserializer: D
) -> StdResult<Self, <D as Deserializer<'de>>::Error> where
D: Deserializer<'de>,
fn deserialize_state<D>(
seed: &mut DeSeed<'gc>,
deserializer: D
) -> StdResult<Self, <D as Deserializer<'de>>::Error> where
D: Deserializer<'de>,
Deserializes Self
using seed
and the deserializer
Pushes self
to stack
. If the call is successful a single element should have been added
to the stack and Ok(())
should be returned. If the call is unsuccessful Status:Error
should be returned and the stack should be left intact Read more
fn serialize_state<__S>(
&self,
__serializer: __S,
__seed: &SeSeed
) -> Result<__S::Ok, __S::Error> where
__S: Serializer,
fn serialize_state<__S>(
&self,
__serializer: __S,
__seed: &SeSeed
) -> Result<__S::Ok, __S::Error> where
__S: Serializer,
Serializes self
Roots a value
How many extra arguments a function returning this type requires. Used for abstract types which when used in return position should act like they still need more arguments before they are called Read more
Auto Trait Implementations
impl !RefUnwindSafe for RootedThread
impl Send for RootedThread
impl Sync for RootedThread
impl Unpin for RootedThread
impl !UnwindSafe for RootedThread
Blanket Implementations
Pushes self
to stack
. If the call is successful a single element should have been added
to the stack and Ok(())
should be returned. If the call is unsuccessful Status:Error
should be returned and the stack should be left intact. Read more
fn async_status_push(
self,
context: &mut ActiveThread<'vm>,
lock: Lock,
frame_index: VmIndex
) -> Status where
Self: Sized,
Mutably borrows from an owned value. Read more
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
. Read more
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more