builtin: free all elements in a `[]string` with -autofree too
parent
d4e16b6ddd
commit
00651c8deb
|
@ -485,6 +485,17 @@ pub fn (a &array) free() {
|
||||||
C.free(a.data)
|
C.free(a.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[unsafe]
|
||||||
|
pub fn (mut a []string) free() {
|
||||||
|
$if prealloc {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for s in a {
|
||||||
|
unsafe { s.free() }
|
||||||
|
}
|
||||||
|
C.free(a.data)
|
||||||
|
}
|
||||||
|
|
||||||
// str returns a string representation of the array of strings
|
// str returns a string representation of the array of strings
|
||||||
// => '["a", "b", "c"]'.
|
// => '["a", "b", "c"]'.
|
||||||
pub fn (a []string) str() string {
|
pub fn (a []string) str() string {
|
||||||
|
|
|
@ -2642,6 +2642,11 @@ fn (mut g Gen) autofree_variable(v ast.Var) {
|
||||||
// eprintln(' > var name: ${v.name:-20s} | is_arg: ${v.is_arg.str():6} | var type: ${int(v.typ):8} | type_name: ${sym.name:-33s}')
|
// eprintln(' > var name: ${v.name:-20s} | is_arg: ${v.is_arg.str():6} | var type: ${int(v.typ):8} | type_name: ${sym.name:-33s}')
|
||||||
// }
|
// }
|
||||||
if sym.kind == .array {
|
if sym.kind == .array {
|
||||||
|
if sym.has_method('free') {
|
||||||
|
free_method_name := g.typ(v.typ) + '_free'
|
||||||
|
g.autofree_var_call(free_method_name, v)
|
||||||
|
return
|
||||||
|
}
|
||||||
g.autofree_var_call('array_free', v)
|
g.autofree_var_call('array_free', v)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue