Browse Source

Cleaner interface for Solc CLI bytecode handling

cl-refactor
Lefteris Karapetsas 10 years ago
parent
commit
131998f242
  1. 68
      solc/CommandLineInterface.cpp
  2. 7
      solc/CommandLineInterface.h

68
solc/CommandLineInterface.cpp

@ -92,41 +92,50 @@ static std::istream& operator>>(std::istream& _in, OutputType& io_output)
return _in; return _in;
} }
void CommandLineInterface::handleBytecode(string const& _argName, void CommandLineInterface::handleBinary(string const& _contract)
string const& _title,
string const& _contract,
string const& _suffix)
{ {
if (m_args.count(_argName)) auto choice = m_args["binary"].as<OutputType>();
if (outputToStdout(choice))
{ {
auto choice = m_args[_argName].as<OutputType>(); cout << "Binary: " << endl;
if (outputToStdout(choice)) cout << toHex(m_compiler.getBytecode(_contract)) << endl;
{ }
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;
}
if (outputToFile(choice)) if (outputToFile(choice))
{ {
ofstream outFile(_contract + _suffix); ofstream outFile(_contract + ".binary");
if (_suffix == "opcodes") outFile << toHex(m_compiler.getBytecode(_contract));
// TODO: Figure out why the wrong operator << (from boost) is used here outFile.close();
dev::operator<<(outFile, m_compiler.getBytecode(_contract)); }
}
else void CommandLineInterface::handleOpcode(string const& _contract)
outFile << toHex(m_compiler.getBytecode(_contract)); {
outFile.close(); // TODO: Figure out why the wrong operator << (from boost) is used here
} auto choice = m_args["opcode"].as<OutputType>();
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, void CommandLineInterface::handleJson(DocumentationType _type,
string const& _contract) string const& _contract)
{ {
@ -348,8 +357,7 @@ void CommandLineInterface::actOnInput()
} }
} }
handleBytecode("opcodes", "Opcodes:", contract, ".opcodes"); handleBytecode(contract);
handleBytecode("binary", "Binary:", contract, ".binary");
handleJson(DocumentationType::ABI_INTERFACE, contract); handleJson(DocumentationType::ABI_INTERFACE, contract);
handleJson(DocumentationType::NATSPEC_DEV, contract); handleJson(DocumentationType::NATSPEC_DEV, contract);
handleJson(DocumentationType::NATSPEC_USER, contract); handleJson(DocumentationType::NATSPEC_USER, contract);

7
solc/CommandLineInterface.h

@ -53,10 +53,9 @@ public:
void actOnInput(); void actOnInput();
private: private:
void handleBytecode(std::string const& _argName, void handleBinary(std::string const& _contract);
std::string const& _title, void handleOpcode(std::string const& _contract);
std::string const& _contract, void handleBytecode(std::string const& _contract);
std::string const& _suffix);
void handleJson(DocumentationType _type, void handleJson(DocumentationType _type,
std::string const& _contract); std::string const& _contract);

Loading…
Cancel
Save