diff options
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r-- | src/wasm/wasm-s-parser.cpp | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index 968c8bd45..44008bb75 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -2974,14 +2974,20 @@ Expression* SExpressionWasmBuilder::makeArrayNew(Element& s, bool default_) { return Builder(wasm).makeArrayNew(heapType, size, init); } -Expression* SExpressionWasmBuilder::makeArrayNewSeg(Element& s, - ArrayNewSegOp op) { +Expression* SExpressionWasmBuilder::makeArrayNewData(Element& s) { auto heapType = parseHeapType(*s[1]); - Name seg = - op == NewData ? getDataSegmentName(*s[2]) : getElemSegmentName(*s[2]); + Name seg = getDataSegmentName(*s[2]); Expression* offset = parseExpression(*s[3]); Expression* size = parseExpression(*s[4]); - return Builder(wasm).makeArrayNewSeg(op, heapType, seg, offset, size); + return Builder(wasm).makeArrayNewData(heapType, seg, offset, size); +} + +Expression* SExpressionWasmBuilder::makeArrayNewElem(Element& s) { + auto heapType = parseHeapType(*s[1]); + Name seg = getElemSegmentName(*s[2]); + Expression* offset = parseExpression(*s[3]); + Expression* size = parseExpression(*s[4]); + return Builder(wasm).makeArrayNewElem(heapType, seg, offset, size); } Expression* SExpressionWasmBuilder::makeArrayNewFixed(Element& s) { @@ -3051,16 +3057,26 @@ Expression* SExpressionWasmBuilder::makeArrayFill(Element& s) { return Builder(wasm).makeArrayFill(ref, index, value, size); } -Expression* SExpressionWasmBuilder::makeArrayInit(Element& s, ArrayInitOp op) { +Expression* SExpressionWasmBuilder::makeArrayInitData(Element& s) { + auto heapType = parseHeapType(*s[1]); + auto seg = getDataSegmentName(*s[2]); + auto ref = parseExpression(*s[3]); + validateHeapTypeUsingChild(ref, heapType, s); + auto index = parseExpression(*s[4]); + auto offset = parseExpression(*s[5]); + auto size = parseExpression(*s[6]); + return Builder(wasm).makeArrayInitData(seg, ref, index, offset, size); +} + +Expression* SExpressionWasmBuilder::makeArrayInitElem(Element& s) { auto heapType = parseHeapType(*s[1]); - auto seg = - op == InitData ? getDataSegmentName(*s[2]) : getElemSegmentName(*s[2]); + auto seg = getElemSegmentName(*s[2]); auto ref = parseExpression(*s[3]); validateHeapTypeUsingChild(ref, heapType, s); auto index = parseExpression(*s[4]); auto offset = parseExpression(*s[5]); auto size = parseExpression(*s[6]); - return Builder(wasm).makeArrayInit(op, seg, ref, index, offset, size); + return Builder(wasm).makeArrayInitElem(seg, ref, index, offset, size); } Expression* SExpressionWasmBuilder::makeRefAs(Element& s, RefAsOp op) { |