ast: Do not promise PartialOrd/Ord (breaking change)
This commit is contained in:
		@@ -10,30 +10,31 @@
 | 
			
		||||
//! - [Ty] and [TyKind]: Type qualifiers
 | 
			
		||||
//! - [Path]: Path expressions
 | 
			
		||||
use crate::common::*;
 | 
			
		||||
 | 
			
		||||
pub mod ast_impl;
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
 | 
			
		||||
pub enum Mutability {
 | 
			
		||||
    #[default]
 | 
			
		||||
    Not,
 | 
			
		||||
    Mut,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
 | 
			
		||||
pub enum Visibility {
 | 
			
		||||
    #[default]
 | 
			
		||||
    Private,
 | 
			
		||||
    Public,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, Default, PartialEq, Eq)]
 | 
			
		||||
pub struct File {
 | 
			
		||||
    pub items: Vec<Item>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Items
 | 
			
		||||
/// Stores an [ItemKind] and associated metadata
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Item {
 | 
			
		||||
    pub extents: Span,
 | 
			
		||||
    pub vis: Visibility,
 | 
			
		||||
@@ -41,7 +42,7 @@ pub struct Item {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Stores a concrete Item
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum ItemKind {
 | 
			
		||||
    /// A [constant](Const)
 | 
			
		||||
    Const(Const),
 | 
			
		||||
@@ -60,7 +61,7 @@ pub enum ItemKind {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Stores a `const` value
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Const {
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
    pub ty: Box<Ty>,
 | 
			
		||||
@@ -68,7 +69,7 @@ pub struct Const {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Stores a `static` variable
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Static {
 | 
			
		||||
    pub mutable: Mutability,
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
@@ -77,20 +78,20 @@ pub struct Static {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Stores a collection of [Items](Item)
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Module {
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
    pub kind: ModuleKind,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum ModuleKind {
 | 
			
		||||
    Inline(File),
 | 
			
		||||
    Outline,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Contains code, and the interface to that code
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Function {
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
    pub args: Vec<Param>,
 | 
			
		||||
@@ -98,53 +99,53 @@ pub struct Function {
 | 
			
		||||
    pub rety: Option<Box<Ty>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Param {
 | 
			
		||||
    pub mutability: Mutability,
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
    pub ty: Box<Ty>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Struct {
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
    pub kind: StructKind,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum StructKind {
 | 
			
		||||
    Empty,
 | 
			
		||||
    Tuple(Vec<Ty>),
 | 
			
		||||
    Struct(Vec<StructMember>),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct StructMember {
 | 
			
		||||
    pub vis: Visibility,
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
    pub ty: Ty,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Enum {
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
    pub kind: EnumKind,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum EnumKind {
 | 
			
		||||
    /// Represents an enum with no variants
 | 
			
		||||
    NoVariants,
 | 
			
		||||
    Variants(Vec<Variant>),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Variant {
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
    pub kind: VariantKind,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum VariantKind {
 | 
			
		||||
    Plain,
 | 
			
		||||
    CLike(u128),
 | 
			
		||||
@@ -152,27 +153,27 @@ pub enum VariantKind {
 | 
			
		||||
    Struct(Vec<StructMember>),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Impl {
 | 
			
		||||
    pub target: Ty,
 | 
			
		||||
    pub body: Vec<Item>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// TODO: `impl` Trait for <Target> { }
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
// TODO: `impl` Trait for <Target> { }
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum ImplKind {
 | 
			
		||||
    Type(Box<Ty>),
 | 
			
		||||
    Trait { impl_trait: Path, for_type: Box<Ty> },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// # Static Type Information
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Ty {
 | 
			
		||||
    pub extents: Span,
 | 
			
		||||
    pub kind: TyKind,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum TyKind {
 | 
			
		||||
    Never,
 | 
			
		||||
    Empty,
 | 
			
		||||
@@ -182,30 +183,30 @@ pub enum TyKind {
 | 
			
		||||
    Fn(TyFn),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct TyTuple {
 | 
			
		||||
    pub types: Vec<Ty>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct TyRef {
 | 
			
		||||
    pub count: usize,
 | 
			
		||||
    pub to: Path,
 | 
			
		||||
}
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct TyFn {
 | 
			
		||||
    pub args: TyTuple,
 | 
			
		||||
    pub rety: Option<Box<Ty>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Path
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Path {
 | 
			
		||||
    pub absolute: bool,
 | 
			
		||||
    pub parts: Vec<PathPart>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum PathPart {
 | 
			
		||||
    SuperKw,
 | 
			
		||||
    SelfKw,
 | 
			
		||||
@@ -213,24 +214,24 @@ pub enum PathPart {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO: Capture token?
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Identifier(pub String);
 | 
			
		||||
 | 
			
		||||
/// Stores an abstract statement, and associated metadata
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Stmt {
 | 
			
		||||
    pub extents: Span,
 | 
			
		||||
    pub kind: StmtKind,
 | 
			
		||||
    pub semi: Semi,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum Semi {
 | 
			
		||||
    Terminated,
 | 
			
		||||
    Unterminated,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum StmtKind {
 | 
			
		||||
    Empty,
 | 
			
		||||
    Local(Let),
 | 
			
		||||
@@ -238,7 +239,7 @@ pub enum StmtKind {
 | 
			
		||||
    Expr(Box<Expr>),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Let {
 | 
			
		||||
    pub mutable: Mutability,
 | 
			
		||||
    pub name: Identifier,
 | 
			
		||||
@@ -247,13 +248,13 @@ pub struct Let {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Stores an abstract expression, and associated metadata
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Expr {
 | 
			
		||||
    pub extents: Span,
 | 
			
		||||
    pub kind: ExprKind,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum ExprKind {
 | 
			
		||||
    /// An [Assign]ment expression: [`Expr`] ([`AssignKind`] [`Expr`])\+
 | 
			
		||||
    Assign(Box<Assign>),
 | 
			
		||||
@@ -300,14 +301,14 @@ pub enum ExprKind {
 | 
			
		||||
    Continue(Continue),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Assign {
 | 
			
		||||
    pub head: Expr,
 | 
			
		||||
    pub op: AssignKind,
 | 
			
		||||
    pub tail: Box<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum AssignKind {
 | 
			
		||||
    /// Standard Assignment with no read-back
 | 
			
		||||
    Plain,
 | 
			
		||||
@@ -323,13 +324,13 @@ pub enum AssignKind {
 | 
			
		||||
    Rem,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Binary {
 | 
			
		||||
    pub head: Box<Expr>,
 | 
			
		||||
    pub tail: Vec<(BinaryKind, Expr)>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum BinaryKind {
 | 
			
		||||
    Lt,
 | 
			
		||||
    LtEq,
 | 
			
		||||
@@ -355,13 +356,13 @@ pub enum BinaryKind {
 | 
			
		||||
    Dot,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Unary {
 | 
			
		||||
    pub ops: Vec<UnaryKind>,
 | 
			
		||||
    pub tail: Box<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum UnaryKind {
 | 
			
		||||
    Deref,
 | 
			
		||||
    Neg,
 | 
			
		||||
@@ -372,36 +373,36 @@ pub enum UnaryKind {
 | 
			
		||||
    Tilde,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Member {
 | 
			
		||||
    pub head: Box<Expr>,
 | 
			
		||||
    pub tail: Vec<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum MemberKind {
 | 
			
		||||
    Dot,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Call {
 | 
			
		||||
    pub callee: Box<Expr>,
 | 
			
		||||
    pub args: Vec<Tuple>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Index operator: Member (`[` Expr `]`)*
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Index {
 | 
			
		||||
    pub head: Box<Expr>,
 | 
			
		||||
    pub indices: Vec<Indices>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Indices {
 | 
			
		||||
    pub exprs: Vec<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub enum Literal {
 | 
			
		||||
    Bool(bool),
 | 
			
		||||
    Char(char),
 | 
			
		||||
@@ -409,54 +410,54 @@ pub enum Literal {
 | 
			
		||||
    String(String),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Array {
 | 
			
		||||
    pub values: Vec<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct ArrayRep {
 | 
			
		||||
    pub value: Box<Expr>,
 | 
			
		||||
    pub repeat: Box<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct AddrOf {
 | 
			
		||||
    pub count: usize,
 | 
			
		||||
    pub mutable: Mutability,
 | 
			
		||||
    pub expr: Box<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Block {
 | 
			
		||||
    pub stmts: Vec<Stmt>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Group {
 | 
			
		||||
    pub expr: Box<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Tuple {
 | 
			
		||||
    pub exprs: Vec<Expr>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct While {
 | 
			
		||||
    pub cond: Box<Expr>,
 | 
			
		||||
    pub pass: Box<Block>,
 | 
			
		||||
    pub fail: Else,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct If {
 | 
			
		||||
    pub cond: Box<Expr>,
 | 
			
		||||
    pub pass: Box<Block>,
 | 
			
		||||
    pub fail: Else,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct For {
 | 
			
		||||
    pub bind: Identifier, // TODO: Patterns?
 | 
			
		||||
    pub cond: Box<Expr>,
 | 
			
		||||
@@ -464,20 +465,20 @@ pub struct For {
 | 
			
		||||
    pub fail: Else,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Else {
 | 
			
		||||
    pub body: Option<Box<Expr>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Break {
 | 
			
		||||
    pub body: Option<Box<Expr>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct Return {
 | 
			
		||||
    pub body: Option<Box<Expr>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
 | 
			
		||||
pub struct Continue;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user