diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2017-09-23 21:54:19 -0400 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-09-23 18:54:19 -0700 |
commit | 1fb2b02d11e8310883b966c8247adc4b54a8f5b3 (patch) | |
tree | 85a118ca6025285255bf1a664daf9cbed8482aae | |
parent | f84fa96a0abb482a392040cf0aeab627345d812d (diff) | |
download | binaryen-1fb2b02d11e8310883b966c8247adc4b54a8f5b3.tar.gz binaryen-1fb2b02d11e8310883b966c8247adc4b54a8f5b3.tar.bz2 binaryen-1fb2b02d11e8310883b966c8247adc4b54a8f5b3.zip |
Make localNames into a map (#1189)
-rw-r--r-- | src/passes/ReorderLocals.cpp | 1 | ||||
-rw-r--r-- | src/wasm-builder.h | 18 | ||||
-rw-r--r-- | src/wasm.h | 2 | ||||
-rw-r--r-- | src/wasm/wasm.cpp | 15 |
4 files changed, 20 insertions, 16 deletions
diff --git a/src/passes/ReorderLocals.cpp b/src/passes/ReorderLocals.cpp index c18675cda..c880714e6 100644 --- a/src/passes/ReorderLocals.cpp +++ b/src/passes/ReorderLocals.cpp @@ -108,7 +108,6 @@ struct ReorderLocals : public WalkerPass<PostWalker<ReorderLocals>> { auto oldLocalNames = curr->localNames; auto oldLocalIndices = curr->localIndices; curr->localNames.clear(); - curr->localNames.resize(newToOld.size()); curr->localIndices.clear(); for (size_t i = 0; i < newToOld.size(); i++) { if (newToOld[i] < oldLocalNames.size()) { diff --git a/src/wasm-builder.h b/src/wasm-builder.h index e451f9e2b..4591c9c0d 100644 --- a/src/wasm-builder.h +++ b/src/wasm-builder.h @@ -54,13 +54,15 @@ public: for (auto& param : params) { func->params.push_back(param.type); - func->localIndices[param.name] = func->localNames.size(); - func->localNames.push_back(param.name); + Index index = func->localNames.size(); + func->localIndices[param.name] = index; + func->localNames[index] = param.name; } for (auto& var : vars) { func->vars.push_back(var.type); - func->localIndices[var.name] = func->localNames.size(); - func->localNames.push_back(var.name); + Index index = func->localNames.size(); + func->localIndices[var.name] = index; + func->localNames[index] = var.name; } return func; @@ -321,15 +323,17 @@ public: func->params.push_back(type); Index index = func->localNames.size(); func->localIndices[name] = index; - func->localNames.push_back(name); + func->localNames[index] = name; return index; } static Index addVar(Function* func, Name name, WasmType type) { // always ok to add a var, it does not affect other indices Index index = func->getNumLocals(); - if (name.is()) func->localIndices[name] = index; - func->localNames.push_back(name); + if (name.is()) { + func->localIndices[name] = index; + func->localNames[index] = name; + } func->vars.emplace_back(type); return index; } diff --git a/src/wasm.h b/src/wasm.h index fc167342a..50646e39f 100644 --- a/src/wasm.h +++ b/src/wasm.h @@ -591,7 +591,7 @@ public: Expression* body; // local names. these are optional. - std::vector<Name> localNames; + std::map<Index, Name> localNames; std::map<Name, Index> localIndices; struct DebugLocation { diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp index 6db11cc7d..f4562fe64 100644 --- a/src/wasm/wasm.cpp +++ b/src/wasm/wasm.cpp @@ -578,25 +578,26 @@ bool Function::isVar(Index index) { } bool Function::hasLocalName(Index index) const { - return index < localNames.size() && localNames[index].is(); + return localNames.find(index) != localNames.end(); } Name Function::getLocalName(Index index) { - assert(hasLocalName(index)); - return localNames[index]; + return localNames.at(index); } Name Function::getLocalNameOrDefault(Index index) { - if (hasLocalName(index)) { - return localNames[index]; + auto nameIt = localNames.find(index); + if (nameIt != localNames.end()) { + return nameIt->second; } // this is an unnamed local return Name(); } Name Function::getLocalNameOrGeneric(Index index) { - if (hasLocalName(index)) { - return localNames[index]; + auto nameIt = localNames.find(index); + if (nameIt != localNames.end()) { + return nameIt->second; } return Name::fromInt(index); } |