For loop iterate through arrays and slices
This commit is contained in:
43
ccodegen.cpp
43
ccodegen.cpp
@@ -500,14 +500,41 @@ gen_ast(Ast *ast){
|
||||
}
|
||||
|
||||
CASE(FOR, For){
|
||||
gen("for(");
|
||||
if(node->init) gen_expr(node->init);
|
||||
gen(";");
|
||||
if(node->cond) gen_expr(node->cond);
|
||||
gen(";");
|
||||
if(node->iter) gen_expr(node->iter);
|
||||
gen(")");
|
||||
gen_stmt_scope(node->scope);
|
||||
|
||||
// Array iter
|
||||
if(node->is_array_traversal){
|
||||
gen("for(S64 _i%d = 0; _i%d < ", node->pos->line, node->pos->line);
|
||||
gen_expr(node->cond);
|
||||
gen(".len; _i%d+=1)", node->pos->line);
|
||||
gen("{");
|
||||
global_indent++;
|
||||
genln("");
|
||||
gen_simple_decl(node->array_traversal_var->type, node->array_traversal_var->name);
|
||||
gen(" = ");
|
||||
gen_expr(node->cond);
|
||||
if(node->is_also_slice_traversal) gen(".data");
|
||||
gen(" + _i%d;", node->pos->line);
|
||||
For(node->scope->stmts) {
|
||||
gen_line(it);
|
||||
genln("");
|
||||
gen_ast(it);
|
||||
}
|
||||
global_indent--;
|
||||
genln("}");
|
||||
}
|
||||
|
||||
// Normal for loop
|
||||
else{
|
||||
gen("for(");
|
||||
if(node->init) gen_expr(node->init);
|
||||
gen(";");
|
||||
if(node->cond) gen_expr(node->cond);
|
||||
gen(";");
|
||||
if(node->iter) gen_expr(node->iter);
|
||||
gen(")");
|
||||
gen_stmt_scope(node->scope);
|
||||
}
|
||||
|
||||
BREAK();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user