From cd9132672a71f8edf6f18ba5588b5b70f20ed186 Mon Sep 17 00:00:00 2001 From: chriseth Date: Fri, 16 Oct 2015 13:11:16 +0200 Subject: Do not include function in interface list if there are errors. --- libsolidity/AST.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'libsolidity') diff --git a/libsolidity/AST.cpp b/libsolidity/AST.cpp index f184e037..062febb9 100644 --- a/libsolidity/AST.cpp +++ b/libsolidity/AST.cpp @@ -115,29 +115,26 @@ vector, FunctionTypePointer>> const& ContractDefinition::inter m_interfaceFunctionList.reset(new vector, FunctionTypePointer>>()); for (ContractDefinition const* contract: annotation().linearizedBaseContracts) { + vector functions; for (ASTPointer const& f: contract->definedFunctions()) + if (f->isPartOfExternalInterface()) + functions.push_back(make_shared(*f, false)); + for (ASTPointer const& v: contract->stateVariables()) + if (v->isPartOfExternalInterface()) + functions.push_back(make_shared(*v)); + for (FunctionTypePointer const& fun: functions) { - if (!f->isPartOfExternalInterface()) + if (!fun->interfaceFunctionType()) + // Fails hopefully because we already registered the error continue; - string functionSignature = f->externalSignature(); + string functionSignature = fun->externalSignature(); if (signaturesSeen.count(functionSignature) == 0) { - functionsSeen.insert(f->name()); signaturesSeen.insert(functionSignature); FixedHash<4> hash(dev::sha3(functionSignature)); - m_interfaceFunctionList->push_back(make_pair(hash, make_shared(*f, false))); + m_interfaceFunctionList->push_back(make_pair(hash, fun)); } } - - for (ASTPointer 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(*v))); - } } } return *m_interfaceFunctionList; -- cgit