From 142d5f32ce792327de62b62f09f25528dcd86950 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 26 Feb 2021 00:08:10 +0000 Subject: [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. --- src/wasm/wasm-s-parser.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/wasm/wasm-s-parser.cpp') 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 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); } -- cgit v1.2.3