mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
v: support an optional fn cleanup() {
in each module, to complement the existing optional fn init() {
(#17119)
This commit is contained in:
parent
a9a04bba55
commit
fe157db0ce
@ -5330,6 +5330,8 @@ fn (mut g Gen) write_init_function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mut cleaning_up_array := []string{cap: g.table.modules.len}
|
||||||
|
|
||||||
for mod_name in g.table.modules {
|
for mod_name in g.table.modules {
|
||||||
if g.has_reflection && mod_name == 'v.reflection' {
|
if g.has_reflection && mod_name == 'v.reflection' {
|
||||||
// ignore v.reflection already initialized above
|
// ignore v.reflection already initialized above
|
||||||
@ -5359,6 +5361,15 @@ fn (mut g Gen) write_init_function() {
|
|||||||
g.writeln('\t${init_fn_c_name}();')
|
g.writeln('\t${init_fn_c_name}();')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cleanup_fn_name := '${mod_name}.cleanup'
|
||||||
|
if cleanupfn := g.table.find_fn(cleanup_fn_name) {
|
||||||
|
if cleanupfn.return_type == ast.void_type && cleanupfn.params.len == 0 {
|
||||||
|
mod_c_name := util.no_dots(mod_name)
|
||||||
|
cleanup_fn_c_name := '${mod_c_name}__cleanup'
|
||||||
|
cleaning_up_array << '\t${cleanup_fn_c_name}();'
|
||||||
|
cleaning_up_array << '\t// Cleaning up for module ${mod_name}'
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
@ -5380,6 +5391,9 @@ fn (mut g Gen) write_init_function() {
|
|||||||
}
|
}
|
||||||
g.writeln('\tarray_free(&as_cast_type_indexes);')
|
g.writeln('\tarray_free(&as_cast_type_indexes);')
|
||||||
}
|
}
|
||||||
|
for x in cleaning_up_array.reverse() {
|
||||||
|
g.writeln(x)
|
||||||
|
}
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
if g.pref.printfn_list.len > 0 && '_vcleanup' in g.pref.printfn_list {
|
if g.pref.printfn_list.len > 0 && '_vcleanup' in g.pref.printfn_list {
|
||||||
println(g.out.after(fn_vcleanup_start_pos))
|
println(g.out.after(fn_vcleanup_start_pos))
|
||||||
|
Loading…
Reference in New Issue
Block a user