iterator codegen

This commit is contained in:
2026-05-05 18:02:50 +02:00
parent b39d52d076
commit 6aa851fcf9
4 changed files with 12 additions and 1 deletions
+1
View File
@@ -115,6 +115,7 @@ pub enum Statement {
For {
pattern: String,
iterator: Expression,
body: Box<Statement>,
},
Return(Option<Expression>),
+1
View File
@@ -343,6 +343,7 @@ impl From<pest::iterators::Pair<'_, Rule>> for Statement {
Rule::for_stmt => Statement::For {
pattern: inner.next().unwrap().as_str().to_string(),
iterator: inner.next().unwrap().into(),
body: Box::new(Statement::from(inner.next().unwrap())),
},
Rule::assign_statement => Statement::VarAssign(VarAssignStmt {
+9
View File
@@ -417,6 +417,15 @@ impl ToRust for Statement {
cg.add_indentedln("}");
}
Statement::For {
pattern,
iterator,
body,
} => {
cg.add_indentedln(&format!("for {} in {}", pattern, iterator.get_rust()));
cg.ensure_brackets(body);
}
Statement::Return(expr) => {
let val = expr.as_ref().map(|e| e.get_rust()).unwrap_or_default();
cg.add_indentedln(&format!("return {};", val));
+1 -1
View File
@@ -1,5 +1,5 @@
void main() {
let iter = vec!(1, 2, 3, 4, 5);
Vec<i32> iter = vec!(1, 2, 3, 4, 5);
for (i in iter) {
println!("{i}");