summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-s-parser.cpp
diff options
context:
space:
mode:
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);
}