Skip to main content

Executor

Struct Executor 

Source
pub struct Executor { /* private fields */ }
Expand description

An executor interface for Macrosia.

Implementations§

Source§

impl Executor

Source

pub fn new(context: u8) -> Self

Creates a new, empty execution context.

Source

pub fn set_context(&self, context: u8) -> u8

Sets the context in which this executor is running.

Source

pub fn context(&self) -> u8

Gets the context in which this executor is running.

Source

pub fn get_macro(&self, macro_name: &[u8]) -> Option<&dyn Macro>

Gets a macro from the executor.

Source

pub fn macros( &self, ) -> &HashMap<InternerEntry, Box<dyn Macro>, BuildHasherDefault<SeaHasher>>

Gets the map of all macros in the executor keyed with their names.

Source

pub fn add_macro(&mut self, mac: impl Macro + 'static)

Adds a macro to the executor.

Source

pub fn clear_macros(&mut self)

Adds a macro to the executor.

Source

pub fn evaluate<'slf, 'reg: 'slf, 'buf: 'reg>( &'slf self, string: &'buf [u8], reg: &'reg mut VariableRegistry, step_limit: Option<usize>, debug_log: Option<&mut Vec<String>>, kill: &AtomicBool, ) -> impl FnMut() -> Option<Result<Cow<'buf, [u8]>, MacroError>>

Evaluates a given bytestring, returning it with all macros expanded…

§Errors

…or an error if one occurred within one of the expanded macros.

§Why is the return like that.

If I had implemented this normally, this function may not terminate immediately - in fact, it may not terminate at all. This returns a function that you can call to iterate one time over what would’ve been a loop. The function will return a None until it is done, and then a Some containing the output value. If you call the function after that, it will simply return a Some(Err(...)).

Think of it like a Coroutine.

Source§

impl Executor

Source

pub fn get_builtin(builtin_name: &[u8]) -> Option<&'static dyn Macro>

Does a quick search for a builtin macro, returning None if not found.

Source

pub fn add_stdlib(&mut self)

Adds all standard library macros to the given execution context.

The executor doesn’t actually pull from this for execution anymore, so this is purely for if you need them for e.g. automatically generating documentation.

Trait Implementations§

Source§

impl Clone for Executor

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

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

Source§

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V