summaryrefslogtreecommitdiff
path: root/src/binary-reader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/binary-reader.cc')
-rw-r--r--src/binary-reader.cc25
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;
}