summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-ir-builder.cpp
diff options
context:
space:
mode:
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;