From 131998f242c394ca8692b7c7b64210822f6243c4 Mon Sep 17 00:00:00 2001 From: Lefteris Karapetsas Date: Tue, 9 Dec 2014 20:29:29 +0100 Subject: [PATCH] Cleaner interface for Solc CLI bytecode handling --- solc/CommandLineInterface.cpp | 68 +++++++++++++++++++---------------- solc/CommandLineInterface.h | 7 ++-- 2 files changed, 41 insertions(+), 34 deletions(-) diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index aef5512e3..d3dd39459 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -92,41 +92,50 @@ static std::istream& operator>>(std::istream& _in, OutputType& io_output) return _in; } -void CommandLineInterface::handleBytecode(string const& _argName, - string const& _title, - string const& _contract, - string const& _suffix) +void CommandLineInterface::handleBinary(string const& _contract) { - if (m_args.count(_argName)) + auto choice = m_args["binary"].as(); + if (outputToStdout(choice)) { - auto choice = m_args[_argName].as(); - if (outputToStdout(choice)) - { - cout << _title << endl; - if (_suffix == "opcodes") - { - // TODO: Figure out why the wrong operator << (from boost) is used here - dev::operator<<(cout, m_compiler.getBytecode(_contract)); - cout << endl; - } - else - cout << toHex(m_compiler.getBytecode(_contract)) << endl; - } + cout << "Binary: " << endl; + cout << toHex(m_compiler.getBytecode(_contract)) << endl; + } - if (outputToFile(choice)) - { - ofstream outFile(_contract + _suffix); - if (_suffix == "opcodes") - // TODO: Figure out why the wrong operator << (from boost) is used here - dev::operator<<(outFile, m_compiler.getBytecode(_contract)); + if (outputToFile(choice)) + { + ofstream outFile(_contract + ".binary"); + outFile << toHex(m_compiler.getBytecode(_contract)); + outFile.close(); + } +} - else - outFile << toHex(m_compiler.getBytecode(_contract)); - outFile.close(); - } +void CommandLineInterface::handleOpcode(string const& _contract) +{ + // TODO: Figure out why the wrong operator << (from boost) is used here + auto choice = m_args["opcode"].as(); + if (outputToStdout(choice)) + { + cout << "Opcodes: " << endl; + dev::operator<<(cout, m_compiler.getBytecode(_contract)); + cout << endl; + } + + if (outputToFile(choice)) + { + ofstream outFile(_contract + ".opcode"); + dev::operator<<(outFile, m_compiler.getBytecode(_contract)); + outFile.close(); } } +void CommandLineInterface::handleBytecode(string const& _contract) +{ + if (m_args.count("opcodes")) + handleOpcode(_contract); + if (m_args.count("binary")) + handleBinary(_contract); +} + void CommandLineInterface::handleJson(DocumentationType _type, string const& _contract) { @@ -348,8 +357,7 @@ void CommandLineInterface::actOnInput() } } - handleBytecode("opcodes", "Opcodes:", contract, ".opcodes"); - handleBytecode("binary", "Binary:", contract, ".binary"); + handleBytecode(contract); handleJson(DocumentationType::ABI_INTERFACE, contract); handleJson(DocumentationType::NATSPEC_DEV, contract); handleJson(DocumentationType::NATSPEC_USER, contract); diff --git a/solc/CommandLineInterface.h b/solc/CommandLineInterface.h index 8eb1fff3e..7e3ad2502 100644 --- a/solc/CommandLineInterface.h +++ b/solc/CommandLineInterface.h @@ -53,10 +53,9 @@ public: void actOnInput(); private: - void handleBytecode(std::string const& _argName, - std::string const& _title, - std::string const& _contract, - std::string const& _suffix); + void handleBinary(std::string const& _contract); + void handleOpcode(std::string const& _contract); + void handleBytecode(std::string const& _contract); void handleJson(DocumentationType _type, std::string const& _contract);