iterator codegen
This commit is contained in:
@@ -115,6 +115,7 @@ pub enum Statement {
|
|||||||
For {
|
For {
|
||||||
pattern: String,
|
pattern: String,
|
||||||
iterator: Expression,
|
iterator: Expression,
|
||||||
|
body: Box<Statement>,
|
||||||
},
|
},
|
||||||
|
|
||||||
Return(Option<Expression>),
|
Return(Option<Expression>),
|
||||||
|
|||||||
@@ -343,6 +343,7 @@ impl From<pest::iterators::Pair<'_, Rule>> for Statement {
|
|||||||
Rule::for_stmt => Statement::For {
|
Rule::for_stmt => Statement::For {
|
||||||
pattern: inner.next().unwrap().as_str().to_string(),
|
pattern: inner.next().unwrap().as_str().to_string(),
|
||||||
iterator: inner.next().unwrap().into(),
|
iterator: inner.next().unwrap().into(),
|
||||||
|
body: Box::new(Statement::from(inner.next().unwrap())),
|
||||||
},
|
},
|
||||||
|
|
||||||
Rule::assign_statement => Statement::VarAssign(VarAssignStmt {
|
Rule::assign_statement => Statement::VarAssign(VarAssignStmt {
|
||||||
|
|||||||
@@ -417,6 +417,15 @@ impl ToRust for Statement {
|
|||||||
cg.add_indentedln("}");
|
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) => {
|
Statement::Return(expr) => {
|
||||||
let val = expr.as_ref().map(|e| e.get_rust()).unwrap_or_default();
|
let val = expr.as_ref().map(|e| e.get_rust()).unwrap_or_default();
|
||||||
cg.add_indentedln(&format!("return {};", val));
|
cg.add_indentedln(&format!("return {};", val));
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
void main() {
|
void main() {
|
||||||
let iter = vec!(1, 2, 3, 4, 5);
|
Vec<i32> iter = vec!(1, 2, 3, 4, 5);
|
||||||
|
|
||||||
for (i in iter) {
|
for (i in iter) {
|
||||||
println!("{i}");
|
println!("{i}");
|
||||||
|
|||||||
Reference in New Issue
Block a user