@@ -340,67 +340,113 @@ bool rb_abi_guest_rb_set_should_prohibit_rewind(bool value) {
340340 return old ;
341341}
342342
343+ static VALUE rb_abi_export_stage = Qnil ;
344+ static rb_abi_guest_own_rb_abi_value_t rb_abi_export_rb_value_to_js (void ) {
345+ VALUE staged = rb_abi_export_stage ;
346+ rb_abi_export_stage = Qnil ;
347+ rb_abi_lend_object (staged );
348+ return rb_abi_guest_rb_abi_value_new ((void * )staged );
349+ }
350+
351+ void rb_abi_stage_rb_value_to_js (VALUE value ) {
352+ assert (rb_abi_export_stage == Qnil &&
353+ "rb_abi_stage_rb_value_to_js: stage is not empty!?" );
354+ rb_abi_export_stage = value ;
355+ }
356+
343357#ifdef JS_ENABLE_COMPONENT_MODEL
358+
359+ extern void __wasm_call_ctors (void );
360+ static inline void __wasm_call_ctors_if_needed (void ) {
361+ static bool __wasm_call_ctors_done = false;
362+ if (!__wasm_call_ctors_done ) {
363+ __wasm_call_ctors_done = true;
364+ __wasm_call_ctors ();
365+ }
366+ }
367+
344368// Exported Functions from `ruby:js/ruby-runtime`
345369void exports_ruby_js_ruby_runtime_ruby_show_version (void ) {
370+ __wasm_call_ctors_if_needed ();
346371 rb_abi_guest_ruby_show_version ();
347372}
348- void exports_ruby_js_ruby_runtime_ruby_init (void ) { rb_abi_guest_ruby_init (); }
373+ void exports_ruby_js_ruby_runtime_ruby_init (void ) {
374+ __wasm_call_ctors_if_needed ();
375+ rb_abi_guest_ruby_init ();
376+ }
349377void exports_ruby_js_ruby_runtime_ruby_sysinit (ext_list_string_t * args ) {
378+ __wasm_call_ctors_if_needed ();
350379 rb_abi_guest_ruby_sysinit (args );
351380}
352381exports_ruby_js_ruby_runtime_own_rb_iseq_t
353382exports_ruby_js_ruby_runtime_ruby_options (ext_list_string_t * args ) {
383+ __wasm_call_ctors_if_needed ();
354384 return rb_abi_guest_ruby_options (args );
355385}
356386void exports_ruby_js_ruby_runtime_ruby_script (ext_string_t * name ) {
387+ __wasm_call_ctors_if_needed ();
357388 rb_abi_guest_ruby_script (name );
358389}
359390void exports_ruby_js_ruby_runtime_ruby_init_loadpath (void ) {
391+ __wasm_call_ctors_if_needed ();
360392 rb_abi_guest_ruby_init_loadpath ();
361393}
362394void exports_ruby_js_ruby_runtime_rb_eval_string_protect (
363395 ext_string_t * str ,
364396 exports_ruby_js_ruby_runtime_tuple2_own_rb_abi_value_s32_t * ret ) {
397+ __wasm_call_ctors_if_needed ();
365398 rb_abi_guest_rb_eval_string_protect (str , ret );
366399}
367400void exports_ruby_js_ruby_runtime_rb_funcallv_protect (
368401 exports_ruby_js_ruby_runtime_borrow_rb_abi_value_t recv ,
369402 exports_ruby_js_ruby_runtime_rb_id_t mid ,
370403 exports_ruby_js_ruby_runtime_list_borrow_rb_abi_value_t * args ,
371404 exports_ruby_js_ruby_runtime_tuple2_own_rb_abi_value_s32_t * ret ) {
405+ __wasm_call_ctors_if_needed ();
372406 rb_abi_guest_rb_funcallv_protect (recv , mid , args , ret );
373407}
374408exports_ruby_js_ruby_runtime_rb_id_t
375409exports_ruby_js_ruby_runtime_rb_intern (ext_string_t * name ) {
410+ __wasm_call_ctors_if_needed ();
376411 return rb_abi_guest_rb_intern (name );
377412}
378413exports_ruby_js_ruby_runtime_own_rb_abi_value_t
379414exports_ruby_js_ruby_runtime_rb_errinfo (void ) {
415+ __wasm_call_ctors_if_needed ();
380416 return rb_abi_guest_rb_errinfo ();
381417}
382418void exports_ruby_js_ruby_runtime_rb_clear_errinfo (void ) {
419+ __wasm_call_ctors_if_needed ();
383420 rb_abi_guest_rb_clear_errinfo ();
384421}
385422void exports_ruby_js_ruby_runtime_rstring_ptr (
386423 exports_ruby_js_ruby_runtime_borrow_rb_abi_value_t value ,
387424 ext_string_t * ret ) {
425+ __wasm_call_ctors_if_needed ();
388426 rb_abi_guest_rstring_ptr (value , ret );
389427}
390428void exports_ruby_js_ruby_runtime_rb_vm_bugreport (void ) {
429+ __wasm_call_ctors_if_needed ();
391430 rb_abi_guest_rb_vm_bugreport ();
392431}
393432bool exports_ruby_js_ruby_runtime_rb_gc_enable (void ) {
433+ __wasm_call_ctors_if_needed ();
394434 return rb_abi_guest_rb_gc_enable ();
395435}
396436bool exports_ruby_js_ruby_runtime_rb_gc_disable (void ) {
437+ __wasm_call_ctors_if_needed ();
397438 return rb_abi_guest_rb_gc_disable ();
398439}
399440bool exports_ruby_js_ruby_runtime_rb_set_should_prohibit_rewind (
400441 bool new_value ) {
442+ __wasm_call_ctors_if_needed ();
401443 return rb_abi_guest_rb_set_should_prohibit_rewind (new_value );
402444}
403-
445+ exports_ruby_js_ruby_runtime_own_rb_abi_value_t
446+ exports_ruby_js_ruby_runtime_export_rb_value_to_js (void ) {
447+ __wasm_call_ctors_if_needed ();
448+ return rb_abi_export_rb_value_to_js ();
449+ }
404450#endif
405451
406452void Init_witapi (void ) {}
0 commit comments