v.gen.c: fix generics array delete (#11429)
parent
ddc62ab0d3
commit
bee5e7de03
|
@ -749,6 +749,18 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
|
||||||
g.expr(node.args[0].expr)
|
g.expr(node.args[0].expr)
|
||||||
g.write('})')
|
g.write('})')
|
||||||
return
|
return
|
||||||
|
} else if left_sym.kind == .array && node.name == 'delete' {
|
||||||
|
g.write('array_delete(')
|
||||||
|
if node.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_] {
|
if left_sym.kind in [.sum_type, .interface_] {
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
struct Set<T> {
|
||||||
|
mut:
|
||||||
|
field []T
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (mut s Set<T>) add<T>(value T) bool {
|
||||||
|
mut result := false
|
||||||
|
|
||||||
|
if value !in s.field {
|
||||||
|
s.field << value
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (mut s Set<T>) remove<T>(value T) bool {
|
||||||
|
mut result := false
|
||||||
|
|
||||||
|
if value in s.field {
|
||||||
|
ndx := s.field.index(value)
|
||||||
|
s.field.delete(ndx)
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_generics_array_delete() {
|
||||||
|
mut set := Set<int>{}
|
||||||
|
|
||||||
|
mut added := set.add(4)
|
||||||
|
println(added)
|
||||||
|
assert added
|
||||||
|
|
||||||
|
added = set.add(3)
|
||||||
|
println(added)
|
||||||
|
assert added
|
||||||
|
|
||||||
|
added = set.add(3)
|
||||||
|
println(added)
|
||||||
|
assert !added
|
||||||
|
|
||||||
|
println(set)
|
||||||
|
mut removed := set.remove(4)
|
||||||
|
println(removed)
|
||||||
|
assert removed
|
||||||
|
}
|
Loading…
Reference in New Issue