v2 / vlib / v / gen / c / testdata / free_array_of_strings.vv
32 lines · 29 sloc · 710 bytes · 5439ff9cdebb3072a015cc0166206e90d6c1034a
Raw
1fn ii() int {
2 return 42
3}
4
5fn ss() string {
6 return ii().str()
7}
8
9@[manualfree]
10fn ffff() {
11 mut my_array_of_strings := []string{cap: 10}
12 my_array_of_strings << 'start'
13 mystring := ss()
14 if mystring.len > 0 {
15 my_array_of_strings << mystring
16 }
17 sa := my_array_of_strings.join(',')
18 println(sa)
19 unsafe {
20 sa.free()
21 mystring.free()
22 // The following SHOULD NOT generate the general `array_free(&my_array_of_strings);` .
23 // Instead, it SHOULD generate the more specific `Array_string_free(&my_array_of_strings);` !
24 // That more specific version, makes sure, that all the element strings are freed,
25 // before the array itself is also freed.
26 my_array_of_strings.free()
27 }
28}
29
30fn main() {
31 ffff()
32}
33