diff options
Diffstat (limited to 'src/wasm/wasm.cpp')
-rw-r--r-- | src/wasm/wasm.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp index 26e6b369b..4975f4597 100644 --- a/src/wasm/wasm.cpp +++ b/src/wasm/wasm.cpp @@ -300,6 +300,30 @@ void CallIndirect::finalize() { } } +HeapType CallIndirect::getHeapType(Module* module) { + auto heapType = HeapType(sig); + // See comment in wasm.h + if (module) { + // The table may not yet exist if the wasm module is still being + // constructed. This should perhaps be an error, but as this is a hack for + // the time being, handle this the same as the case where module is null. + // Note: table_ (with underscore) is needed as |table| is a field on |this|. + if (auto* table_ = module->getTableOrNull(table)) { + // The wasm spec may allow more things eventually, and if so we'd need to + // add more checking here. + assert(table_->type.isRef()); + auto tableHeapType = table_->type.getHeapType(); + if (tableHeapType.isSignature()) { + auto tableSig = tableHeapType.getSignature(); + if (sig == tableSig) { + heapType = tableHeapType; + } + } + } + } + return heapType; +} + bool LocalSet::isTee() const { return type != Type::none; } // Changes to local.tee. The type of the local should be given. |