diff options
author | Alon Zakai <azakai@google.com> | 2021-02-26 00:08:10 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-25 16:08:10 -0800 |
commit | 142d5f32ce792327de62b62f09f25528dcd86950 (patch) | |
tree | e0459bb2a2ec3a9599f1d1dca94c702800f45eba /src/wasm/wasm-s-parser.cpp | |
parent | 2572bbcd975c3bb7f99112ced7fe437e7a88eec0 (diff) | |
download | binaryen-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.cpp | 15 |
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); } |