mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #141 from chriseth/fixExternalTypes
Do not include function in interface list if there are errors.
This commit is contained in:
commit
fd8eb2d074
@ -115,29 +115,26 @@ vector<pair<FixedHash<4>, FunctionTypePointer>> const& ContractDefinition::inter
|
|||||||
m_interfaceFunctionList.reset(new vector<pair<FixedHash<4>, FunctionTypePointer>>());
|
m_interfaceFunctionList.reset(new vector<pair<FixedHash<4>, FunctionTypePointer>>());
|
||||||
for (ContractDefinition const* contract: annotation().linearizedBaseContracts)
|
for (ContractDefinition const* contract: annotation().linearizedBaseContracts)
|
||||||
{
|
{
|
||||||
|
vector<FunctionTypePointer> functions;
|
||||||
for (ASTPointer<FunctionDefinition> const& f: contract->definedFunctions())
|
for (ASTPointer<FunctionDefinition> const& f: contract->definedFunctions())
|
||||||
|
if (f->isPartOfExternalInterface())
|
||||||
|
functions.push_back(make_shared<FunctionType>(*f, false));
|
||||||
|
for (ASTPointer<VariableDeclaration> const& v: contract->stateVariables())
|
||||||
|
if (v->isPartOfExternalInterface())
|
||||||
|
functions.push_back(make_shared<FunctionType>(*v));
|
||||||
|
for (FunctionTypePointer const& fun: functions)
|
||||||
{
|
{
|
||||||
if (!f->isPartOfExternalInterface())
|
if (!fun->interfaceFunctionType())
|
||||||
|
// Fails hopefully because we already registered the error
|
||||||
continue;
|
continue;
|
||||||
string functionSignature = f->externalSignature();
|
string functionSignature = fun->externalSignature();
|
||||||
if (signaturesSeen.count(functionSignature) == 0)
|
if (signaturesSeen.count(functionSignature) == 0)
|
||||||
{
|
{
|
||||||
functionsSeen.insert(f->name());
|
|
||||||
signaturesSeen.insert(functionSignature);
|
signaturesSeen.insert(functionSignature);
|
||||||
FixedHash<4> hash(dev::sha3(functionSignature));
|
FixedHash<4> hash(dev::sha3(functionSignature));
|
||||||
m_interfaceFunctionList->push_back(make_pair(hash, make_shared<FunctionType>(*f, false)));
|
m_interfaceFunctionList->push_back(make_pair(hash, fun));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ASTPointer<VariableDeclaration> const& v: contract->stateVariables())
|
|
||||||
if (functionsSeen.count(v->name()) == 0 && v->isPartOfExternalInterface())
|
|
||||||
{
|
|
||||||
FunctionType ftype(*v);
|
|
||||||
solAssert(!!v->annotation().type.get(), "");
|
|
||||||
functionsSeen.insert(v->name());
|
|
||||||
FixedHash<4> hash(dev::sha3(ftype.externalSignature()));
|
|
||||||
m_interfaceFunctionList->push_back(make_pair(hash, make_shared<FunctionType>(*v)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return *m_interfaceFunctionList;
|
return *m_interfaceFunctionList;
|
||||||
|
Loading…
Reference in New Issue
Block a user