MCPcopy Create free account
hub / github.com/WasmEdge/WasmEdge / loadCoreInstance

Method loadCoreInstance

lib/loader/ast/component/component_instance.cpp:9–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7namespace Loader {
8
9Expect<void> Loader::loadCoreInstance(AST::Component::CoreInstance &Instance) {
10 auto ReportError = [this](auto E) {
11 return logLoadError(E, FMgr.getLastOffset(),
12 ASTNodeAttr::Comp_CoreInstance);
13 };
14 // core:instance ::= ie:<core:instanceexpr>
15 // => (instance ie)
16 // core:instanceexpr ::= 0x00 m:<moduleidx> arg*:vec(<core:instantiatearg>)
17 // => (instantiate m arg*)
18 // | 0x01 e*:vec(<core:inlineexport>)
19 // => e*
20
21 auto LoadInstArg =
22 [this](AST::Component::InstantiateArg<uint32_t> &Arg) -> Expect<void> {
23 auto ReportArgError = [this](auto E) {
24 return logLoadError(E, FMgr.getLastOffset(),
25 ASTNodeAttr::Comp_CoreInstanceArg);
26 };
27 // core:instantiatearg ::= n:<core:name> 0x12 i:<instanceidx>
28 // => (with n (instance i))
29 EXPECTED_TRY(Arg.getName(), FMgr.readName().map_error(ReportArgError));
30 EXPECTED_TRY(uint8_t B, FMgr.readByte().map_error(ReportArgError));
31 if (B != 0x12U) {
32 return ReportArgError(ErrCode::Value::MalformedCoreInstance);
33 }
34 EXPECTED_TRY(Arg.getIndex(), FMgr.readU32().map_error(ReportArgError));
35 return {};
36 };
37
38 auto LoadInlineExp =
39 [this](AST::Component::InlineExport &Exp) -> Expect<void> {
40 // core:inlineexport ::= n:<core:name> si:<core:sortidx> => (export n si)
41 EXPECTED_TRY(Exp.getName(), FMgr.readName().map_error([this](auto E) {
42 return logLoadError(E, FMgr.getLastOffset(),
43 ASTNodeAttr::Comp_CoreInlineExport);
44 }));
45 return loadSortIndex(Exp.getSortIdx(), true).map_error([](auto E) {
46 spdlog::error(ErrInfo::InfoAST(ASTNodeAttr::Comp_CoreInlineExport));
47 return E;
48 });
49 };
50
51 EXPECTED_TRY(uint8_t Flag, FMgr.readByte().map_error(ReportError));
52 switch (Flag) {
53 case 0x00: {
54 EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError));
55 std::vector<AST::Component::InstantiateArg<uint32_t>> Args;
56 EXPECTED_TRY(loadVec<AST::Component::CoreInstance>(Args, LoadInstArg));
57 Instance.setInstantiateArgs(Idx, std::move(Args));
58 return {};
59 }
60 case 0x01: {
61 std::vector<AST::Component::InlineExport> Exports;
62 EXPECTED_TRY(loadVec<AST::Component::CoreInstance>(Exports, LoadInlineExp));
63 Instance.setInlineExports(std::move(Exports));
64 return {};
65 }
66 default:

Callers

nothing calls this directly

Calls 10

InfoASTClass · 0.85
getLastOffsetMethod · 0.80
readNameMethod · 0.80
readU32Method · 0.80
EXPECTED_TRYFunction · 0.70
errorFunction · 0.50
getNameMethod · 0.45
getIndexMethod · 0.45
setInstantiateArgsMethod · 0.45
setInlineExportsMethod · 0.45

Tested by

no test coverage detected