diff options
author | chriseth <chris@ethereum.org> | 2018-02-08 23:55:03 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-05-02 23:39:42 +0800 |
commit | d3c11a49e56b04e810ebc2f6c05a6fa9a929bb2d (patch) | |
tree | e40c84eecacc9bc9642de6572f072da9d1cb8025 | |
parent | 78945e81e46ab12c864bdb8a2d8a03a80fbfdbdd (diff) | |
download | dexon-solidity-d3c11a49e56b04e810ebc2f6c05a6fa9a929bb2d.tar dexon-solidity-d3c11a49e56b04e810ebc2f6c05a6fa9a929bb2d.tar.gz dexon-solidity-d3c11a49e56b04e810ebc2f6c05a6fa9a929bb2d.tar.bz2 dexon-solidity-d3c11a49e56b04e810ebc2f6c05a6fa9a929bb2d.tar.lz dexon-solidity-d3c11a49e56b04e810ebc2f6c05a6fa9a929bb2d.tar.xz dexon-solidity-d3c11a49e56b04e810ebc2f6c05a6fa9a929bb2d.tar.zst dexon-solidity-d3c11a49e56b04e810ebc2f6c05a6fa9a929bb2d.zip |
Move NameDispenser into its own file.
-rw-r--r-- | libjulia/optimiser/FullInliner.cpp | 13 | ||||
-rw-r--r-- | libjulia/optimiser/FullInliner.h | 8 | ||||
-rw-r--r-- | libjulia/optimiser/NameDispenser.cpp | 38 | ||||
-rw-r--r-- | libjulia/optimiser/NameDispenser.h | 37 |
4 files changed, 76 insertions, 20 deletions
diff --git a/libjulia/optimiser/FullInliner.cpp b/libjulia/optimiser/FullInliner.cpp index 10955e94..30c53774 100644 --- a/libjulia/optimiser/FullInliner.cpp +++ b/libjulia/optimiser/FullInliner.cpp @@ -252,16 +252,3 @@ string BodyCopier::translateIdentifier(string const& _name) else return _name; } - -string NameDispenser::newName(string const& _prefix) -{ - string name = _prefix; - size_t suffix = 0; - while (name.empty() || m_usedNames.count(name)) - { - suffix++; - name = _prefix + "_" + std::to_string(suffix); - } - m_usedNames.insert(name); - return name; -} diff --git a/libjulia/optimiser/FullInliner.h b/libjulia/optimiser/FullInliner.h index d3dec3b2..d3628e1a 100644 --- a/libjulia/optimiser/FullInliner.h +++ b/libjulia/optimiser/FullInliner.h @@ -23,6 +23,7 @@ #include <libjulia/optimiser/ASTCopier.h> #include <libjulia/optimiser/ASTWalker.h> +#include <libjulia/optimiser/NameDispenser.h> #include <libsolidity/interface/Exceptions.h> @@ -38,13 +39,6 @@ namespace julia class NameCollector; -struct NameDispenser -{ - std::string newName(std::string const& _prefix); - std::set<std::string> m_usedNames; -}; - - /** * Optimiser component that modifies an AST in place, inlining arbitrary functions. diff --git a/libjulia/optimiser/NameDispenser.cpp b/libjulia/optimiser/NameDispenser.cpp new file mode 100644 index 00000000..e4f0e4f6 --- /dev/null +++ b/libjulia/optimiser/NameDispenser.cpp @@ -0,0 +1,38 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see <http://www.gnu.org/licenses/>. +*/ +/** + * Optimiser component that can create new unique names. + */ + +#include <libjulia/optimiser/NameDispenser.h> + +using namespace std; +using namespace dev; +using namespace dev::julia; + +string NameDispenser::newName(string const& _prefix) +{ + string name = _prefix; + size_t suffix = 0; + while (name.empty() || m_usedNames.count(name)) + { + suffix++; + name = _prefix + "_" + std::to_string(suffix); + } + m_usedNames.insert(name); + return name; +} diff --git a/libjulia/optimiser/NameDispenser.h b/libjulia/optimiser/NameDispenser.h new file mode 100644 index 00000000..91c43d54 --- /dev/null +++ b/libjulia/optimiser/NameDispenser.h @@ -0,0 +1,37 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see <http://www.gnu.org/licenses/>. +*/ +/** + * Optimiser component that can create new unique names. + */ +#pragma once + +#include <set> +#include <string> + +namespace dev +{ +namespace julia +{ + +struct NameDispenser +{ + std::string newName(std::string const& _prefix); + std::set<std::string> m_usedNames; +}; + +} +} |