Coverage Report

Created: 2026-09-28 06:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
799
Expect<void> Loader::loadAlias(AST::Component::CoreAlias &Alias) {
10
799
  auto ReportError = [this](auto E) {
11
5
    return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias);
12
5
  };
13
  // core:alias ::= 0x10 0x01 ct:<u32> idx:<u32> => (alias outer ct idx (type))
14
15
799
  EXPECTED_TRY(uint8_t Sort, FMgr.readByte().map_error(ReportError));
16
797
  if (Sort != 0x10) {
17
3
    return logLoadError(ErrCode::Value::MalformedSort, FMgr.getLastOffset(),
18
3
                        ASTNodeAttr::Comp_Alias);
19
3
  }
20
1.58k
  EXPECTED_TRY(uint8_t Flag, FMgr.readByte().map_error(ReportError));
21
1.58k
  if (Flag != 0x01) {
22
1
    return logLoadError(ErrCode::Value::MalformedAliasTarget,
23
1
                        FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias);
24
1
  }
25
1.58k
  EXPECTED_TRY(uint32_t Ct, FMgr.readU32().map_error(ReportError));
26
1.58k
  EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError));
27
790
  Alias.setComponentJump(Ct);
28
790
  Alias.setIndex(Idx);
29
790
  return {};
30
1.58k
}
31
32
13.0k
Expect<void> Loader::loadAlias(AST::Component::Alias &Alias) {
33
13.0k
  auto ReportError = [this](auto E) {
34
90
    return logLoadError(E, FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias);
35
90
  };
36
  // alias ::= s:<sort> 0x00 i:<instanceidx> n:<string>         => export i n
37
  //         | s:<sort> 0x01 i:<core:instanceidx> n:<core:name> => core export
38
  //         | s:<sort> 0x02 ct:<u32> idx:<u32>                 => outer ct idx
39
  //                                                (if s in outeraliassort)
40
  // outeraliassort ::= core module | core type | component | type
41
42
13.0k
  EXPECTED_TRY(loadSort(Alias.getSort()).map_error(ReportError));
43
26.0k
  EXPECTED_TRY(uint8_t Flag, FMgr.readByte().map_error(ReportError));
44
26.0k
  const auto Target = static_cast<AST::Component::Alias::TargetType>(Flag);
45
26.0k
  switch (Target) {
46
3.14k
  case AST::Component::Alias::TargetType::Export:
47
7.08k
  case AST::Component::Alias::TargetType::CoreExport: {
48
7.08k
    EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError));
49
7.07k
    EXPECTED_TRY(std::string Name, FMgr.readName().map_error(ReportError));
50
7.06k
    Alias.setExport(Idx, Name);
51
7.06k
    break;
52
7.07k
  }
53
5.91k
  case AST::Component::Alias::TargetType::Outer: {
54
5.91k
    if (!Alias.getSort().isOuterAliasSort()) {
55
5
      return logLoadError(ErrCode::Value::MalformedSort, FMgr.getLastOffset(),
56
5
                          ASTNodeAttr::Comp_Alias);
57
5
    }
58
11.8k
    EXPECTED_TRY(uint32_t Ct, FMgr.readU32().map_error(ReportError));
59
11.8k
    EXPECTED_TRY(uint32_t Idx, FMgr.readU32().map_error(ReportError));
60
5.90k
    Alias.setOuter(Ct, Idx);
61
5.90k
    break;
62
11.8k
  }
63
13
  default:
64
13
    return logLoadError(ErrCode::Value::MalformedAliasTarget,
65
13
                        FMgr.getLastOffset(), ASTNodeAttr::Comp_Alias);
66
26.0k
  }
67
12.9k
  Alias.setTargetType(Target);
68
12.9k
  return {};
69
26.0k
}
70
71
} // namespace Loader
72
} // namespace WasmEdge