[][src]Struct libslide::grammar::mem::RcExpr

pub struct RcExpr {
    expr: Arc<Expr>,
    pub span: Span,
}

An reference-counted version of an expression.

NB: counted expressions are equivalent if they point to the same underlying expression, even though two counted expressions may have different spans.

Fields

expr: Arc<Expr>

The underlying expression.

span: Span

The original span of this expression from an input source code. Even though the expression may be shared, this span is distinct and serves as a backwards-mapping to where the expression originally came from.

Implementations

impl RcExpr[src]

pub(crate) fn new<Sp>(expr: Expr, span: Sp) -> Self where
    Sp: Into<Span>, 
[src]

Creates a new reference-counted expression at a span.

Trait Implementations

impl AsRef<Expr> for RcExpr[src]

impl Clone for RcExpr[src]

impl Debug for RcExpr[src]

impl Deref for RcExpr[src]

type Target = Self::Inner

The resulting type after dereferencing.

impl Display for RcExpr[src]

impl Emit for RcExpr[src]

impl Eq for RcExpr[src]

impl From<RcExpr> for StmtKind[src]

impl Grammar for RcExpr[src]

impl Hash for RcExpr[src]

impl MatchRule<RcExpr> for PatternMatch<RcExpr>[src]

impl Ord for RcExpr[src]

impl PartialEq<RcExpr> for RcExpr[src]

impl PartialOrd<RcExpr> for RcExpr[src]

impl RcExpression for RcExpr[src]

type Inner = Expr

The type of expression held by Self.

impl Transformer<RcExpr, RcExpr> for Rule[src]

fn transform(&self, target: RcExpr) -> RcExpr[src]

Attempts to apply a rule on a target expression by

  1. Applying the rule recursively on the target's subexpression to obtain a partially-transformed target expression.

  2. Pattern matching the lhs of the rule with the partially-transformed target expression.

  • If pattern matching is unsuccessful, no application is done and the original expression is returned.
  1. Expanding the rhs of the rule using the results of the pattern matching.

Examples:

This example is not tested
"$x + 0 -> $x".try_apply("x + 0")  // Some(x)
"$x + 0 -> $x".try_apply("x + 1")  // None
"$x + 0 -> $x".try_apply("x")      // None

impl Transformer<RcExprPat, RcExpr> for PatternMatch<RcExpr>[src]

fn transform(&self, item: RcExprPat) -> RcExpr[src]

Transforms a pattern expression into an expression by replacing patterns with target expressions known by the PatternMatch.

This transformation can be used to apply a rule on an expression by transforming the RHS using patterns matched between the LHS of the rule and the target expression.

Auto Trait Implementations

impl RefUnwindSafe for RcExpr

impl Send for RcExpr

impl Sync for RcExpr

impl Unpin for RcExpr

impl UnwindSafe for RcExpr

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.