/src/WasmEdge/lib/loader/ast/component/component_alias.cpp
Line | Count | Source |
1 | | // SPDX-License-Identifier: Apache-2.0 |
2 | | // SPDX-FileCopyrightText: Copyright The WasmEdge Authors |
3 | | |
4 | | #include "loader/loader.h" |
5 | | |
6 | | namespace WasmEdge { |
7 | | namespace Loader { |
8 | | |
9 | 502 | Expect<void> Loader::loadCoreAlias(AST::Component::CoreAlias &Alias) { |
10 | 502 | auto ReportError = [this](auto E) { |
11 | 7 | return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
12 | 7 | }; |
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 | 502 | EXPECTED_TRY(loadCoreSort(Alias.getSort()).map_error(ReportError)); |
17 | 996 | EXPECTED_TRY(uint8_t Flag, FMgr.readByte().map_error(ReportError)); |
18 | 996 | if (Flag != 0x01) { |
19 | 1 | return logLoadError(ErrCode::Value::MalformedAliasTarget, |
20 | 1 | FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
21 | 1 | } |
22 | 991 | EXPECTED_TRY(uint32_t Ct, FMgr.readU32().map_error(ReportError)); |
23 | 991 | EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError)); |
24 | 494 | Alias.setComponentJump(Ct); |
25 | 494 | Alias.setIndex(Idx); |
26 | 494 | return {}; |
27 | 991 | } |
28 | | |
29 | 9.99k | Expect<void> Loader::loadAlias(AST::Component::Alias &Alias) { |
30 | 9.99k | auto ReportError = [this](auto E) { |
31 | 87 | return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
32 | 87 | }; |
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 | 9.99k | EXPECTED_TRY(loadSort(Alias.getSort()).map_error(ReportError)); |
39 | 19.8k | EXPECTED_TRY(uint8_t Flag, FMgr.readByte().map_error(ReportError)); |
40 | 19.8k | switch (Flag) { |
41 | 1.92k | case 0x00: |
42 | 2.79k | case 0x01: { |
43 | 2.79k | EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError)); |
44 | 2.79k | EXPECTED_TRY(std::string Name, FMgr.readName().map_error(ReportError)); |
45 | 2.78k | Alias.setExport(Idx, Name); |
46 | 2.78k | break; |
47 | 2.79k | } |
48 | 7.12k | case 0x02: { |
49 | 7.12k | EXPECTED_TRY(uint32_t Ct, FMgr.readU32().map_error(ReportError)); |
50 | 7.12k | EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError)); |
51 | 7.11k | Alias.setOuter(Ct, Idx); |
52 | 7.11k | break; |
53 | 7.12k | } |
54 | 11 | default: |
55 | 11 | return logLoadError(ErrCode::Value::MalformedAliasTarget, |
56 | 11 | FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
57 | 19.8k | } |
58 | 9.90k | Alias.setTargetType(static_cast<AST::Component::Alias::TargetType>(Flag)); |
59 | 9.90k | return {}; |
60 | 19.8k | } |
61 | | |
62 | | } // namespace Loader |
63 | | } // namespace WasmEdge |