MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / register

Method register

crates/wasmtime/src/runtime/module/registry.rs:245–309  ·  view source on GitHub ↗

Registers a new module with the registry.

(
        &mut self,
        module_or_component: ModuleOrComponent<'_>,
        engine: &Engine,
        breakpoint_state: RegisterBreakpointState,
    )

Source from the content-addressed store, hash-verified

243
244 /// Registers a new module with the registry.
245 fn register(
246 &mut self,
247 module_or_component: ModuleOrComponent<'_>,
248 engine: &Engine,
249 breakpoint_state: RegisterBreakpointState,
250 ) -> Result<Option<RegisteredModuleId>> {
251 let compiled_id = match module_or_component {
252 ModuleOrComponent::Module(module) => module.id(),
253 #[cfg(feature = "component-model")]
254 ModuleOrComponent::Component(component) => component.id(),
255 };
256 let code = match module_or_component {
257 ModuleOrComponent::Module(module) => module.engine_code(),
258 #[cfg(feature = "component-model")]
259 ModuleOrComponent::Component(component) => component.engine_code(),
260 };
261 // Register the module, if any.
262 let id = match module_or_component {
263 ModuleOrComponent::Module(module) => {
264 let id = RegisteredModuleId(compiled_id);
265 self.modules.entry(id).or_insert_with(|| module.clone())?;
266 Some(id)
267 }
268 #[cfg(feature = "component-model")]
269 ModuleOrComponent::Component(_) => None,
270 };
271
272 // Create a StoreCode if one does not already exist.
273 let store_code_pc = match self.store_code.entry(code.text_range().start) {
274 Entry::Vacant(v) => {
275 let store_code = StoreCode::new(engine, code)?;
276 let store_code_pc = store_code.text_range().start;
277 assert_no_overlap(&self.loaded_code, store_code.text_range());
278 let index = match module_or_component {
279 ModuleOrComponent::Module(module) => module.index(),
280 #[cfg(feature = "component-model")]
281 ModuleOrComponent::Component(component) => component.index(),
282 };
283 self.loaded_code.insert(
284 store_code_pc,
285 LoadedCode {
286 code: store_code,
287 index: index.clone(),
288 modules: Default::default(),
289 },
290 )?;
291 *v.insert(store_code_pc)?
292 }
293 Entry::Occupied(o) => *o.get(),
294 };
295
296 // Add this module to the LoadedCode if not present.
297 if let (ModuleOrComponent::Module(module), Some(id)) = (module_or_component, id) {
298 let loaded_code = self
299 .loaded_code
300 .get_mut(store_code_pc)
301 .expect("loaded_code must have entry for StoreCodePC");
302 loaded_code

Callers 2

register_moduleMethod · 0.45
register_componentMethod · 0.45

Calls 15

RegisteredModuleIdClass · 0.85
OkFunction · 0.85
or_insert_withMethod · 0.80
text_rangeMethod · 0.80
assert_no_overlapFunction · 0.70
newFunction · 0.50
idMethod · 0.45
engine_codeMethod · 0.45
entryMethod · 0.45
cloneMethod · 0.45
indexMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected