Struct texlang::vm::ExpansionInput

source ·
#[repr(transparent)]
pub struct ExpansionInput<S>(/* private fields */);
Expand description

Input type for expansion primitives.

This type provides:

This type is also used in the parsing code for situations where both an ExpansionInput or ExecutionInput is accepted. We use this type because it has only read access to the VM, and so casting does not escalate privileges.

Implementations§

source§

impl<S> ExpansionInput<S>

source

pub fn new(vm: &mut VM<S>) -> &mut ExpansionInput<S>

Creates a mutable reference to this type from the VM type.

source§

impl<S: TexlangState> ExpansionInput<S>

source

pub fn push_source( &mut self, token: Token, file_name: PathBuf, source_code: String ) -> Result<(), Box<Error>>

Push source code to the front of the input stream.

source

pub fn end_current_file(&mut self)

End the current file.

This method is used by \endinput primitive.

source

pub fn push_string_tokens(&mut self, token: Token, s: &str)

source§

impl<S> ExpansionInput<S>

source

pub fn unexpanded(&mut self) -> &mut UnexpandedStream<S>

source

pub fn expanded(&mut self) -> &mut ExpandedStream<S>

source

pub fn push_expansion(&mut self, expansion: &[Token])

Push tokens to the front of the input stream.

The first token in the provided slice will be the next token read.

source

pub fn expansions(&self) -> &Vec<Token>

Returns a reference to the expanded tokens stack for the current input source.

The tokens are a stack, so the next token is the last token in the vector.

Adding tokens to the front of the input using this method can be more efficient than using ExpansionInput::push_expansion because an allocation is avoided.

source

pub fn expansions_mut(&mut self) -> &mut Vec<Token>

Returns a mutable reference to the expanded tokens stack for the current input source.

The tokens are a stack, so the next token is the last token in the vector.

Adding tokens to the front of the input using this method can be more efficient than using ExpansionInput::push_expansion because an allocation is avoided.

source

pub fn state_and_expansions_mut(&mut self) -> (&S, &mut Vec<Token>)

source

pub fn checkout_token_buffer(&mut self) -> Vec<Token>

Returns a vector than can be used as a token buffer, potentially without allocating memory.

The returned vector is empty, but will generally have non-zero capacity from previous uses of the buffer. Reusing the allocated memory results in fewer allocations overall. This buffer mechanism was first introduced in a successful attempt to improve the performance of the TeX macros implementation.

When finished with the buffer, please return it using return_token_buffer.

This API may feel a bit awkward - it would seem nicer to return a mutable reference to a buffer instead. Doing this while keeping the borrow checker happy is very difficult and (as is often the case) for good reason. Token buffers are often used in macro expansion, and at any point in time multiple macros may be in the process of expansion. This getting “the” token buffer to use for expansion would be incorrect, as the multiple expansions would step on each other.

source

pub fn return_token_buffer(&mut self, token_buffer: Vec<Token>)

Return a token buffer, allowing it to be reused.

Trait Implementations§

source§

impl<S> AsMut<ExpandedStream<S>> for ExpansionInput<S>

source§

fn as_mut(&mut self) -> &mut ExpandedStream<S>

Converts this type into a mutable reference of the (usually inferred) input type.
source§

impl<S: TexlangState> TokenStream for ExpansionInput<S>

§

type S = S

The type of the custom state in the VM.
source§

fn next(&mut self) -> Result<Option<Token>, Box<Error>>

Gets the next token in the stream. Read more
source§

fn peek(&mut self) -> Result<Option<&Token>, Box<Error>>

Peeks at the next token in the stream without removing it. Read more
source§

fn vm(&self) -> &VM<Self::S>

Returns a reference to the VM.
source§

fn consume(&mut self) -> Result<(), Box<Error>>

Consumes the next token in the stream without returning it. Read more
source§

fn commands_map(&self) -> &Map<Self::S>

Returns a reference to the commands map.
source§

fn state(&self) -> &Self::S

Returns a reference to the custom state.
source§

fn trace(&self, token: Token) -> SourceCodeTrace

source§

fn trace_end_of_input(&self) -> SourceCodeTrace

Auto Trait Implementations§

§

impl<S> !RefUnwindSafe for ExpansionInput<S>

§

impl<S> !Send for ExpansionInput<S>

§

impl<S> !Sync for ExpansionInput<S>

§

impl<S> Unpin for ExpansionInput<S>where S: Unpin,

§

impl<S> UnwindSafe for ExpansionInput<S>where S: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. 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 Twhere 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, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.