summaryrefslogtreecommitdiff
path: root/src/interp/binary-reader-interp.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/binary-reader-interp.cc')
-rw-r--r--src/interp/binary-reader-interp.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/interp/binary-reader-interp.cc b/src/interp/binary-reader-interp.cc
index 9bdb1c84..22595e8e 100644
--- a/src/interp/binary-reader-interp.cc
+++ b/src/interp/binary-reader-interp.cc
@@ -267,6 +267,7 @@ class BinaryReaderInterp : public BinaryReaderNop {
TypeVector* out_result_types);
FuncSignature* GetSignatureByModuleIndex(Index sig_index);
Index TranslateFuncIndexToEnv(Index func_index);
+ Table* GetTableByModuleIndex(Index table_index);
Index TranslateTableIndexToEnv(Index table_index);
Index TranslateModuleFuncIndexToDefined(Index func_index);
Func* GetFuncByModuleIndex(Index func_index);
@@ -456,6 +457,10 @@ Func* BinaryReaderInterp::GetFuncByModuleIndex(Index func_index) {
return env_->GetFunc(TranslateFuncIndexToEnv(func_index));
}
+Table* BinaryReaderInterp::GetTableByModuleIndex(Index table_index) {
+ return env_->GetTable(TranslateTableIndexToEnv(table_index));
+}
+
Index BinaryReaderInterp::TranslateGlobalIndexToEnv(Index global_index) {
return global_index_mapping_[global_index];
}
@@ -1126,8 +1131,7 @@ wabt::Result BinaryReaderInterp::OnElemSegmentElemExprCount(Index index,
elem_segment_->dropped = true;
assert(segment_table_index_ != kInvalidIndex);
- Table* table =
- env_->GetTable(TranslateTableIndexToEnv(segment_table_index_));
+ Table* table = GetTableByModuleIndex(segment_table_index_);
elem_segment_infos_.emplace_back(table, table_offset_);
elem_segment_info_ = &elem_segment_infos_.back();
}
@@ -1851,14 +1855,16 @@ wabt::Result BinaryReaderInterp::OnMemoryInitExpr(Index segment_index) {
}
wabt::Result BinaryReaderInterp::OnTableGetExpr(Index table_index) {
- CHECK_RESULT(typechecker_.OnTableGet(table_index));
+ const Table* table = GetTableByModuleIndex(table_index);
+ CHECK_RESULT(typechecker_.OnTableGet(table->elem_type));
CHECK_RESULT(EmitOpcode(Opcode::TableGet));
CHECK_RESULT(EmitI32(TranslateTableIndexToEnv(table_index)));
return wabt::Result::Ok;
}
wabt::Result BinaryReaderInterp::OnTableSetExpr(Index table_index) {
- CHECK_RESULT(typechecker_.OnTableSet(table_index));
+ const Table* table = GetTableByModuleIndex(table_index);
+ CHECK_RESULT(typechecker_.OnTableSet(table->elem_type));
CHECK_RESULT(EmitOpcode(Opcode::TableSet));
CHECK_RESULT(EmitI32(TranslateTableIndexToEnv(table_index)));
return wabt::Result::Ok;