summaryrefslogtreecommitdiff
path: root/src/wasm-binary.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-binary.h')
-rw-r--r--src/wasm-binary.h35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index 4b7e1a2a4..931e33af5 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -623,19 +623,36 @@ 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;
+ if (mappedImports.size()) {
+ assert(mappedImports.count(name));
+ return mappedImports[name];
+ } else {
+ // 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;
+ }
}
- abort();
+ 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()) {
+ assert(mappedFunctions.count(name));
+ return mappedFunctions[name];
+ } else {
+ // 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() {