diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-12 21:49:04 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-13 18:11:24 -0800 |
commit | 97b943c832dd3389b81c0896826977e0c447de28 (patch) | |
tree | 466affed0a003bdf5d787d17326c09c5edda7c99 /src/passes/NameManager.cpp | |
parent | 06a9c12ea045dfb9b1dd4f4ccf959ac715d4df8a (diff) | |
download | binaryen-97b943c832dd3389b81c0896826977e0c447de28.tar.gz binaryen-97b943c832dd3389b81c0896826977e0c447de28.tar.bz2 binaryen-97b943c832dd3389b81c0896826977e0c447de28.zip |
pass support
Diffstat (limited to 'src/passes/NameManager.cpp')
-rw-r--r-- | src/passes/NameManager.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/passes/NameManager.cpp b/src/passes/NameManager.cpp new file mode 100644 index 000000000..13a6dd9f9 --- /dev/null +++ b/src/passes/NameManager.cpp @@ -0,0 +1,68 @@ +// +// NameManager +// + +#include <wasm.h> +#include <pass.h> + +namespace wasm { + +Name NameManager::getUnique(std::string prefix) { + while (1) { + Name curr = cashew::IString((prefix + std::to_string(counter++)).c_str(), false); + if (names.find(curr) == names.end()) { + names.insert(curr); + return curr; + } + } +} + +void NameManager::visitBlock(Block* curr) { + names.insert(curr->name); +} +void NameManager::visitLoop(Loop* curr) { + names.insert(curr->out); + names.insert(curr->in); +} +void NameManager::visitLabel(Label* curr) { + names.insert(curr->name); +} +void NameManager::visitBreak(Break* curr) { + names.insert(curr->name); +} +void NameManager::visitSwitch(Switch* curr) { + names.insert(curr->name); + names.insert(curr->default_); + for (auto& target : curr->targets) { + names.insert(target); + } +} +void NameManager::visitCall(Call* curr) { + names.insert(curr->target); +} +void NameManager::visitCallImport(CallImport* curr) { + names.insert(curr->target); +} +void NameManager::visitFunctionType(FunctionType* curr) { + names.insert(curr->name); +} +void NameManager::visitFunction(Function* curr) { + names.insert(curr->name); + for (auto& param : curr->params) { + names.insert(param.name); + } + for (auto& local : curr->locals) { + names.insert(local.name); + } +} +void NameManager::visitImport(Import* curr) { + names.insert(curr->name); +} +void NameManager::visitExport(Export* curr) { + names.insert(curr->name); +} + +static RegisterPass<NameManager> registerPass; + +} // namespace wasm + |