use std::{cell::RefCell, rc::Rc};
use super::Block;
use crate::{Expression, VariableInfo};
#[derive(Clone, Debug)]
pub struct StmtFor {
pub control_variable: Rc<RefCell<VariableInfo>>,
pub start: Expression,
pub end: Expression,
pub step: Expression,
pub block: Block,
}
impl StmtFor {
pub fn new(
control_variable: Rc<RefCell<VariableInfo>>,
start: Expression,
end: Expression,
step: Expression,
block: Block,
) -> Self {
Self {
control_variable,
start,
end,
step,
block,
}
}
}
#[derive(Clone, Debug)]
pub struct StmtForGeneric {
pub control_variables: Vec<Rc<RefCell<VariableInfo>>>,
pub iterator: Rc<RefCell<VariableInfo>>,
pub state: Rc<RefCell<VariableInfo>>,
pub closing: Rc<RefCell<VariableInfo>>,
pub expressions: Vec<Expression>,
pub block: Block,
}
impl StmtForGeneric {
pub fn new(
control_variables: Vec<Rc<RefCell<VariableInfo>>>,
iterator: Rc<RefCell<VariableInfo>>,
state: Rc<RefCell<VariableInfo>>,
closing: Rc<RefCell<VariableInfo>>,
expressions: Vec<Expression>,
block: Block,
) -> Self {
Self {
control_variables,
iterator,
state,
closing,
expressions,
block,
}
}
}