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

Function main

examples/externref.cc:16–59  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14}
15
16int main() {
17 std::cout << "Initializing...\n";
18 Engine engine;
19 Store store(engine);
20
21 std::cout << "Compiling module...\n";
22 auto wat = readFile("examples/externref.wat");
23 Module module = Module::compile(engine, wat).unwrap();
24 std::cout << "Instantiating module...\n";
25 Instance instance = Instance::create(store, module, {}).unwrap();
26
27 ExternRef externref(store, std::string("Hello, world!"));
28 std::any &data = externref.data(store);
29 std::cout << "externref data: " << std::any_cast<std::string>(data) << "\n";
30
31 std::cout << "Touching `externref` table..\n";
32 Table table = std::get<Table>(*instance.get(store, "table"));
33 table.set(store, 3, externref).unwrap();
34 ExternRef val = *table.get(store, 3)->externref();
35 std::cout << "externref data: " << std::any_cast<std::string>(val.data(store))
36 << "\n";
37
38 std::cout << "Touching `externref` global..\n";
39 Global global = std::get<Global>(*instance.get(store, "global"));
40 global.set(store, externref).unwrap();
41 val = *global.get(store).externref();
42 std::cout << "externref data: " << std::any_cast<std::string>(val.data(store))
43 << "\n";
44
45 std::cout << "Calling `externref` func..\n";
46 Func func = std::get<Func>(*instance.get(store, "func"));
47 auto results = func.call(store, {externref}).unwrap();
48 val = *results[0].externref();
49 std::cout << "externref data: " << std::any_cast<std::string>(val.data(store))
50 << "\n";
51
52 std::cout << "Running a gc..\n";
53 if (!store.context().gc()) {
54 std::cerr << "> Error while collecting garbage\n";
55 return 1;
56 }
57
58 return 0;
59}

Callers

nothing calls this directly

Calls 11

readFileFunction · 0.70
compileFunction · 0.50
createFunction · 0.50
unwrapMethod · 0.45
dataMethod · 0.45
getMethod · 0.45
setMethod · 0.45
externrefMethod · 0.45
callMethod · 0.45
gcMethod · 0.45
contextMethod · 0.45

Tested by

no test coverage detected