v.gen.c: initialize closures in shared library mode (#20630)

This commit is contained in:
Pierre Curto 2024-01-22 18:01:53 +01:00 committed by GitHub
parent 9e8a159743
commit 8f10326b6f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 14 additions and 1 deletions

View File

@ -6191,6 +6191,9 @@ fn (mut g Gen) write_init_function() {
}
g.writeln('void _vinit_caller() {')
g.writeln('\tstatic bool once = false; if (once) {return;} once = true;')
if g.nr_closures > 0 {
g.writeln('\t__closure_init(); // vinit_caller()')
}
g.writeln('\t_vinit(0,0);')
g.writeln('}')

View File

@ -98,7 +98,7 @@ fn (mut g Gen) gen_c_main_function_header() {
g.writeln('\tg_main_argc = ___argc;')
g.writeln('\tg_main_argv = ___argv;')
if g.nr_closures > 0 {
g.writeln('__closure_init();')
g.writeln('\t__closure_init(); // main()')
}
}

View File

@ -0,0 +1,2 @@
__closure_init(); // vinit_caller()
__closure_init(); // main()

View File

@ -0,0 +1,8 @@
// vtest vflags: -shared
@[export: 'foo']
fn show_foo(s &char) {
my_fn := fn [s] () {
_ = s
}
my_fn()
}