summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
authorMax Graey <maxgraey@gmail.com>2021-10-07 22:43:30 +0300
committerGitHub <noreply@github.com>2021-10-07 12:43:30 -0700
commit2dff27c086e8f2a9913096ebf3dc93e97051d85a (patch)
tree3d689a659ad2339639fc4b2e73753b51e6d9295c /src/wasm-interpreter.h
parentff68bca64cd669aff59c7e1cc0a6677d267a410f (diff)
downloadbinaryen-2dff27c086e8f2a9913096ebf3dc93e97051d85a.tar.gz
binaryen-2dff27c086e8f2a9913096ebf3dc93e97051d85a.tar.bz2
binaryen-2dff27c086e8f2a9913096ebf3dc93e97051d85a.zip
Add table.set operation (#4215)
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 6ea9f9c9e..2952869c6 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -1359,6 +1359,7 @@ public:
return Literal(int32_t(left == right));
}
Flow visitTableGet(TableGet* curr) { WASM_UNREACHABLE("unimp"); }
+ Flow visitTableSet(TableSet* curr) { WASM_UNREACHABLE("unimp"); }
Flow visitTry(Try* curr) { WASM_UNREACHABLE("unimp"); }
Flow visitThrow(Throw* curr) {
NOTE_ENTER("Throw");
@@ -2162,6 +2163,10 @@ public:
NOTE_ENTER("TableGet");
return Flow(NONCONSTANT_FLOW);
}
+ Flow visitTableSet(TableSet* curr) {
+ NOTE_ENTER("TableSet");
+ return Flow(NONCONSTANT_FLOW);
+ }
Flow visitLoad(Load* curr) {
NOTE_ENTER("Load");
return Flow(NONCONSTANT_FLOW);
@@ -2794,6 +2799,22 @@ private:
index.getSingleValue().geti32());
}
+ Flow visitTableSet(TableSet* curr) {
+ NOTE_ENTER("TableSet");
+ Flow index = this->visit(curr->index);
+ if (index.breaking()) {
+ return index;
+ }
+ Flow flow = this->visit(curr->value);
+ if (flow.breaking()) {
+ return flow;
+ }
+ auto info = instance.getTableInterfaceInfo(curr->table);
+ info.interface->tableStore(
+ info.name, index.getSingleValue().geti32(), flow.getSingleValue());
+ return Flow();
+ }
+
Flow visitLocalGet(LocalGet* curr) {
NOTE_ENTER("LocalGet");
auto index = curr->index;