summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-s-parser.cpp
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2022-10-13 16:41:02 -0500
committerGitHub <noreply@github.com>2022-10-13 14:41:02 -0700
commitbc23c8f45bd1c2808d0871e7f1c9dbbdb3bc4ae8 (patch)
tree38638c72347176a1893a65f5236333b44c60d16f /src/wasm/wasm-s-parser.cpp
parent9c3b95a388d48cfd2430e138606f781c831fb2f2 (diff)
downloadbinaryen-bc23c8f45bd1c2808d0871e7f1c9dbbdb3bc4ae8.tar.gz
binaryen-bc23c8f45bd1c2808d0871e7f1c9dbbdb3bc4ae8.tar.bz2
binaryen-bc23c8f45bd1c2808d0871e7f1c9dbbdb3bc4ae8.zip
Add "struct" and "structref" as an alias for "data" and "dataref" (#5141)
In the upstream spec, `data` has been replaced with a type called `struct`. To allow for a graceful update in Binaryen, start by introducing "struct" as an alias for "data". Once users have stopped emitting `data` directly, future PRs will remove `data` and update the subtyping so that arrays are no longer subtypes of `struct`.
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r--src/wasm/wasm-s-parser.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 64d7a21a2..91d4c129c 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -1190,7 +1190,8 @@ Type SExpressionWasmBuilder::stringToType(std::string_view str,
if (str.substr(0, 6) == "i31ref" && (prefix || str.size() == 6)) {
return Type(HeapType::i31, Nullable);
}
- if (str.substr(0, 7) == "dataref" && (prefix || str.size() == 7)) {
+ if ((str.substr(0, 7) == "dataref" && (prefix || str.size() == 7)) ||
+ (str.substr(0, 9) == "structref" && (prefix || str.size() == 9))) {
return Type(HeapType::data, Nullable);
}
if (str.substr(0, 9) == "stringref" && (prefix || str.size() == 9)) {
@@ -1238,7 +1239,8 @@ HeapType SExpressionWasmBuilder::stringToHeapType(std::string_view str,
if (str.substr(0, 3) == "i31" && (prefix || str.size() == 3)) {
return HeapType::i31;
}
- if (str.substr(0, 4) == "data" && (prefix || str.size() == 4)) {
+ if ((str.substr(0, 4) == "data" && (prefix || str.size() == 4)) ||
+ (str.substr(0, 6) == "struct" && (prefix || str.size() == 6))) {
return HeapType::data;
}
if (str.substr(0, 6) == "string" && (prefix || str.size() == 6)) {