summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Bebenita <mbebenita@gmail.com>2016-03-15 14:33:18 -0700
committerMichael Bebenita <mbebenita@gmail.com>2016-03-16 00:50:18 -0700
commita824194957e5a82f1c2cf19e8406f34625b1cd14 (patch)
treedfb6067c3231172ed2819b9fd88ac0600160d894 /src
parentd588ecdea2b423bc4de22580f20b0647c4100399 (diff)
downloadbinaryen-a824194957e5a82f1c2cf19e8406f34625b1cd14.tar.gz
binaryen-a824194957e5a82f1c2cf19e8406f34625b1cd14.tar.bz2
binaryen-a824194957e5a82f1c2cf19e8406f34625b1cd14.zip
Optimize function => index mapping.
Diffstat (limited to 'src')
-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() {