From 1496f97d7919960ef4e3f74a961d959bfc236218 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Wed, 15 Nov 2023 01:48:29 +0100 Subject: [Parser] Parse array.new_fixed (#6102) --- src/wasm/wasm-ir-builder.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/wasm/wasm-ir-builder.cpp') diff --git a/src/wasm/wasm-ir-builder.cpp b/src/wasm/wasm-ir-builder.cpp index 843e0ed78..9b2a944dd 100644 --- a/src/wasm/wasm-ir-builder.cpp +++ b/src/wasm/wasm-ir-builder.cpp @@ -287,6 +287,15 @@ Result<> IRBuilder::visitArrayNew(ArrayNew* curr) { return Ok{}; } +Result<> IRBuilder::visitArrayNewFixed(ArrayNewFixed* curr) { + for (size_t i = 0, size = curr->values.size(); i < size; ++i) { + auto val = pop(); + CHECK_ERR(val); + curr->values[size - i - 1] = *val; + } + return Ok{}; +} + Result IRBuilder::getBranchValue(Name labelName, std::optional label) { if (!label) { @@ -1000,7 +1009,13 @@ Result<> IRBuilder::makeArrayNewElem(HeapType type, Name elem) { return Ok{}; } -// Result<> IRBuilder::makeArrayNewFixed() {} +Result<> IRBuilder::makeArrayNewFixed(HeapType type, uint32_t arity) { + ArrayNewFixed curr(wasm.allocator); + curr.values.resize(arity); + CHECK_ERR(visitArrayNewFixed(&curr)); + push(builder.makeArrayNewFixed(type, curr.values)); + return Ok{}; +} Result<> IRBuilder::makeArrayGet(HeapType type, bool signed_) { ArrayGet curr; -- cgit v1.2.3