summaryrefslogtreecommitdiff
path: root/src/wasm/wasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm.cpp')
-rw-r--r--src/wasm/wasm.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index 24479c1cf..8ff2dc978 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -1482,6 +1482,53 @@ Tag* Module::getTagOrNull(Name name) {
return getModuleElementOrNull(tagsMap, name);
}
+Importable* Module::getImport(ModuleItemKind kind, Name name) {
+ switch (kind) {
+ case ModuleItemKind::Function:
+ return getFunction(name);
+ case ModuleItemKind::Table:
+ return getTable(name);
+ case ModuleItemKind::Memory:
+ return getMemory(name);
+ case ModuleItemKind::Global:
+ return getGlobal(name);
+ case ModuleItemKind::Tag:
+ return getTag(name);
+ case ModuleItemKind::DataSegment:
+ case ModuleItemKind::ElementSegment:
+ case ModuleItemKind::Invalid:
+ WASM_UNREACHABLE("invalid kind");
+ }
+
+ WASM_UNREACHABLE("unexpected kind");
+}
+
+Importable* Module::getImportOrNull(ModuleItemKind kind, Name name) {
+ auto doReturn = [](Importable* importable) {
+ return importable->imported() ? importable : nullptr;
+ };
+
+ switch (kind) {
+ case ModuleItemKind::Function:
+ return doReturn(getFunctionOrNull(name));
+ case ModuleItemKind::Table:
+ return doReturn(getTableOrNull(name));
+ case ModuleItemKind::Memory:
+ return doReturn(getMemoryOrNull(name));
+ case ModuleItemKind::Global:
+ return doReturn(getGlobalOrNull(name));
+ case ModuleItemKind::Tag:
+ return doReturn(getTagOrNull(name));
+ case ModuleItemKind::DataSegment:
+ case ModuleItemKind::ElementSegment:
+ return nullptr;
+ case ModuleItemKind::Invalid:
+ WASM_UNREACHABLE("invalid kind");
+ }
+
+ WASM_UNREACHABLE("unexpected kind");
+}
+
// TODO(@warchant): refactor all usages to use variant with unique_ptr
template<typename Vector, typename Map, typename Elem>
Elem* addModuleElement(Vector& v, Map& m, Elem* curr, std::string funcName) {