Skip to content

Commit

Permalink
cgen: fix generics array delete (#16794)
Browse files Browse the repository at this point in the history
  • Loading branch information
Delta456 committed Dec 28, 2022
1 parent 4718a81 commit ad9ca34
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
20 changes: 20 additions & 0 deletions vlib/v/gen/c/fn.v
Expand Up @@ -959,6 +959,26 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
g.expr(node.args[0].expr)
g.write(')')
return
} else if left_sym.kind == .array && node.name == 'drop' {
g.write('array_drop(')
if left_type.has_flag(.shared_f) {
if left_type.is_ptr() {
g.write('&')
}
g.expr(node.left)
g.write('->val')
} else {
if left_type.is_ptr() {
g.expr(node.left)
} else {
g.write('&')
g.expr(node.left)
}
}
g.write(', ')
g.expr(node.args[0].expr)
g.write(')')
return
}

if left_sym.kind in [.sum_type, .interface_] {
Expand Down
11 changes: 11 additions & 0 deletions vlib/v/tests/generics_array_drop_test.v
@@ -0,0 +1,11 @@
fn shift[T](mut a []T) T {
res := a.first()
a.drop(1)
return res
}

fn test_generic_array_drop() {
mut a := ['x', 'y']
assert shift(mut a) == 'x' // 'x'
assert a == ['y'] // ['y']
}

0 comments on commit ad9ca34

Please sign in to comment.