use super::*;
use crate::ExpressionBody;
mod display;
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ControlNode {
pub r#type: ControlType,
pub expression: Option<ExpressionNode>,
pub span: Range<u32>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct RaiseNode {
pub expression: Option<ExpressionBody>,
pub span: Range<u32>,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ControlType {
Break,
Continue,
Fallthrough,
Return,
Resume,
YieldReturn,
YieldBreak,
YieldFrom,
}
impl ControlType {
pub fn as_str(&self) -> &'static str {
match self {
ControlType::Break => "break",
ControlType::Continue => "continue",
ControlType::Fallthrough => "fallthrough",
ControlType::Return => "return",
ControlType::Resume => "resume",
ControlType::YieldReturn => "yield",
ControlType::YieldBreak => "yield break",
ControlType::YieldFrom => "yield from",
}
}
}