MCPcopy Create free account
hub / github.com/bytecodealliance/wit-bindgen / write_moon_pkg

Method write_moon_pkg

crates/moonbit/src/lib.rs:165–218  ·  view source on GitHub ↗
(&self, moon_pkg: &mut Source, imports: Option<&Imports>, link: bool)

Source from the content-addressed store, hash-verified

163 }
164
165 fn write_moon_pkg(&self, moon_pkg: &mut Source, imports: Option<&Imports>, link: bool) {
166 // Disable warning for invalid inline wasm
167 moon_pkg.push_str("{\n\"warn-list\": \"-44\"");
168 // Dependencies
169 if let Some(imports) = imports {
170 moon_pkg.push_str(",\n\"import\": [\n");
171 moon_pkg.indent(1);
172 let mut deps = imports
173 .packages
174 .iter()
175 .map(|(k, v)| {
176 format!(
177 "{{ \"path\" : \"{}/{}\", \"alias\" : \"{}\" }}",
178 self.project_name,
179 k.replace(".", "/"),
180 v
181 )
182 })
183 .collect::<Vec<_>>();
184 deps.sort();
185 uwrite!(moon_pkg, "{}", deps.join(",\n"));
186 moon_pkg.deindent(1);
187 moon_pkg.push_str("\n]");
188 }
189 // Link target
190 if link {
191 let memory_name = self.pkg_resolver.resolve.wasm_export_name(
192 ManglingAndAbi::Legacy(LiftLowerAbi::Sync),
193 WasmExport::Memory,
194 );
195 moon_pkg.push_str(",\n\"link\": {\n\"wasm\": {\n");
196 moon_pkg.push_str(&format!("\"export-memory-name\": \"{memory_name}\",\n"));
197 moon_pkg.push_str("\"heap-start-address\": 16,\n");
198 moon_pkg.push_str("\"exports\": [\n");
199 moon_pkg.indent(1);
200 let mut exports = self
201 .export
202 .iter()
203 .map(|(export_name, (func_name, _))| format!("\"{func_name}:{export_name}\""))
204 .collect::<Vec<_>>();
205 exports.push(format!(
206 "\"mbt_ffi_cabi_realloc:{}\"",
207 self.pkg_resolver.resolve.wasm_export_name(
208 ManglingAndAbi::Legacy(LiftLowerAbi::Sync),
209 WasmExport::Realloc,
210 ),
211 ));
212 exports.sort();
213 uwrite!(moon_pkg, "{}", exports.join(",\n"));
214 moon_pkg.deindent(1);
215 moon_pkg.push_str("\n]\n}\n}\n");
216 }
217 moon_pkg.push_str("\n}\n");
218 }
219}
220
221/// World generator implementation for MoonBit.

Callers 5

import_interfaceMethod · 0.80
finish_importsMethod · 0.80
export_interfaceMethod · 0.80
export_funcsMethod · 0.80
finishMethod · 0.80

Calls 6

indentMethod · 0.80
mapMethod · 0.80
deindentMethod · 0.80
push_strMethod · 0.45
iterMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected