iterator codegen
This commit is contained in:
@@ -115,6 +115,7 @@ pub enum Statement {
|
||||
For {
|
||||
pattern: String,
|
||||
iterator: Expression,
|
||||
body: Box<Statement>,
|
||||
},
|
||||
|
||||
Return(Option<Expression>),
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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}");
|
||||
|
||||
Reference in New Issue
Block a user