/src/WasmEdge/lib/loader/ast/component/component_alias.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // SPDX-License-Identifier: Apache-2.0 |
2 | | // SPDX-FileCopyrightText: 2019-2024 Second State INC |
3 | | |
4 | | #include "loader/loader.h" |
5 | | |
6 | | namespace WasmEdge { |
7 | | namespace Loader { |
8 | | |
9 | 0 | Expect<void> Loader::loadAlias(AST::Component::Alias &Alias) { |
10 | 0 | auto ReportError = [this](auto E) { |
11 | 0 | return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
12 | 0 | }; |
13 | | // alias ::= s:<sort> t:<aliastarget> => (alias t (s)) |
14 | |
|
15 | 0 | EXPECTED_TRY(loadSort(Alias.getSort()).map_error(ReportError)); |
16 | 0 | EXPECTED_TRY(loadAliasTarget(Alias.getTarget()).map_error(ReportError)); |
17 | 0 | return {}; |
18 | 0 | } |
19 | | |
20 | 0 | Expect<void> Loader::loadAliasTarget(AST::Component::AliasTarget &AliasTarget) { |
21 | 0 | auto ReportError = [this](auto E) { |
22 | 0 | return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_AliasTarget); |
23 | 0 | }; |
24 | | // aliastarget ::= 0x00 i:<instanceidx> n:<string> => export i n |
25 | | // | 0x01 i:<core:instanceidx> n:<core:name> => core export i n |
26 | | // | 0x02 ct:<u32> idx:<u32> => outer ct idx |
27 | |
|
28 | 0 | EXPECTED_TRY(auto Flag, FMgr.readByte().map_error(ReportError)); |
29 | 0 | switch (Flag) { |
30 | 0 | case 0x00: |
31 | 0 | case 0x01: { |
32 | 0 | auto &Ex = AliasTarget.emplace<AST::Component::AliasTargetExport>(); |
33 | 0 | EXPECTED_TRY(Ex.getInstanceIdx(), FMgr.readU32().map_error(ReportError)); |
34 | 0 | EXPECTED_TRY(Ex.getName(), FMgr.readName().map_error(ReportError)); |
35 | 0 | return {}; |
36 | 0 | } |
37 | 0 | case 0x02: { |
38 | 0 | auto &Out = AliasTarget.emplace<AST::Component::AliasTargetOuter>(); |
39 | 0 | EXPECTED_TRY(Out.getComponent(), FMgr.readU32().map_error(ReportError)); |
40 | 0 | EXPECTED_TRY(Out.getIndex(), FMgr.readU32().map_error(ReportError)); |
41 | 0 | return {}; |
42 | 0 | } |
43 | 0 | default: |
44 | 0 | return logLoadError(ErrCode::Value::MalformedAliasTarget, |
45 | 0 | FMgr.getLastOffset(), ASTNodeAttr::Comp_AliasTarget); |
46 | 0 | } |
47 | 0 | } |
48 | | |
49 | | } // namespace Loader |
50 | | } // namespace WasmEdge |