Struct gluon::RootedThread [−][src]
pub struct RootedThread(_);
An instance of Thread which is rooted. See the Thread type for documentation on interacting
with the type.
Methods
impl RootedThread[src]
impl RootedThreadpub fn new() -> RootedThread[src]
pub fn new() -> RootedThreadCreates a new virtual machine with an empty global environment
pub fn with_global_state(global_state: GlobalVmState) -> RootedThread[src]
pub fn with_global_state(global_state: GlobalVmState) -> RootedThreadpub fn into_raw(self) -> *const Thread[src]
pub fn into_raw(self) -> *const ThreadConverts a RootedThread into a raw pointer allowing to be passed through a C api.
The reference count for the thread is not modified
pub unsafe fn from_raw(ptr: *const Thread) -> RootedThread[src]
pub unsafe fn from_raw(ptr: *const Thread) -> RootedThreadConverts 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>
pub fn new_thread(&self) -> Result<RootedThread, Error>[src]
pub fn new_thread(&self) -> Result<RootedThread, Error>Spawns a new gluon thread with its own stack and heap but while still sharing the same global environment
pub fn root_thread(&self) -> RootedThread[src]
pub fn root_thread(&self) -> RootedThreadRoots self, extending the lifetime of this thread until at least the returned
RootedThread is droppped
pub fn define_global<'vm, T>(
&'vm self,
name: &str,
value: T
) -> Result<(), Error> where
T: Pushable<'vm> + VmType, [src]
pub fn define_global<'vm, T>(
&'vm self,
name: &str,
value: T
) -> Result<(), Error> where
T: Pushable<'vm> + VmType, : Use gluon::import::add_extern_module instead
Creates a new global value at name.
Fails if a global called name already exists.
Examples
Load the factorial rust function into gluon and evaluate factorial 5
fn factorial(x: i32) -> i32 { if x <= 1 { 1 } else { x * factorial(x - 1) } } let vm = new_vm(); vm.define_global("factorial", primitive!(1 factorial)).unwrap(); let result = Compiler::new() .run_expr_async::<i32>(&vm, "example", "factorial 5") .sync_or_error() .unwrap_or_else(|err| panic!("{}", err)); let expected = (120, Type::int()); assert_eq!(result, expected);
pub fn get_global<'vm, T>(&'vm self, name: &str) -> Result<T, Error> where
T: Getable<'vm> + VmType, [src]
pub fn get_global<'vm, T>(&'vm self, name: &str) -> Result<T, Error> where
T: Getable<'vm> + VmType, 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(); Compiler::new() .run_expr::<OpaqueValue<&Thread, Hole>>(&vm, "example", r#" import! std.int "#) .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(1, 2); assert_eq!(result, Ok(3));
Errors
if the global does not exist or it does not have the correct type.
pub fn find_type_info(
&self,
name: &str
) -> Result<Alias<Symbol, ArcType<Symbol>>, Error>[src]
pub fn find_type_info(
&self,
name: &str
) -> Result<Alias<Symbol, ArcType<Symbol>>, Error>Retrieves type information about the type name. Types inside records can be accessed
using dot notation (std.prelude.Option)
pub fn get_type<T>(&self) -> Option<ArcType<Symbol>> where
T: Any + ?Sized, [src]
pub fn get_type<T>(&self) -> Option<ArcType<Symbol>> where
T: Any + ?Sized, Returns the gluon type that was bound to T
pub fn register_type<T>(
&self,
name: &str,
args: &[&str]
) -> Result<ArcType<Symbol>, Error> where
T: Any + ?Sized, [src]
pub fn register_type<T>(
&self,
name: &str,
args: &[&str]
) -> Result<ArcType<Symbol>, Error> where
T: Any + ?Sized, 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<Symbol>>,
id: TypeId
) -> Result<ArcType<Symbol>, Error>[src]
pub fn register_type_as(
&self,
name: Symbol,
alias: Alias<Symbol, ArcType<Symbol>>,
id: TypeId
) -> Result<ArcType<Symbol>, Error>pub fn get_env(&'b self) -> RwLockReadGuard<'b, VmEnv>[src]
pub fn get_env(&'b self) -> RwLockReadGuard<'b, VmEnv>Locks and retrieves the global environment of the vm
pub fn get_macros(&self) -> &MacroEnv[src]
pub fn get_macros(&self) -> &MacroEnvRetrieves the macros defined for this vm
pub fn get_event_loop(&self) -> Option<Remote>[src]
pub fn get_event_loop(&self) -> Option<Remote>pub fn collect(&self)[src]
pub fn collect(&self)Runs a garbage collection.
pub fn push<'vm, T>(&'vm self, v: T) -> Result<(), Error> where
T: Pushable<'vm>, [src]
pub fn push<'vm, T>(&'vm self, v: T) -> Result<(), Error> where
T: Pushable<'vm>, Pushes a value to the top of the stack
pub fn pop(&self)[src]
pub fn pop(&self)Removes the top value from the stack
pub fn set_memory_limit(&self, memory_limit: usize)[src]
pub fn set_memory_limit(&self, memory_limit: usize)pub fn interrupt(&self)[src]
pub fn interrupt(&self)pub fn interrupted(&self) -> bool[src]
pub fn interrupted(&self) -> boolTrait Implementations
impl<'vm> Getable<'vm> for RootedThread[src]
impl<'vm> Getable<'vm> for RootedThreadfn from_value(&'vm Thread, value: Variants) -> RootedThread[src]
fn from_value(&'vm Thread, value: Variants) -> RootedThreadunsafe fn from_value_unsafe(vm: &'vm Thread, value: Variants) -> Self[src]
unsafe fn from_value_unsafe(vm: &'vm Thread, value: Variants) -> Selfunsafe version of from_value which allows references to the internal of GcPtr's to be extracted if value is rooted Read more
impl VmType for RootedThread[src]
impl VmType for RootedThreadtype Type = Thread
A version of Self which implements Any allowing a TypeId to be retrieved
fn make_forall_type(vm: &Thread) -> ArcType<Symbol>[src]
fn make_forall_type(vm: &Thread) -> ArcType<Symbol>fn make_type(vm: &Thread) -> ArcType<Symbol>[src]
fn make_type(vm: &Thread) -> ArcType<Symbol>Creates an gluon type which maps to Self in rust
fn extra_args() -> u32[src]
fn extra_args() -> u32How 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
impl Clone for RootedThread[src]
impl Clone for RootedThreadfn clone(&self) -> RootedThread[src]
fn clone(&self) -> RootedThreadReturns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)1.0.0[src]
fn clone_from(&mut self, source: &Self)Performs copy-assignment from source. Read more
impl Debug for RootedThread[src]
impl Debug for RootedThreadfn fmt(&self, f: &mut Formatter) -> Result<(), Error>[src]
fn fmt(&self, f: &mut Formatter) -> Result<(), Error>Formats the value using the given formatter. Read more
impl<'a> VmRoot<'a> for RootedThread[src]
impl<'a> VmRoot<'a> for RootedThreadfn root(thread: &'a Thread) -> RootedThread[src]
fn root(thread: &'a Thread) -> RootedThreadfn root_value_with_self(self, value: Value) -> RootedValue<Self>[src]
fn root_value_with_self(self, value: Value) -> RootedValue<Self>Roots a value
impl<'vm> Pushable<'vm> for RootedThread[src]
impl<'vm> Pushable<'vm> for RootedThreadfn push(self, _vm: &'vm Thread, context: &mut Context) -> Result<(), Error>[src]
fn push(self, _vm: &'vm Thread, context: &mut Context) -> Result<(), Error>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 status_push(self, vm: &'vm Thread, context: &mut Context) -> Status[src]
fn status_push(self, vm: &'vm Thread, context: &mut Context) -> Statusunsafe fn marshal_unrooted(self, vm: &'vm Thread) -> Result<Value, Error>[src]
unsafe fn marshal_unrooted(self, vm: &'vm Thread) -> Result<Value, Error>fn marshal<T>(self, vm: &'vm Thread) -> Result<RootedValue<T>, Error> where
T: VmRoot<'vm>, [src]
fn marshal<T>(self, vm: &'vm Thread) -> Result<RootedValue<T>, Error> where
T: VmRoot<'vm>, impl Deref for RootedThread[src]
impl Deref for RootedThreadtype Target = Thread
The resulting type after dereferencing.
fn deref(&self) -> &Thread[src]
fn deref(&self) -> &ThreadDereferences the value.
impl Traverseable for RootedThread[src]
impl Traverseable for RootedThreadimpl SerializeState<SeSeed> for RootedThread[src]
impl SerializeState<SeSeed> for RootedThreadfn serialize_state<__S>(
&self,
__serializer: __S,
__seed: &SeSeed
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer, [src]
fn serialize_state<__S>(
&self,
__serializer: __S,
__seed: &SeSeed
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer, Placeholder
impl Drop for RootedThread[src]
impl Drop for RootedThreadimpl<'de> DeserializeState<'de, DeSeed> for RootedThread[src]
impl<'de> DeserializeState<'de, DeSeed> for RootedThreadfn deserialize_state<__D>(
__seed: &mut DeSeed,
__deserializer: __D
) -> Result<RootedThread, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>, [src]
fn deserialize_state<__D>(
__seed: &mut DeSeed,
__deserializer: __D
) -> Result<RootedThread, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>, Deserializes Self using seed and the deserializer
Auto Trait Implementations
impl Send for RootedThread
impl Send for RootedThreadimpl Sync for RootedThread
impl Sync for RootedThread