|
|
@ -21,19 +21,36 @@ |
|
|
|
|
|
|
|
#include <libsolidity/AST.h> |
|
|
|
#include <libdevcrypto/SHA3.h> |
|
|
|
#include <libdevcore/Exceptions.h> |
|
|
|
#include "QVariableDeclaration.h" |
|
|
|
#include "QFunctionDefinition.h" |
|
|
|
|
|
|
|
using namespace dev::solidity; |
|
|
|
using namespace dev::mix; |
|
|
|
|
|
|
|
QFunctionDefinition::QFunctionDefinition(dev::solidity::FunctionDefinition const* _f, int _index): QBasicNodeDefinition(_f), m_index(_index), m_hash(dev::sha3(_f->getCanonicalSignature())) |
|
|
|
QFunctionDefinition::QFunctionDefinition(dev::solidity::FunctionDescription const& _f): QBasicNodeDefinition(_f.getDeclaration()), m_hash(dev::sha3(_f.getSignature())) |
|
|
|
{ |
|
|
|
std::vector<std::shared_ptr<VariableDeclaration>> parameters = _f->getParameterList().getParameters(); |
|
|
|
for (unsigned i = 0; i < parameters.size(); i++) |
|
|
|
m_parameters.append(new QVariableDeclaration(parameters.at(i).get())); |
|
|
|
FunctionDefinition const* funcDef; |
|
|
|
VariableDeclaration const* varDecl; |
|
|
|
if ((funcDef = _f.getFunctionDefinition())) |
|
|
|
{ |
|
|
|
std::vector<std::shared_ptr<VariableDeclaration>> parameters = funcDef->getParameterList().getParameters(); |
|
|
|
for (unsigned i = 0; i < parameters.size(); i++) |
|
|
|
m_parameters.append(new QVariableDeclaration(parameters.at(i).get())); |
|
|
|
|
|
|
|
std::vector<std::shared_ptr<VariableDeclaration>> returnParameters = _f->getReturnParameters(); |
|
|
|
for (unsigned i = 0; i < returnParameters.size(); i++) |
|
|
|
m_returnParameters.append(new QVariableDeclaration(returnParameters.at(i).get())); |
|
|
|
std::vector<std::shared_ptr<VariableDeclaration>> returnParameters = funcDef->getReturnParameters(); |
|
|
|
for (unsigned i = 0; i < returnParameters.size(); i++) |
|
|
|
m_returnParameters.append(new QVariableDeclaration(returnParameters.at(i).get())); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if (!(varDecl = _f.getVariableDeclaration())) |
|
|
|
BOOST_THROW_EXCEPTION(Exception() << errinfo_comment("Malformed FunctionDescription. Should never happen.")); |
|
|
|
|
|
|
|
// only the return parameter for now.
|
|
|
|
// TODO: change this for other state variables like mapping and maybe abstract this inside solidity and not here
|
|
|
|
auto returnParams = _f.getReturnParameters(); |
|
|
|
m_returnParameters.append(new QVariableDeclaration(returnParams[0])); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|