use std::fmt;
pub mod expr;
pub mod stmt;
use stmt::*;
#[derive(Default)]
pub struct Program {
pub statements: Vec<Statement>,
}
impl Program {
#[allow(dead_code)]
fn token_literal(&self) -> String {
if self.statements.is_empty() {
"".to_string()
} else {
self.statements[0].token_literal()
}
}
}
impl fmt::Display for Program {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for s in &self.statements {
write!(f, "{}", s)?;
}
Ok(())
}
}
impl fmt::Debug for Program {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for s in &self.statements {
writeln!(f, "{:?}", s)?;
}
Ok(())
}
}