diff options
author | Thomas Lively <tlively@google.com> | 2023-11-15 01:48:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-15 01:48:29 +0100 |
commit | 1496f97d7919960ef4e3f74a961d959bfc236218 (patch) | |
tree | ed65de5e925a132bc903a7102d43a038cac5f85d /src/wasm/wasm-ir-builder.cpp | |
parent | 89fd9c82df5e979f04b7af68f456fd0235ee3aa9 (diff) | |
download | binaryen-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.cpp | 17 |
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; |