diff options
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); } |