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

Function make_api_calls

crates/fuzzing/src/oracles/api.rs:7–1333  ·  view source on GitHub ↗

Invoke the given API calls.

(api: ApiCalls)

Source from the content-addressed store, hash-verified

5
6/// Invoke the given API calls.
7pub fn make_api_calls(api: ApiCalls) {
8 // The generator always starts with StoreNew; use its config to build the
9 // shared engine that all stores in this sequence will use.
10 let (engine, gc_enabled) = match api.calls.first() {
11 Some(ApiCall::StoreNew { config, .. }) => (
12 Engine::new(&config.to_wasmtime()).unwrap(),
13 config.module_config.config.gc_enabled,
14 ),
15 _ => return,
16 };
17
18 let mut stores: HashMap<usize, Store<StoreLimits>> = Default::default();
19 let mut modules: HashMap<usize, Module> = Default::default();
20 let mut instances: HashMap<usize, (Instance, usize)> = Default::default();
21 let mut global_types: HashMap<usize, GlobalType> = Default::default();
22 let mut globals: HashMap<usize, (Global, usize)> = Default::default();
23 let mut table_types: HashMap<usize, TableType> = Default::default();
24 let mut tables: HashMap<usize, (Table, usize)> = Default::default();
25 let mut memory_types: HashMap<usize, MemoryType> = Default::default();
26 let mut memories: HashMap<usize, (Memory, usize)> = Default::default();
27 let mut func_types: HashMap<usize, FuncType> = Default::default();
28 let mut funcs: HashMap<usize, (Func, usize)> = Default::default();
29 let mut tag_types: HashMap<usize, TagType> = Default::default();
30 let mut tags: HashMap<usize, (Tag, usize)> = Default::default();
31 let mut struct_types: HashMap<usize, StructType> = Default::default();
32 let mut struct_ref_pres: HashMap<usize, (StructRefPre, StructType, usize)> = Default::default();
33 let mut struct_refs: HashMap<usize, (OwnedRooted<StructRef>, usize)> = Default::default();
34 let mut array_types: HashMap<usize, ArrayType> = Default::default();
35 let mut array_ref_pres: HashMap<usize, (ArrayRefPre, ArrayType, usize)> = Default::default();
36 let mut array_refs: HashMap<usize, (OwnedRooted<ArrayRef>, usize)> = Default::default();
37 let mut exn_types: HashMap<usize, ExnType> = Default::default();
38 let mut exn_ref_pres: HashMap<usize, (ExnRefPre, ExnType, usize)> = Default::default();
39 let mut exn_refs: HashMap<usize, (OwnedRooted<ExnRef>, usize)> = Default::default();
40
41 for call in api.calls {
42 match call {
43 ApiCall::StoreNew { id, config } => {
44 log::trace!("creating store {id}");
45 let mut store = Store::new(&engine, StoreLimits::new());
46 config.configure_store(&mut store);
47 let old = stores.insert(id, store);
48 assert!(old.is_none());
49 }
50
51 ApiCall::StoreDrop { id } => {
52 log::trace!("dropping store {id}");
53 instances.retain(|_, (_, store_id)| *store_id != id);
54 globals.retain(|_, (_, store_id)| *store_id != id);
55 tables.retain(|_, (_, store_id)| *store_id != id);
56 memories.retain(|_, (_, store_id)| *store_id != id);
57 funcs.retain(|_, (_, store_id)| *store_id != id);
58 tags.retain(|_, (_, store_id)| *store_id != id);
59 struct_ref_pres.retain(|_, (_, _, store_id)| *store_id != id);
60 struct_refs.retain(|_, (_, store_id)| *store_id != id);
61 array_ref_pres.retain(|_, (_, _, store_id)| *store_id != id);
62 array_refs.retain(|_, (_, store_id)| *store_id != id);
63 exn_ref_pres.retain(|_, (_, _, store_id)| *store_id != id);
64 exn_refs.retain(|_, (_, store_id)| *store_id != id);

Callers 1

api_callsFunction · 0.85

Calls 15

log_wasmFunction · 0.85
instantiate_with_dummyFunction · 0.85
OkFunction · 0.85
configure_storeMethod · 0.80
into_externMethod · 0.80
mutabilityMethod · 0.80
into_globalMethod · 0.80
ref_Method · 0.80
into_tableMethod · 0.80
into_memoryMethod · 0.80
into_tagMethod · 0.80
collectMethod · 0.80

Tested by

no test coverage detected