cgen: fix error for cross assign of the reserved name variable

pull/13884/head
yuyi98 2022-03-31 12:12:59 +08:00
parent 6137ce23c0
commit 9ed82305f1
2 changed files with 23 additions and 2 deletions

View File

@ -584,10 +584,10 @@ fn (mut g Gen) gen_cross_var_assign(node &ast.AssignStmt) {
left_sym := g.table.sym(left_typ)
if left_sym.kind == .function {
g.write_fn_ptr_decl(left_sym.info as ast.FnType, '_var_$left.pos.pos')
g.writeln(' = $left.name;')
g.writeln(' = ${c_name(left.name)};')
} else {
styp := g.typ(left_typ)
g.writeln('$styp _var_$left.pos.pos = $left.name;')
g.writeln('$styp _var_$left.pos.pos = ${c_name(left.name)};')
}
}
ast.IndexExpr {

View File

@ -168,3 +168,24 @@ fn test_cross_assign_of_big_int() {
println(a)
assert a == big.one_int
}
fn test_cross_assign_of_reserved_name_variable() {
mut small := 1
mut big := 2
mut sum := 2
for big < 4_000_000 {
small, big = big, small + big
if big % 2 == 0 {
sum += big
}
}
println(small)
assert small == 3524578
println(big)
assert big == 5702887
println(sum)
assert sum == 4613732
}