summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-ir-builder.cpp
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2023-11-15 01:48:29 +0100
committerGitHub <noreply@github.com>2023-11-15 01:48:29 +0100
commit1496f97d7919960ef4e3f74a961d959bfc236218 (patch)
treeed65de5e925a132bc903a7102d43a038cac5f85d /src/wasm/wasm-ir-builder.cpp
parent89fd9c82df5e979f04b7af68f456fd0235ee3aa9 (diff)
downloadbinaryen-1496f97d7919960ef4e3f74a961d959bfc236218.tar.gz
binaryen-1496f97d7919960ef4e3f74a961d959bfc236218.tar.bz2
binaryen-1496f97d7919960ef4e3f74a961d959bfc236218.zip
[Parser] Parse array.new_fixed (#6102)
Diffstat (limited to 'src/wasm/wasm-ir-builder.cpp')
-rw-r--r--src/wasm/wasm-ir-builder.cpp17
1 files changed, 16 insertions, 1 deletions
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<Expression*> IRBuilder::getBranchValue(Name labelName,
std::optional<Index> 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;