diff options
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r-- | src/wasm-interpreter.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 77e432436..9fc11de76 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -1702,6 +1702,27 @@ public: return Flow(Literal(std::make_shared<GCData>(rtt.getSingleValue(), data), curr->type)); } + Flow visitArrayInit(ArrayInit* curr) { + NOTE_ENTER("ArrayInit"); + auto rtt = this->visit(curr->rtt); + if (rtt.breaking()) { + return rtt; + } + Index num = curr->values.size(); + if (num >= ArrayLimit) { + hostLimit("allocation failure"); + } + Literals data(num); + for (Index i = 0; i < num; i++) { + auto value = this->visit(curr->values[i]); + if (value.breaking()) { + return value; + } + data[i] = value.getSingleValue(); + } + return Flow(Literal(std::make_shared<GCData>(rtt.getSingleValue(), data), + curr->type)); + } Flow visitArrayGet(ArrayGet* curr) { NOTE_ENTER("ArrayGet"); Flow ref = this->visit(curr->ref); |