pub struct ArithCompiler<'a> {
pub input: &'a str,
pub pos: usize,
pub builder: ChunkBuilder,
pub slots: HashMap<String, u16>,
pub next_slot: u16,
}Expand description
Arithmetic expression compiler.
Takes a zsh arithmetic expression (the content inside
$((...))) and emits fusevm bytecodes that compute the result.
Tokenizer port: same lexer shape as zzlex() /
mathlex() from Src/math.c. Emit step: zshrs-original —
C zsh evaluates inline via mathevall() (Src/math.c) and has
no compile-then-run path.
Fields§
§input: &'a strinput field.
pos: usizepos field.
builder: ChunkBuilderbuilder field.
slots: HashMap<String, u16>Variable name → slot index
next_slot: u16next_slot field.
Implementations§
Source§impl<'a> ArithCompiler<'a>
impl<'a> ArithCompiler<'a>
Sourcepub fn compile(self) -> Chunk
pub fn compile(self) -> Chunk
Compile the arithmetic expression to fusevm bytecodes. Returns the compiled chunk.
Sourcepub fn collect_identifiers(&self, expr: &str) -> Vec<String>
pub fn collect_identifiers(&self, expr: &str) -> Vec<String>
Walk the input string and collect all identifier names that appear.
Used by compile_arith_inline to pre-load values from
executor.variables and to know which slots to write back after.
Excludes language keywords and numeric literals.
Auto Trait Implementations§
impl<'a> Freeze for ArithCompiler<'a>
impl<'a> RefUnwindSafe for ArithCompiler<'a>
impl<'a> Send for ArithCompiler<'a>
impl<'a> Sync for ArithCompiler<'a>
impl<'a> Unpin for ArithCompiler<'a>
impl<'a> UnsafeUnpin for ArithCompiler<'a>
impl<'a> UnwindSafe for ArithCompiler<'a>
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Gets the layout of the type.