/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::loadCoreAlias(AST::Component::CoreAlias &Alias) { |
10 | 0 | auto ReportError = [this](auto E) { |
11 | 0 | return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
12 | 0 | }; |
13 | | // core:alias ::= s:<core:sort> t:<core:aliastarget> => (alias t (s)) |
14 | | // core:aliastarget ::= 0x01 ct:<u32> idx:<u32> => outer ct idx |
15 | |
|
16 | 0 | EXPECTED_TRY(loadCoreSort(Alias.getSort()).map_error(ReportError)); |
17 | 0 | EXPECTED_TRY(uint8_t Flag, FMgr.readByte().map_error(ReportError)); |
18 | 0 | if (Flag != 0x01) { |
19 | 0 | return logLoadError(ErrCode::Value::MalformedAliasTarget, |
20 | 0 | FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
21 | 0 | } |
22 | 0 | EXPECTED_TRY(uint32_t Ct, FMgr.readU32().map_error(ReportError)); |
23 | 0 | EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError)); |
24 | 0 | Alias.setComponentJump(Ct); |
25 | 0 | Alias.setIndex(Idx); |
26 | 0 | return {}; |
27 | 0 | } |
28 | | |
29 | 0 | Expect<void> Loader::loadAlias(AST::Component::Alias &Alias) { |
30 | 0 | auto ReportError = [this](auto E) { |
31 | 0 | return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
32 | 0 | }; |
33 | | // alias ::= s:<sort> t:<aliastarget> => (alias t (s)) |
34 | | // aliastarget ::= 0x00 i:<instanceidx> n:<string> => export i n |
35 | | // | 0x01 i:<core:instanceidx> n:<core:name> => core export i n |
36 | | // | 0x02 ct:<u32> idx:<u32> => outer ct idx |
37 | |
|
38 | 0 | EXPECTED_TRY(loadSort(Alias.getSort()).map_error(ReportError)); |
39 | 0 | EXPECTED_TRY(uint8_t Flag, FMgr.readByte().map_error(ReportError)); |
40 | 0 | switch (Flag) { |
41 | 0 | case 0x00: |
42 | 0 | case 0x01: { |
43 | 0 | EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError)); |
44 | 0 | EXPECTED_TRY(std::string Name, FMgr.readName().map_error(ReportError)); |
45 | 0 | Alias.setExport(Idx, Name); |
46 | 0 | break; |
47 | 0 | } |
48 | 0 | case 0x02: { |
49 | 0 | EXPECTED_TRY(uint32_t Ct, FMgr.readU32().map_error(ReportError)); |
50 | 0 | EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError)); |
51 | 0 | Alias.setOuter(Ct, Idx); |
52 | 0 | break; |
53 | 0 | } |
54 | 0 | default: |
55 | 0 | return logLoadError(ErrCode::Value::MalformedAliasTarget, |
56 | 0 | FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
57 | 0 | } |
58 | 0 | Alias.setTargetType(static_cast<AST::Component::Alias::TargetType>(Flag)); |
59 | 0 | return {}; |
60 | 0 | } |
61 | | |
62 | | } // namespace Loader |
63 | | } // namespace WasmEdge |