summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-s-parser.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-02-26 00:08:10 +0000
committerGitHub <noreply@github.com>2021-02-25 16:08:10 -0800
commit142d5f32ce792327de62b62f09f25528dcd86950 (patch)
treee0459bb2a2ec3a9599f1d1dca94c702800f45eba /src/wasm/wasm-s-parser.cpp
parent2572bbcd975c3bb7f99112ced7fe437e7a88eec0 (diff)
downloadbinaryen-142d5f32ce792327de62b62f09f25528dcd86950.tar.gz
binaryen-142d5f32ce792327de62b62f09f25528dcd86950.tar.bz2
binaryen-142d5f32ce792327de62b62f09f25528dcd86950.zip
[Wasm GC] Fix the order of operands in array.new and struct.new (#3617)
Also add a missing source file for a GC test, let.wasm.
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r--src/wasm/wasm-s-parser.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 339d3a04e..7182860ed 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -2401,8 +2401,6 @@ Expression* SExpressionWasmBuilder::makeRttSub(Element& s) {
Expression* SExpressionWasmBuilder::makeStructNew(Element& s, bool default_) {
auto heapType = parseHeapType(*s[1]);
- auto* rtt = parseExpression(*s[2]);
- validateHeapTypeUsingChild(rtt, heapType, s);
auto numOperands = s.size() - 3;
if (default_ && numOperands > 0) {
throw ParseException(
@@ -2411,8 +2409,10 @@ Expression* SExpressionWasmBuilder::makeStructNew(Element& s, bool default_) {
std::vector<Expression*> operands;
operands.resize(numOperands);
for (Index i = 0; i < numOperands; i++) {
- operands[i] = parseExpression(*s[i + 3]);
+ operands[i] = parseExpression(*s[i + 2]);
}
+ auto* rtt = parseExpression(*s[s.size() - 1]);
+ validateHeapTypeUsingChild(rtt, heapType, s);
return Builder(wasm).makeStructNew(rtt, operands);
}
@@ -2454,13 +2454,14 @@ Expression* SExpressionWasmBuilder::makeStructSet(Element& s) {
Expression* SExpressionWasmBuilder::makeArrayNew(Element& s, bool default_) {
auto heapType = parseHeapType(*s[1]);
- auto* rtt = parseExpression(*s[2]);
- validateHeapTypeUsingChild(rtt, heapType, s);
- auto* size = parseExpression(*s[3]);
Expression* init = nullptr;
+ size_t i = 2;
if (!default_) {
- init = parseExpression(*s[4]);
+ init = parseExpression(*s[i++]);
}
+ auto* size = parseExpression(*s[i++]);
+ auto* rtt = parseExpression(*s[i++]);
+ validateHeapTypeUsingChild(rtt, heapType, s);
return Builder(wasm).makeArrayNew(rtt, size, init);
}