math_jit::rpn

Struct Program

Source
pub struct Program(pub Vec<Token>);
Expand description

Parsed program representation

The program is represented using Reverse Polish Notation, which is lends to easy iterative translation into CLIF as well as to simple optimizations.

Tuple Fields§

§0: Vec<Token>

Implementations§

Source§

impl Program

Source

pub fn new(tokens: Vec<Token>) -> Self

Constructs program directly from RPN

Source

pub fn parse_from_infix(expr: &str) -> Result<Self, JitError>

Parses an infix notation into RPN

Source

pub fn propagate_constants(&mut self)

Evaluate constant expressions

Optimizes binary and unary operations:

  • replace [const0, const1, op] with [op(const0, const1)]
  • replace [const, op] with [op(const)]

This operation is repeated until no progress can be made. Token::Noop is removed in the process.

Doesn’t support reordering of associative operations, so [var, const0, add, const1, add] is not replaced with [var, add(const0, const1), add] and so on.

Trait Implementations§

Source§

impl Debug for Program

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> 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, 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.