diff options
Diffstat (limited to 'src/ir')
-rw-r--r-- | src/ir/ReFinalize.cpp | 1 | ||||
-rw-r--r-- | src/ir/cost.h | 1 | ||||
-rw-r--r-- | src/ir/effects.h | 5 |
3 files changed, 7 insertions, 0 deletions
diff --git a/src/ir/ReFinalize.cpp b/src/ir/ReFinalize.cpp index 0d089a7ce..4f9c7c849 100644 --- a/src/ir/ReFinalize.cpp +++ b/src/ir/ReFinalize.cpp @@ -135,6 +135,7 @@ void ReFinalize::visitRefFunc(RefFunc* curr) { // this class has been meant to do. } void ReFinalize::visitRefEq(RefEq* curr) { curr->finalize(); } +void ReFinalize::visitTableGet(TableGet* curr) { curr->finalize(); } void ReFinalize::visitTry(Try* curr) { curr->finalize(); } void ReFinalize::visitThrow(Throw* curr) { curr->finalize(); } void ReFinalize::visitRethrow(Rethrow* curr) { curr->finalize(); } diff --git a/src/ir/cost.h b/src/ir/cost.h index 29fcb8dd4..12797b0b5 100644 --- a/src/ir/cost.h +++ b/src/ir/cost.h @@ -540,6 +540,7 @@ struct CostAnalyzer : public OverriddenVisitor<CostAnalyzer, CostType> { CostType visitRefEq(RefEq* curr) { return 1 + visit(curr->left) + visit(curr->right); } + CostType visitTableGet(TableGet* curr) { return 1 + visit(curr->index); } CostType visitTry(Try* curr) { // We assume no exception will be thrown in most cases return visit(curr->body); diff --git a/src/ir/effects.h b/src/ir/effects.h index ee45d8205..22e1e8149 100644 --- a/src/ir/effects.h +++ b/src/ir/effects.h @@ -589,6 +589,11 @@ private: void visitRefIs(RefIs* curr) {} void visitRefFunc(RefFunc* curr) {} void visitRefEq(RefEq* curr) {} + void visitTableGet(TableGet* curr) { + // TODO: track readsTable/writesTable, like memory? + // Traps when the index is out of bounds for the table. + parent.implicitTrap = true; + } void visitTry(Try* curr) {} void visitThrow(Throw* curr) { if (parent.tryDepth == 0) { |