1
1
#include <stdlib.h>
2
2
#include <rb-abi-guest.h>
3
3
4
- __attribute__((weak , export_name ("canonical_abi_realloc " )))
5
- void * canonical_abi_realloc (
4
+ __attribute__((weak , export_name ("cabi_realloc " )))
5
+ void * cabi_realloc (
6
6
void * ptr ,
7
7
size_t orig_size ,
8
8
size_t org_align ,
@@ -14,15 +14,6 @@ size_t new_size
14
14
return ret ;
15
15
}
16
16
17
- __attribute__((weak , export_name ("canonical_abi_free" )))
18
- void canonical_abi_free (
19
- void * ptr ,
20
- size_t size ,
21
- size_t align
22
- ) {
23
- free (ptr );
24
- }
25
-
26
17
__attribute__((import_module ("canonical_abi" ), import_name ("resource_drop_rb-iseq" )))
27
18
void __resource_rb_iseq_drop (uint32_t idx );
28
19
@@ -99,103 +90,114 @@ void rb_abi_guest_string_set(rb_abi_guest_string_t *ret, const char *s) {
99
90
100
91
void rb_abi_guest_string_dup (rb_abi_guest_string_t * ret , const char * s ) {
101
92
ret -> len = strlen (s );
102
- ret -> ptr = canonical_abi_realloc (NULL , 0 , 1 , ret -> len );
93
+ ret -> ptr = cabi_realloc (NULL , 0 , 1 , ret -> len );
103
94
memcpy (ret -> ptr , s , ret -> len );
104
95
}
105
96
106
97
void rb_abi_guest_string_free (rb_abi_guest_string_t * ret ) {
107
- canonical_abi_free (ret -> ptr , ret -> len , 1 );
98
+ if (ret -> len > 0 ) {
99
+ free (ret -> ptr );
100
+ }
108
101
ret -> ptr = NULL ;
109
102
ret -> len = 0 ;
110
103
}
111
104
void rb_abi_guest_list_string_free (rb_abi_guest_list_string_t * ptr ) {
112
105
for (size_t i = 0 ; i < ptr -> len ; i ++ ) {
113
106
rb_abi_guest_string_free (& ptr -> ptr [i ]);
114
107
}
115
- canonical_abi_free (ptr -> ptr , ptr -> len * 8 , 4 );
108
+ if (ptr -> len > 0 ) {
109
+ free (ptr -> ptr );
110
+ }
111
+ }
112
+ void rb_abi_guest_tuple2_rb_abi_value_s32_free (rb_abi_guest_tuple2_rb_abi_value_s32_t * ptr ) {
113
+ rb_abi_guest_rb_abi_value_free (& ptr -> f0 );
116
114
}
117
- typedef struct {
118
- rb_abi_guest_rb_abi_value_t f0 ;
119
- int32_t f1 ;
120
- } rb_abi_guest_tuple2_rb_abi_value_s32_t ;
121
115
void rb_abi_guest_list_rb_abi_value_free (rb_abi_guest_list_rb_abi_value_t * ptr ) {
122
116
for (size_t i = 0 ; i < ptr -> len ; i ++ ) {
123
117
rb_abi_guest_rb_abi_value_free (& ptr -> ptr [i ]);
124
118
}
125
- canonical_abi_free (ptr -> ptr , ptr -> len * 4 , 4 );
119
+ if (ptr -> len > 0 ) {
120
+ free (ptr -> ptr );
121
+ }
126
122
}
127
- static int64_t RET_AREA [2 ];
128
- __attribute__((export_name ("ruby-show-version" )))
123
+
124
+ __attribute__((aligned (4 )))
125
+ static uint8_t RET_AREA [8 ];
126
+ __attribute__((export_name ("ruby-show-version: func() -> ()" )))
129
127
void __wasm_export_rb_abi_guest_ruby_show_version (void ) {
130
128
rb_abi_guest_ruby_show_version ();
131
129
}
132
- __attribute__((export_name ("ruby-init" )))
130
+ __attribute__((export_name ("ruby-init: func() -> () " )))
133
131
void __wasm_export_rb_abi_guest_ruby_init (void ) {
134
132
rb_abi_guest_ruby_init ();
135
133
}
136
- __attribute__((export_name ("ruby-sysinit" )))
134
+ __attribute__((export_name ("ruby-sysinit: func(args: list<string>) -> () " )))
137
135
void __wasm_export_rb_abi_guest_ruby_sysinit (int32_t arg , int32_t arg0 ) {
138
136
rb_abi_guest_list_string_t arg1 = (rb_abi_guest_list_string_t ) { (rb_abi_guest_string_t * )(arg ), (size_t )(arg0 ) };
139
137
rb_abi_guest_ruby_sysinit (& arg1 );
140
138
}
141
- __attribute__((export_name ("ruby-options" )))
139
+ __attribute__((export_name ("ruby-options: func(args: list<string>) -> handle<rb-iseq> " )))
142
140
int32_t __wasm_export_rb_abi_guest_ruby_options (int32_t arg , int32_t arg0 ) {
143
141
rb_abi_guest_list_string_t arg1 = (rb_abi_guest_list_string_t ) { (rb_abi_guest_string_t * )(arg ), (size_t )(arg0 ) };
144
142
rb_abi_guest_rb_iseq_t ret = rb_abi_guest_ruby_options (& arg1 );
145
143
return (ret ).idx ;
146
144
}
147
- __attribute__((export_name ("ruby-script" )))
145
+ __attribute__((export_name ("ruby-script: func(name: string) -> () " )))
148
146
void __wasm_export_rb_abi_guest_ruby_script (int32_t arg , int32_t arg0 ) {
149
147
rb_abi_guest_string_t arg1 = (rb_abi_guest_string_t ) { (char * )(arg ), (size_t )(arg0 ) };
150
148
rb_abi_guest_ruby_script (& arg1 );
151
149
}
152
- __attribute__((export_name ("ruby-init-loadpath" )))
150
+ __attribute__((export_name ("ruby-init-loadpath: func() -> () " )))
153
151
void __wasm_export_rb_abi_guest_ruby_init_loadpath (void ) {
154
152
rb_abi_guest_ruby_init_loadpath ();
155
153
}
156
- __attribute__((export_name ("rb-eval-string-protect" )))
154
+ __attribute__((export_name ("rb-eval-string-protect: func(str: string) -> tuple<handle<rb-abi-value>, s32> " )))
157
155
int32_t __wasm_export_rb_abi_guest_rb_eval_string_protect (int32_t arg , int32_t arg0 ) {
158
156
rb_abi_guest_string_t arg1 = (rb_abi_guest_string_t ) { (char * )(arg ), (size_t )(arg0 ) };
159
- rb_abi_guest_rb_abi_value_t ret ;
160
- int32_t ret2 ;
161
- rb_abi_guest_rb_eval_string_protect (& arg1 , & ret , & ret2 );
157
+ rb_abi_guest_tuple2_rb_abi_value_s32_t ret ;
158
+ rb_abi_guest_rb_eval_string_protect (& arg1 , & ret );
162
159
int32_t ptr = (int32_t ) & RET_AREA ;
163
- * ((int32_t * )(ptr + 8 )) = ((rb_abi_guest_tuple2_rb_abi_value_s32_t ){ ret , ret2 }). f1 ;
164
- * ((int32_t * )(ptr + 0 )) = ((( rb_abi_guest_tuple2_rb_abi_value_s32_t ){ ret , ret2 }). f0 ). idx ;
160
+ * ((int32_t * )(ptr + 0 )) = ((ret ). f0 ). idx ;
161
+ * ((int32_t * )(ptr + 4 )) = (ret ). f1 ;
165
162
return ptr ;
166
163
}
167
- __attribute__((export_name ("rb-funcallv-protect" )))
164
+ __attribute__((export_name ("rb-funcallv-protect: func(recv: handle<rb-abi-value>, mid: u32, args: list<handle<rb-abi-value>>) -> tuple<handle<rb-abi-value>, s32> " )))
168
165
int32_t __wasm_export_rb_abi_guest_rb_funcallv_protect (int32_t arg , int32_t arg0 , int32_t arg1 , int32_t arg2 ) {
169
166
rb_abi_guest_list_rb_abi_value_t arg3 = (rb_abi_guest_list_rb_abi_value_t ) { (rb_abi_guest_rb_abi_value_t * )(arg1 ), (size_t )(arg2 ) };
170
- rb_abi_guest_rb_abi_value_t ret ;
171
- int32_t ret4 ;
172
- rb_abi_guest_rb_funcallv_protect ((rb_abi_guest_rb_abi_value_t ){ arg }, (uint32_t ) (arg0 ), & arg3 , & ret , & ret4 );
167
+ rb_abi_guest_tuple2_rb_abi_value_s32_t ret ;
168
+ rb_abi_guest_rb_funcallv_protect ((rb_abi_guest_rb_abi_value_t ){ arg }, (uint32_t ) (arg0 ), & arg3 , & ret );
173
169
int32_t ptr = (int32_t ) & RET_AREA ;
174
- * ((int32_t * )(ptr + 8 )) = ((rb_abi_guest_tuple2_rb_abi_value_s32_t ){ ret , ret4 }). f1 ;
175
- * ((int32_t * )(ptr + 0 )) = ((( rb_abi_guest_tuple2_rb_abi_value_s32_t ){ ret , ret4 }). f0 ). idx ;
170
+ * ((int32_t * )(ptr + 0 )) = ((ret ). f0 ). idx ;
171
+ * ((int32_t * )(ptr + 4 )) = (ret ). f1 ;
176
172
return ptr ;
177
173
}
178
- __attribute__((export_name ("rb-intern" )))
174
+ __attribute__((export_name ("rb-intern: func(name: string) -> u32 " )))
179
175
int32_t __wasm_export_rb_abi_guest_rb_intern (int32_t arg , int32_t arg0 ) {
180
176
rb_abi_guest_string_t arg1 = (rb_abi_guest_string_t ) { (char * )(arg ), (size_t )(arg0 ) };
181
177
rb_abi_guest_rb_id_t ret = rb_abi_guest_rb_intern (& arg1 );
182
178
return (int32_t ) (ret );
183
179
}
184
- __attribute__((export_name ("rb-errinfo" )))
180
+ __attribute__((export_name ("rb-errinfo: func() -> handle<rb-abi-value> " )))
185
181
int32_t __wasm_export_rb_abi_guest_rb_errinfo (void ) {
186
182
rb_abi_guest_rb_abi_value_t ret = rb_abi_guest_rb_errinfo ();
187
183
return (ret ).idx ;
188
184
}
189
- __attribute__((export_name ("rb-clear-errinfo" )))
185
+ __attribute__((export_name ("rb-clear-errinfo: func() -> () " )))
190
186
void __wasm_export_rb_abi_guest_rb_clear_errinfo (void ) {
191
187
rb_abi_guest_rb_clear_errinfo ();
192
188
}
193
- __attribute__((export_name ("rstring-ptr" )))
189
+ __attribute__((export_name ("rstring-ptr: func(value: handle<rb-abi-value>) -> string " )))
194
190
int32_t __wasm_export_rb_abi_guest_rstring_ptr (int32_t arg ) {
195
191
rb_abi_guest_string_t ret ;
196
192
rb_abi_guest_rstring_ptr ((rb_abi_guest_rb_abi_value_t ){ arg }, & ret );
197
193
int32_t ptr = (int32_t ) & RET_AREA ;
198
- * ((int32_t * )(ptr + 8 )) = (int32_t ) (ret ).len ;
194
+ * ((int32_t * )(ptr + 4 )) = (int32_t ) (ret ).len ;
199
195
* ((int32_t * )(ptr + 0 )) = (int32_t ) (ret ).ptr ;
200
196
return ptr ;
201
197
}
198
+ __attribute__((export_name ("cabi_post_rstring-ptr" )))
199
+ void __wasm_export_rb_abi_guest_rstring_ptr_post_return (int32_t arg0 ) {
200
+ if ((* ((int32_t * ) (arg0 + 4 ))) > 0 ) {
201
+ free ((void * ) (* ((int32_t * ) (arg0 + 0 ))));
202
+ }
203
+ }
0 commit comments