cgen: fix assert [1, 2, 3]!.reverse() == [3, 2, 1]! (#22745)

This commit is contained in:
yuyi 2024-11-03 16:00:46 +08:00 committed by GitHub
parent 6c94c24ea8
commit f00d93477c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 1 deletions

View file

@ -27,11 +27,13 @@ fn test_fixed_array_reverse() {
b := a.reverse()
assert a == ['hi', '1', '5', '3']!
assert b == ['3', '5', '1', 'hi']!
assert ['hi', '1', '5', '3']!.reverse() == ['3', '5', '1', 'hi']!
mut nums := [67, -3, 108, 42, 7]!
n := nums.reverse()
assert nums == [67, -3, 108, 42, 7]!
assert n == [7, 42, 108, -3, 67]!
assert [67, -3, 108, 42, 7]!.reverse() == [7, 42, 108, -3, 67]!
mut users := [User{22, 'Peter'}, User{20, 'Bob'}, User{25, 'Alice'}]!
u := users.reverse()
@ -49,4 +51,12 @@ fn test_fixed_array_reverse() {
assert u[0].name == 'Alice'
assert u[1].name == 'Bob'
assert u[2].name == 'Peter'
u2 := [User{22, 'Peter'}, User{20, 'Bob'}, User{25, 'Alice'}]!.reverse()
assert u2[0].age == 25
assert u2[1].age == 20
assert u2[2].age == 22
assert u2[0].name == 'Alice'
assert u2[1].name == 'Bob'
assert u2[2].name == 'Peter'
}

View file

@ -833,7 +833,11 @@ fn (mut g Gen) gen_fixed_array_reverse(node ast.CallExpr) {
atype := g.styp(node.return_type)
g.writeln('${atype} ${past.tmp_var};')
g.write('memcpy(&${past.tmp_var}, &')
if node.left is ast.ArrayInit {
g.fixed_array_init_with_cast(node.left, node.left_type)
} else {
g.expr(node.left)
}
g.writeln(', sizeof(${atype}));')
unsafe {