| 27 | } |
| 28 | |
| 29 | Expect<void> Loader::loadAlias(AST::Component::Alias &Alias) { |
| 30 | auto ReportError = [this](auto E) { |
| 31 | return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
| 32 | }; |
| 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 | EXPECTED_TRY(loadSort(Alias.getSort()).map_error(ReportError)); |
| 39 | EXPECTED_TRY(uint8_t Flag, FMgr.readByte().map_error(ReportError)); |
| 40 | switch (Flag) { |
| 41 | case 0x00: |
| 42 | case 0x01: { |
| 43 | EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError)); |
| 44 | EXPECTED_TRY(std::string Name, FMgr.readName().map_error(ReportError)); |
| 45 | Alias.setExport(Idx, Name); |
| 46 | break; |
| 47 | } |
| 48 | case 0x02: { |
| 49 | EXPECTED_TRY(uint32_t Ct, FMgr.readU32().map_error(ReportError)); |
| 50 | EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError)); |
| 51 | Alias.setOuter(Ct, Idx); |
| 52 | break; |
| 53 | } |
| 54 | default: |
| 55 | return logLoadError(ErrCode::Value::MalformedAliasTarget, |
| 56 | FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias); |
| 57 | } |
| 58 | Alias.setTargetType(static_cast<AST::Component::Alias::TargetType>(Flag)); |
| 59 | return {}; |
| 60 | } |
| 61 | |
| 62 | } // namespace Loader |
| 63 | } // namespace WasmEdge |
nothing calls this directly
no test coverage detected