summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
authorDaniel Wirtz <dcode@dcode.io>2020-09-11 03:04:17 +0200
committerGitHub <noreply@github.com>2020-09-10 18:04:17 -0700
commit192757772adce7568fc1f3f3e733a4263b6392c6 (patch)
tree922fec8709cf9008d239a1fcbce7280e6ab46deb /src/wasm/wasm-binary.cpp
parentcd6f0d908f0e4c68d72fd476a6e0e7cfb7ae8595 (diff)
downloadbinaryen-192757772adce7568fc1f3f3e733a4263b6392c6.tar.gz
binaryen-192757772adce7568fc1f3f3e733a4263b6392c6.tar.bz2
binaryen-192757772adce7568fc1f3f3e733a4263b6392c6.zip
Add anyref feature and type (#3109)
Adds `anyref` type, which is enabled by a new feature `--enable-anyref`. This type is primarily used for testing that passes correctly handle subtype relationships so that the codebase will continue to be prepared for future subtyping. Since `--enable-anyref` is meaningless without also using `--enable-reference-types`, this PR also makes it a validation error to pass only the former (and similarly makes it a validation error to enable exception handling without enabling reference types).
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r--src/wasm/wasm-binary.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index b78d6b86b..de82f0656 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -691,6 +691,8 @@ void WasmBinaryWriter::writeFeaturesSection() {
return BinaryConsts::UserSections::ReferenceTypesFeature;
case FeatureSet::Multivalue:
return BinaryConsts::UserSections::MultivalueFeature;
+ case FeatureSet::Anyref:
+ return BinaryConsts::UserSections::AnyrefFeature;
default:
WASM_UNREACHABLE("unexpected feature flag");
}
@@ -1138,6 +1140,8 @@ Type WasmBinaryBuilder::getType() {
return Type::externref;
case BinaryConsts::EncodedType::exnref:
return Type::exnref;
+ case BinaryConsts::EncodedType::anyref:
+ return Type::anyref;
default:
throwError("invalid wasm type: " + std::to_string(type));
}
@@ -1160,6 +1164,8 @@ HeapType WasmBinaryBuilder::getHeapType() {
return HeapType::ExternKind;
case BinaryConsts::EncodedHeapType::exn:
return HeapType::ExnKind;
+ case BinaryConsts::EncodedHeapType::any:
+ return HeapType::AnyKind;
default:
throwError("invalid wasm heap type: " + std::to_string(type));
}
@@ -2203,6 +2209,8 @@ void WasmBinaryBuilder::readFeatures(size_t payloadLen) {
wasm.features.setReferenceTypes();
} else if (name == BinaryConsts::UserSections::MultivalueFeature) {
wasm.features.setMultivalue();
+ } else if (name == BinaryConsts::UserSections::AnyrefFeature) {
+ wasm.features.setAnyref();
}
}
}