use super::*;
mod display;
#[doc = include_str!("readme.md")]
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ForLoop {
pub pattern: PatternNode,
pub iterator: ExpressionKind,
pub condition: Option<ExpressionKind>,
pub label: Option<IdentifierNode>,
pub body: StatementBlock,
pub span: Range<u32>,
}
impl ValkyrieNode for ForLoop {
fn get_range(&self) -> Range<usize> {
Range { start: self.span.start as usize, end: self.span.end as usize }
}
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct ForBarePattern {
pub pattern: Vec<ArgumentKey>,
pub span: Range<u32>,
}
impl ForLoop {
pub fn standardization(self, iterator: IdentifierNode) -> (VariableDeclaration, LoopStatement) {
let var = VariableDeclaration { identifier: iterator, type_hint: None, body: None };
let lops = LoopStatement { label: self.label, terms: vec![] };
(var, lops)
}
}
impl ForBarePattern {
#[allow(clippy::wrong_self_convention)]
pub fn as_pattern_expression(self) -> PatternNode {
TuplePatternNode {
bind: None,
name: None,
terms: self.pattern.into_iter().map(PatternNode::from).collect(),
span: self.span,
}
.into()
}
}