cgen: fixes for ... in with index (#11995)
parent
5d3795e876
commit
8dde9d4a7b
|
@ -2052,7 +2052,11 @@ fn (mut g Gen) for_in_stmt(node ast.ForInStmt) {
|
|||
g.write('${g.typ(node.cond_type)} $t_expr = ')
|
||||
g.expr(node.cond)
|
||||
g.writeln(';')
|
||||
g.writeln('while (1) {')
|
||||
if node.key_var in ['', '_'] {
|
||||
g.writeln('while (1) {')
|
||||
} else {
|
||||
g.writeln('for (size_t $node.key_var = 0;; ++$node.key_var) {')
|
||||
}
|
||||
t_var := g.new_tmp_var()
|
||||
receiver_typ := next_fn.params[0].typ
|
||||
receiver_styp := g.typ(receiver_typ)
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
for (size_t ix = 0;; ++ix) {
|
||||
while (1) {
|
|
@ -0,0 +1,9 @@
|
|||
a.2
|
||||
a.4
|
||||
a.6
|
||||
a.8
|
||||
b.0=2
|
||||
b.1=4
|
||||
b.2=6
|
||||
b.3=8
|
||||
end
|
|
@ -0,0 +1,27 @@
|
|||
struct CustomIter {
|
||||
mut:
|
||||
idx int
|
||||
}
|
||||
|
||||
fn new_custom_iter() CustomIter {
|
||||
return CustomIter{ idx: 0 }
|
||||
}
|
||||
|
||||
fn (mut a CustomIter) next() ?int {
|
||||
if a.idx == 4 {
|
||||
return error('')
|
||||
} else {
|
||||
a.idx++
|
||||
return a.idx * 2
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
for x in new_custom_iter() {
|
||||
println('a.$x')
|
||||
}
|
||||
for ix, val in new_custom_iter() {
|
||||
println('b.$ix=$val')
|
||||
}
|
||||
println('end')
|
||||
}
|
Loading…
Reference in New Issue