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;
}
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<OutputType>();
if (outputToStdout(choice))
{
auto choice = m_args[_argName].as<OutputType>();
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<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,
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);

7
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);

Loading…
Cancel
Save