Enum passerine::compiler::ast::AST[][src]

pub enum AST {
    Symbol(String),
    Data(Data),
    Block(Vec<Spanned<AST>>),
    Form(Vec<Spanned<AST>>),
    Group(Box<Spanned<AST>>),
    CSTPattern(ASTPattern),
    ArgPattern(ArgPattern),
    Tuple(Vec<Spanned<AST>>),
    Assign {
        pattern: Box<Spanned<ASTPattern>>,
        expression: Box<Spanned<AST>>,
    },
    Lambda {
        pattern: Box<Spanned<ASTPattern>>,
        expression: Box<Spanned<AST>>,
    },
    Composition {
        argument: Box<Spanned<AST>>,
        function: Box<Spanned<AST>>,
    },
    Label(StringBox<Spanned<AST>>),
    Syntax {
        arg_pat: Box<Spanned<ArgPattern>>,
        expression: Box<Spanned<AST>>,
    },
    FFI {
        name: String,
        expression: Box<Spanned<AST>>,
    },
}

Represents an item in a sugared AST. Which is the direct result of parsing Each syntax-level construct has it’s own AST variant. When macros are added, for instance, they will be here, But not in the CST, which is the desugared syntax tree, and represents language-level constructs

Variants

Symbol(String)
Data(Data)
Block(Vec<Spanned<AST>>)
Form(Vec<Spanned<AST>>)
Group(Box<Spanned<AST>>)
CSTPattern(ASTPattern)
ArgPattern(ArgPattern)
Tuple(Vec<Spanned<AST>>)
Assign

Fields of Assign

pattern: Box<Spanned<ASTPattern>>expression: Box<Spanned<AST>>
Lambda

Fields of Lambda

pattern: Box<Spanned<ASTPattern>>expression: Box<Spanned<AST>>
Composition

Fields of Composition

argument: Box<Spanned<AST>>function: Box<Spanned<AST>>
Label(StringBox<Spanned<AST>>)
Syntax

Fields of Syntax

arg_pat: Box<Spanned<ArgPattern>>expression: Box<Spanned<AST>>
FFI

Fields of FFI

name: Stringexpression: Box<Spanned<AST>>

Implementations

impl AST[src]

pub fn assign(pattern: Spanned<ASTPattern>, expression: Spanned<AST>) -> AST[src]

Shortcut for creating an AST::Assign variant.

pub fn lambda(pattern: Spanned<ASTPattern>, expression: Spanned<AST>) -> AST[src]

Shortcut for creating an AST::Lambda variant.

pub fn composition(argument: Spanned<AST>, function: Spanned<AST>) -> AST[src]

Shortcut for creating an AST::Composition variant.

pub fn syntax(arg_pat: Spanned<ArgPattern>, expression: Spanned<AST>) -> AST[src]

Shortcut for creating an AST::Syntax variant. i.e. a macro definition

pub fn label(name: &str, expression: Spanned<AST>) -> AST[src]

Shortcut for creating a AST::Label variant.

pub fn ffi(name: &str, expression: Spanned<AST>) -> AST[src]

Shortcut for creating an AST::FFI variant.

pub fn group(expression: Spanned<AST>) -> AST[src]

Shortcut for creating an AST::Group variant.

Trait Implementations

impl Clone for AST[src]

impl Debug for AST[src]

impl PartialEq<AST> for AST[src]

impl StructuralPartialEq for AST[src]

impl TryFrom<AST> for ArgPattern[src]

type Error = String

The type returned in the event of a conversion error.

fn try_from(ast: AST) -> Result<Self, Self::Error>[src]

Like ASTPatterns, ArgPatterns are represented as ASTs, Then converted into ArgPatterns when the compiler determines it so.

impl TryFrom<AST> for ASTPattern[src]

type Error = String

The type returned in the event of a conversion error.

fn try_from(ast: AST) -> Result<Self, Self::Error>[src]

Tries to convert an AST into a CSTPattern. CSTPatterns mirror the ASTs they are designed to destructure. During parsing, they are just parsed as ASTs - When the compiler can determine that an AST is actually a pattern, It performs this conversion.

Auto Trait Implementations

impl !RefUnwindSafe for AST

impl !Send for AST

impl !Sync for AST

impl Unpin for AST

impl !UnwindSafe for AST

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