summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/shared-constants.h1
-rw-r--r--src/wasm/wasm-s-parser.cpp13
-rw-r--r--src/wasm/wasm-type.cpp6
-rw-r--r--src/wasm/wasm.cpp1
4 files changed, 12 insertions, 9 deletions
diff --git a/src/shared-constants.h b/src/shared-constants.h
index 321ec3884..528d09df5 100644
--- a/src/shared-constants.h
+++ b/src/shared-constants.h
@@ -62,6 +62,7 @@ extern Name PRINT;
extern Name EXIT;
extern Name SHARED;
extern Name TAG;
+extern Name TUPLE;
} // namespace wasm
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index cc8fe2273..af042bd55 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -1393,12 +1393,15 @@ Type SExpressionWasmBuilder::elementToType(Element& s) {
}
return Type(parseHeapType(*s[i]), nullable);
}
- // It's a tuple.
- std::vector<Type> types;
- for (size_t i = 0; i < s.size(); ++i) {
- types.push_back(elementToType(*list[i]));
+ if (elementStartsWith(s, TUPLE)) {
+ // It's a tuple.
+ std::vector<Type> types;
+ for (size_t i = 1; i < s.size(); ++i) {
+ types.push_back(elementToType(*list[i]));
+ }
+ return Type(types);
}
- return Type(types);
+ throw SParseException(std::string("expected type, got list"), s);
}
Type SExpressionWasmBuilder::stringToLaneType(const char* str) {
diff --git a/src/wasm/wasm-type.cpp b/src/wasm/wasm-type.cpp
index 97a8cba0e..f1ceca51a 100644
--- a/src/wasm/wasm-type.cpp
+++ b/src/wasm/wasm-type.cpp
@@ -1952,11 +1952,9 @@ std::ostream& TypePrinter::print(HeapType type) {
}
std::ostream& TypePrinter::print(const Tuple& tuple) {
- os << '(';
- auto sep = "";
+ os << "(tuple";
for (Type type : tuple) {
- os << sep;
- sep = " ";
+ os << ' ';
print(type);
}
return os << ')';
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index 06e9de148..4785b22ab 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -99,6 +99,7 @@ Name PRINT("print");
Name EXIT("exit");
Name SHARED("shared");
Name TAG("tag");
+Name TUPLE("tuple");
// Expressions