[−][src]Struct gluon::Thread
Representation of the virtual machine
Methods
impl Thread
[src]
pub fn new_thread(&self) -> Result<RootedThread, Error>
[src]
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]
Roots 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]
&'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::<i32>(&vm, "example", "factorial 5") .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, 'value> + VmType,
[src]
T: Getable<'vm, 'value> + 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 get_global_type(&self, name: &str) -> Result<ArcType<Symbol>, Error>
[src]
pub fn find_type_info(
&self,
name: &str
) -> Result<Alias<Symbol, ArcType<Symbol>>, Error>
[src]
&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]
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]
&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]
&self,
name: Symbol,
alias: Alias<Symbol, ArcType<Symbol>>,
id: TypeId
) -> Result<ArcType<Symbol>, Error>
pub fn cache_alias(
&self,
alias: Alias<Symbol, ArcType<Symbol>>
) -> ArcType<Symbol>
[src]
&self,
alias: Alias<Symbol, ArcType<Symbol>>
) -> ArcType<Symbol>
pub fn get_env(&'b self) -> RwLockReadGuard<'b, VmEnv>
[src]
Locks and retrieves the global environment of the vm
pub fn get_macros(&self) -> &MacroEnv
[src]
Retrieves the macros defined for this vm
pub fn collect(&self)
[src]
Runs a garbage collection.
pub fn push<'vm, T>(&'vm self, v: T) -> Result<(), Error> where
T: Pushable<'vm>,
[src]
T: Pushable<'vm>,
Pushes a value to the top of the stack
pub fn pop(&self)
[src]
Removes the top value from the stack
pub fn allocated_memory(&self) -> usize
[src]
pub fn set_memory_limit(&self, memory_limit: usize)
[src]
pub fn interrupt(&self)
[src]
pub fn interrupted(&self) -> bool
[src]
pub fn current_context(&self) -> ActiveThread
[src]
Trait Implementations
impl ThreadInternal for Thread
[src]
fn context(&self) -> OwnedContext
[src]
fn root_value<'vm, T>(&'vm self, value: Variants) -> RootedValue<T> where
T: VmRoot<'vm>,
[src]
T: VmRoot<'vm>,
Roots a value
fn call_thunk(
&'vm self,
closure: GcPtr<ClosureData>
) -> Either<FutureResult<<Execute<RootedThread> as Future>::Item, <Execute<RootedThread> as Future>::Error>, Execute<RootedThread>>
[src]
&'vm self,
closure: GcPtr<ClosureData>
) -> Either<FutureResult<<Execute<RootedThread> as Future>::Item, <Execute<RootedThread> as Future>::Error>, Execute<RootedThread>>
fn execute_io(
&'vm self,
value: Variants
) -> Either<FutureResult<<Execute<RootedThread> as Future>::Item, <Execute<RootedThread> as Future>::Error>, Execute<RootedThread>>
[src]
&'vm self,
value: Variants
) -> Either<FutureResult<<Execute<RootedThread> as Future>::Item, <Execute<RootedThread> as Future>::Error>, Execute<RootedThread>>
Calls a module, allowed to to run IO expressions
fn call_function(
&'b self,
context: OwnedContext<'b>,
args: u32
) -> Result<Async<Option<OwnedContext<'b>>>, Error>
[src]
&'b self,
context: OwnedContext<'b>,
args: u32
) -> Result<Async<Option<OwnedContext<'b>>>, Error>
Calls a function on the stack.
When this function is called it is expected that the function exists at
stack.len() - args - 1
and that the arguments are of the correct type
fn resume(&self) -> Result<Async<OwnedContext>, Error>
[src]
fn set_global(
&self,
name: Symbol,
typ: ArcType<Symbol>,
metadata: Metadata,
value: Value
) -> Result<(), Error>
[src]
&self,
name: Symbol,
typ: ArcType<Symbol>,
metadata: Metadata,
value: Value
) -> Result<(), Error>
fn deep_clone_value(
&self,
owner: &Thread,
value: Variants
) -> Result<Value, Error>
[src]
&self,
owner: &Thread,
value: Variants
) -> Result<Value, Error>
fn can_share_values_with(&self, gc: &mut Gc, other: &Thread) -> bool
[src]
fn call_thunk_top(
&'vm self,
closure: GcPtr<ClosureData>
) -> Box<dyn Future<Error = Error, Item = RootedValue<RootedThread>> + 'static + Send> where
Self: Send + Sync,
[src]
&'vm self,
closure: GcPtr<ClosureData>
) -> Box<dyn Future<Error = Error, Item = RootedValue<RootedThread>> + 'static + Send> where
Self: Send + Sync,
fn execute_io_top(
&'vm self,
value: Variants
) -> Box<dyn Future<Error = Error, Item = RootedValue<RootedThread>> + 'static + Send> where
Self: Send + Sync,
[src]
&'vm self,
value: Variants
) -> Box<dyn Future<Error = Error, Item = RootedValue<RootedThread>> + 'static + Send> where
Self: Send + Sync,
impl VmType for Thread
[src]
type 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_type(vm: &Thread) -> ArcType<Symbol>
[src]
Creates an gluon type which maps to Self
in rust
fn extra_args() -> u32
[src]
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
impl Userdata for Thread
[src]
fn deep_clone(
&self,
deep_cloner: &mut Cloner
) -> Result<GcPtr<Box<dyn Userdata + 'static>>, Error>
[src]
&self,
deep_cloner: &mut Cloner
) -> Result<GcPtr<Box<dyn Userdata + 'static>>, Error>
impl PartialEq<Thread> for Thread
[src]
fn eq(&self, other: &Thread) -> bool
[src]
#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests for !=
.
impl Debug for Thread
[src]
impl<'a> VmRootInternal for &'a Thread
[src]
fn root_vm(&self)
[src]
fn unroot_vm(&self)
[src]
fn root_value_with_self(self, value: Variants) -> RootedValue<Self>
[src]
Roots a value
impl Trace for Thread
[src]
impl SerializeState<SeSeed> for Thread
[src]
fn serialize_state<__S>(
&self,
__serializer: __S,
__seed: &SeSeed
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
[src]
&self,
__serializer: __S,
__seed: &SeSeed
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
impl<'de> DeserializeState<'de, DeSeed> for Thread
[src]
fn deserialize_state<__D>(
__seed: &mut DeSeed,
__deserializer: __D
) -> Result<Thread, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
[src]
__seed: &mut DeSeed,
__deserializer: __D
) -> Result<Thread, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
impl<'a> VmRoot<'a> for &'a Thread
[src]
Auto Trait Implementations
impl Sync for Thread
impl Unpin for Thread
impl Send for Thread
impl UnwindSafe for Thread
impl RefUnwindSafe for Thread
Blanket Implementations
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Any for T where
T: Any,
T: Any,
impl<D, T> FromPtr<D> for T
[src]
impl<'vm, T> AsyncPushable<'vm> for T where
T: Pushable<'vm>,
[src]
T: Pushable<'vm>,
fn async_push(
self,
context: &mut ActiveThread<'vm>,
u32
) -> Result<Async<()>, Error>
[src]
self,
context: &mut ActiveThread<'vm>,
u32
) -> Result<Async<()>, Error>
fn async_status_push(
self,
context: &mut ActiveThread<'vm>,
frame_index: u32
) -> Status
[src]
self,
context: &mut ActiveThread<'vm>,
frame_index: u32
) -> Status
impl<'vm, T> Pushable<'vm> for T where
T: Userdata,
[src]
T: Userdata,
fn push(self, context: &mut ActiveThread<'vm>) -> Result<(), Error>
[src]
fn status_push(self, context: &mut ActiveThread<'vm>) -> Status
[src]
unsafe fn marshal_unrooted(self, vm: &'vm Thread) -> Result<Value, Error>
[src]
fn marshal<T>(self, vm: &'vm Thread) -> Result<RootedValue<T>, Error> where
T: VmRoot<'vm>,
[src]
T: VmRoot<'vm>,
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
type Remainder = Choices
fn subset(
self
) -> Result<CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder>
self
) -> Result<CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder>
impl<Source> Sculptor<HNil, HNil> for Source
impl<T, U, I> LiftInto<U, I> for T where
U: LiftFrom<T, I>,
U: LiftFrom<T, I>,
fn lift_into(self) -> U
impl<T> Any for T where
T: Any,
T: Any,