diff options
Diffstat (limited to 'src/binary-reader.cc')
-rw-r--r-- | src/binary-reader.cc | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/binary-reader.cc b/src/binary-reader.cc index 76956621..f5512ecd 100644 --- a/src/binary-reader.cc +++ b/src/binary-reader.cc @@ -383,6 +383,9 @@ bool BinaryReader::IsConcreteType(Type type) { case Type::V128: return options_.features.simd_enabled(); + case Type::ExceptRef: + return options_.features.exceptions_enabled(); + case Type::Anyref: return options_.features.reference_types_enabled(); @@ -1675,15 +1678,25 @@ Result BinaryReader::ReadLinkingSection(Offset section_size) { CALLBACK(OnSymbol, i, sym_type, flags); switch (sym_type) { case SymbolType::Function: - case SymbolType::Global: { + case SymbolType::Global: + case SymbolType::Event: { uint32_t index = 0; CHECK_RESULT(ReadU32Leb128(&index, "index")); - if ((flags & WABT_SYMBOL_FLAG_UNDEFINED) == 0) + if ((flags & WABT_SYMBOL_FLAG_UNDEFINED) == 0 || + (flags & WASM_SYMBOL_EXPLICIT_NAME) != 0) CHECK_RESULT(ReadStr(&name, "symbol name")); - if (sym_type == SymbolType::Function) { - CALLBACK(OnFunctionSymbol, i, flags, name, index); - } else { - CALLBACK(OnGlobalSymbol, i, flags, name, index); + switch (sym_type) { + case SymbolType::Function: + CALLBACK(OnFunctionSymbol, i, flags, name, index); + break; + case SymbolType::Global: + CALLBACK(OnGlobalSymbol, i, flags, name, index); + break; + case SymbolType::Event: + CALLBACK(OnEventSymbol, i, flags, name, index); + break; + default: + WABT_UNREACHABLE; } break; } |