跳转至

语句 (Statement)

本页定义了 Lumos 的语句结构 Stat

1. 语句 Stat

pub enum Stat {
    /// 表达式语句
    Expr(Expr),

    /// 代码块
    Block(Block),

    /// 条件分支
    If {
        /// 支持 (expr, expr, cond) 这种多条件形式
        conditions: Vec<Expr>,
        then_body: Box<Stat>,
        else_body: Option<Box<Stat>>,
    },

    /// 循环
    Loop {
        kind: LoopKind,
        init: Option<Box<Stat>>,
        cond: Option<Expr>,
        step: Option<Box<Stat>>,
        body: Box<Stat>,
        label: Option<String>,
    },

    /// 跳转
    Jump {
        kind: JumpKind,
        label: Option<String>,
        value: Option<Expr>, // 用于 return 返回值
    },

    /// 权限操作块 (act[+io] { ... })
    Permission {
        op: PermissionOp,
        perms: Vec<String>,
        body: Box<Stat>,
    },

    /// 静态假设 (assume <cond>)
    Assume(Expr),

    /// 声明语句 (在函数内部定义变量或局部函数)
    Decl(Decl),

    /// 异常处理
    Try {
        body: Block,
        catches: Vec<CatchBlock>,
        finally: Option<Block>,
    },

    /// 抛出异常
    Throw(Expr),

    /// 空语句
    Empty,
}

2. 辅助枚举

2.1 循环类型 LoopKind

pub enum LoopKind {
    For,
    While,
    DoWhile,
    Infinite, // loop { ... }
}

2.2 跳转类型 JumpKind

pub enum JumpKind {
    Return,
    Break,
    Continue,
    Leave,
    Goto,
}

2.3 权限操作 PermissionOp

pub enum PermissionOp {
    Add,            // +xxx
    Sub,            // -xxx
    Reset,          // xxx (重置为仅有这些)
    Escape(String), // * (逃生舱,带理由)
}

2.4 异常捕获 CatchBlock

pub struct CatchBlock {
    pub error_var: Option<String>,
    pub error_type: TypeRef,
    pub body: Block,
}