summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r--src/wasm-interpreter.h21
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);