From fe157db0ceffee3799f7e12d72deb56611d3cab4 Mon Sep 17 00:00:00 2001 From: MatejMagat305 <61238240+MatejMagat305@users.noreply.github.com> Date: Fri, 27 Jan 2023 10:31:03 +0100 Subject: [PATCH] v: support an optional `fn cleanup() {` in each module, to complement the existing optional `fn init() {` (#17119) --- vlib/v/gen/c/cgen.v | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 5783af6f66..ed1dcb59cb 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -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 { if g.has_reflection && mod_name == 'v.reflection' { // ignore v.reflection already initialized above @@ -5359,6 +5361,15 @@ fn (mut g Gen) write_init_function() { 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('}') @@ -5380,6 +5391,9 @@ fn (mut g Gen) write_init_function() { } g.writeln('\tarray_free(&as_cast_type_indexes);') } + for x in cleaning_up_array.reverse() { + g.writeln(x) + } g.writeln('}') if g.pref.printfn_list.len > 0 && '_vcleanup' in g.pref.printfn_list { println(g.out.after(fn_vcleanup_start_pos))