cgen: fix blank ident in for_c_stmt (#12931)
parent
cb65f2ff44
commit
6a4fa6096e
|
@ -202,6 +202,8 @@ fn (mut g Gen) gen_assign_stmt(node ast.AssignStmt) {
|
||||||
g.is_void_expr_stmt = true
|
g.is_void_expr_stmt = true
|
||||||
g.expr(val)
|
g.expr(val)
|
||||||
g.is_void_expr_stmt = old_is_void_expr_stmt
|
g.is_void_expr_stmt = old_is_void_expr_stmt
|
||||||
|
} else if g.inside_for_c_stmt {
|
||||||
|
g.expr(val)
|
||||||
} else {
|
} else {
|
||||||
g.write('{$styp _ = ')
|
g.write('{$styp _ = ')
|
||||||
g.expr(val)
|
g.expr(val)
|
||||||
|
|
|
@ -111,6 +111,7 @@ mut:
|
||||||
inside_return bool
|
inside_return bool
|
||||||
inside_or_block bool
|
inside_or_block bool
|
||||||
inside_call bool
|
inside_call bool
|
||||||
|
inside_for_c_stmt bool
|
||||||
inside_cast_in_heap int // inside cast to interface type in heap (resolve recursive calls)
|
inside_cast_in_heap int // inside cast to interface type in heap (resolve recursive calls)
|
||||||
inside_const bool
|
inside_const bool
|
||||||
inside_lambda bool
|
inside_lambda bool
|
||||||
|
@ -1857,6 +1858,7 @@ fn (mut g Gen) for_c_stmt(node ast.ForCStmt) {
|
||||||
g.loop_depth++
|
g.loop_depth++
|
||||||
if node.is_multi {
|
if node.is_multi {
|
||||||
g.is_vlines_enabled = false
|
g.is_vlines_enabled = false
|
||||||
|
g.inside_for_c_stmt = true
|
||||||
if node.label.len > 0 {
|
if node.label.len > 0 {
|
||||||
g.writeln('$node.label:')
|
g.writeln('$node.label:')
|
||||||
}
|
}
|
||||||
|
@ -1883,6 +1885,7 @@ fn (mut g Gen) for_c_stmt(node ast.ForCStmt) {
|
||||||
g.writeln(')) break;')
|
g.writeln(')) break;')
|
||||||
}
|
}
|
||||||
g.is_vlines_enabled = true
|
g.is_vlines_enabled = true
|
||||||
|
g.inside_for_c_stmt = false
|
||||||
g.stmts(node.stmts)
|
g.stmts(node.stmts)
|
||||||
if node.label.len > 0 {
|
if node.label.len > 0 {
|
||||||
g.writeln('${node.label}__continue: {}')
|
g.writeln('${node.label}__continue: {}')
|
||||||
|
@ -1895,6 +1898,7 @@ fn (mut g Gen) for_c_stmt(node ast.ForCStmt) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
g.is_vlines_enabled = false
|
g.is_vlines_enabled = false
|
||||||
|
g.inside_for_c_stmt = true
|
||||||
if node.label.len > 0 {
|
if node.label.len > 0 {
|
||||||
g.writeln('$node.label:')
|
g.writeln('$node.label:')
|
||||||
}
|
}
|
||||||
|
@ -1919,6 +1923,7 @@ fn (mut g Gen) for_c_stmt(node ast.ForCStmt) {
|
||||||
}
|
}
|
||||||
g.writeln(') {')
|
g.writeln(') {')
|
||||||
g.is_vlines_enabled = true
|
g.is_vlines_enabled = true
|
||||||
|
g.inside_for_c_stmt = false
|
||||||
g.stmts(node.stmts)
|
g.stmts(node.stmts)
|
||||||
if node.label.len > 0 {
|
if node.label.len > 0 {
|
||||||
g.writeln('${node.label}__continue: {}')
|
g.writeln('${node.label}__continue: {}')
|
||||||
|
|
|
@ -321,3 +321,10 @@ fn test_blank_multi_return() {
|
||||||
assert d == '3'
|
assert d == '3'
|
||||||
assert g == '3'
|
assert g == '3'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_blank_in_for_c_init_stmt() {
|
||||||
|
a := []int{len: 2}
|
||||||
|
for _ := a[1]; a[1] != 0; {
|
||||||
|
}
|
||||||
|
assert true
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue