diff options
-rw-r--r-- | src/wasm-binary.h | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 21438f616..6782eec21 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -670,19 +670,30 @@ public: finishSection(start); } + std::map<Name, uint32_t> mappedImports; // name of the Import => index uint32_t getImportIndex(Name name) { - // TODO: optimize - for (size_t i = 0; i < wasm->imports.size(); i++) { - if (wasm->imports[i]->name == name) return i; - } - abort(); - } + if (!mappedImports.size()) { + // Create name => index mapping. + for (size_t i = 0; i < wasm->imports.size(); i++) { + assert(mappedImports.count(wasm->imports[i]->name) == 0); + mappedImports[wasm->imports[i]->name] = i; + } + } + assert(mappedImports.count(name)); + return mappedImports[name]; + } + + std::map<Name, uint32_t> mappedFunctions; // name of the Function => index uint32_t getFunctionIndex(Name name) { - // TODO: optimize - for (size_t i = 0; i < wasm->functions.size(); i++) { - if (wasm->functions[i]->name == name) return i; - } - abort(); + if (!mappedFunctions.size()) { + // Create name => index mapping. + for (size_t i = 0; i < wasm->functions.size(); i++) { + assert(mappedFunctions.count(wasm->functions[i]->name) == 0); + mappedFunctions[wasm->functions[i]->name] = i; + } + } + assert(mappedFunctions.count(name)); + return mappedFunctions[name]; } void writeFunctionTable() { |