(
&mut self,
func: &Function,
ty: &str,
path_to_self: &str,
async_: bool,
)
| 1218 | } |
| 1219 | |
| 1220 | fn generate_raw_cabi_export( |
| 1221 | &mut self, |
| 1222 | func: &Function, |
| 1223 | ty: &str, |
| 1224 | path_to_self: &str, |
| 1225 | async_: bool, |
| 1226 | ) { |
| 1227 | let name_snake = func.name.to_snake_case().replace('.', "_"); |
| 1228 | let wasm_module_export_name = match self.identifier { |
| 1229 | Identifier::Interface(_, key) => Some(self.resolve.name_world_key(key)), |
| 1230 | Identifier::World(_) => None, |
| 1231 | Identifier::StreamOrFuturePayload => unreachable!(), |
| 1232 | }; |
| 1233 | let export_prefix = self.r#gen.opts.export_prefix.as_deref().unwrap_or(""); |
| 1234 | let export_name = func.legacy_core_export_name(wasm_module_export_name.as_deref()); |
| 1235 | let export_name = if async_ { |
| 1236 | format!("[async-lift]{export_name}") |
| 1237 | } else { |
| 1238 | export_name.to_string() |
| 1239 | }; |
| 1240 | uwrite!( |
| 1241 | self.src, |
| 1242 | "\ |
| 1243 | #[unsafe(export_name = \"{export_prefix}{export_name}\")] |
| 1244 | unsafe extern \"C\" fn export_{name_snake}\ |
| 1245 | ", |
| 1246 | ); |
| 1247 | |
| 1248 | let params = self.print_export_sig(func, async_); |
| 1249 | self.push_str(" {\n"); |
| 1250 | uwriteln!( |
| 1251 | self.src, |
| 1252 | "unsafe {{ {path_to_self}::_export_{name_snake}_cabi::<{ty}>({}) }}", |
| 1253 | params.join(", ") |
| 1254 | ); |
| 1255 | self.push_str("}\n"); |
| 1256 | |
| 1257 | let export_prefix = self.r#gen.opts.export_prefix.as_deref().unwrap_or(""); |
| 1258 | if async_ { |
| 1259 | uwrite!( |
| 1260 | self.src, |
| 1261 | "\ |
| 1262 | #[unsafe(export_name = \"{export_prefix}[callback]{export_name}\")] |
| 1263 | unsafe extern \"C\" fn _callback_{name_snake}(event0: u32, event1: u32, event2: u32) -> u32 {{ |
| 1264 | unsafe {{ |
| 1265 | {path_to_self}::__callback_{name_snake}(event0, event1, event2) |
| 1266 | }} |
| 1267 | }} |
| 1268 | " |
| 1269 | ); |
| 1270 | } else if abi::guest_export_needs_post_return(self.resolve, func) { |
| 1271 | uwrite!( |
| 1272 | self.src, |
| 1273 | "\ |
| 1274 | #[unsafe(export_name = \"{export_prefix}cabi_post_{export_name}\")] |
| 1275 | unsafe extern \"C\" fn _post_return_{name_snake}\ |
| 1276 | " |
| 1277 | ); |
no test coverage detected