diff options
author | Wladimir J. van der Laan <laanwj@protonmail.com> | 2020-11-20 05:34:17 +0100 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@protonmail.com> | 2020-11-20 05:36:01 +0100 |
commit | 46f0b2f97601e9d13277fd73bed9b0219bcdee5b (patch) | |
tree | e8b79d88fef71d4f347f7d9fad16ec8da77813be /src | |
parent | 2878167c18eee9ad440ab3f663d74bf2db254f17 (diff) | |
parent | c92387232f750397da7d131f262c150a608408c2 (diff) |
Merge #19851: refactor: Extract ParseOpCode from ParseScript
c92387232f750397da7d131f262c150a608408c2 refactor: Extract ParseOpCode from ParseScript (João Barbosa)
Pull request description:
Seems more natural to have `mapOpNames` "hidden" in `ParseOpCode` than in `ParseScript`.
A second lookup in `mapOpNames` is also removed.
ACKs for top commit:
laanwj:
ACK c92387232f750397da7d131f262c150a608408c2
theStack:
re-ACK c92387232f750397da7d131f262c150a608408c2
Tree-SHA512: d59d1964760622cf365479d44e3e676aa0bf46b60e77160140d967e012042df92121d3224c7551dc96eff5ff3294598cc6bade82adb3f60d28810e18e60e1257
Diffstat (limited to 'src')
-rw-r--r-- | src/core_read.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/core_read.cpp b/src/core_read.cpp index c6416e6f07..a2eebbd528 100644 --- a/src/core_read.cpp +++ b/src/core_read.cpp @@ -20,10 +20,10 @@ #include <algorithm> #include <string> -CScript ParseScript(const std::string& s) -{ - CScript result; +namespace { +opcodetype ParseOpCode(const std::string& s) +{ static std::map<std::string, opcodetype> mapOpNames; if (mapOpNames.empty()) @@ -45,6 +45,17 @@ CScript ParseScript(const std::string& s) } } + auto it = mapOpNames.find(s); + if (it == mapOpNames.end()) throw std::runtime_error("script parse error: unknown opcode"); + return it->second; +} + +} // namespace + +CScript ParseScript(const std::string& s) +{ + CScript result; + std::vector<std::string> words; boost::algorithm::split(words, s, boost::algorithm::is_any_of(" \t\n"), boost::algorithm::token_compress_on); @@ -82,14 +93,10 @@ CScript ParseScript(const std::string& s) std::vector<unsigned char> value(w->begin()+1, w->end()-1); result << value; } - else if (mapOpNames.count(*w)) - { - // opcode, e.g. OP_ADD or ADD: - result << mapOpNames[*w]; - } else { - throw std::runtime_error("script parse error"); + // opcode, e.g. OP_ADD or ADD: + result << ParseOpCode(*w); } } |