mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #1240 from ethereum/1151
ast: super contract type does not contain native members
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include <libsolidity/ast/Types.h>
|
||||
#include <limits>
|
||||
#include <boost/range/adaptor/reversed.hpp>
|
||||
#include <boost/range/adaptor/sliced.hpp>
|
||||
#include <libdevcore/CommonIO.h>
|
||||
#include <libdevcore/CommonData.h>
|
||||
#include <libdevcore/SHA3.h>
|
||||
@@ -1324,7 +1325,10 @@ MemberList::MemberMap ContractType::nativeMembers(ContractDefinition const*) con
|
||||
if (m_super)
|
||||
{
|
||||
// add the most derived of all functions which are visible in derived contracts
|
||||
for (ContractDefinition const* base: m_contract.annotation().linearizedBaseContracts)
|
||||
auto bases = m_contract.annotation().linearizedBaseContracts;
|
||||
solAssert(bases.size() >= 1, "linearizedBaseContracts should at least contain the most derived contract.");
|
||||
// `sliced(1, ...)` ignores the most derived contract, which should not be searchable from `super`.
|
||||
for (ContractDefinition const* base: bases | boost::adaptors::sliced(1, bases.size()))
|
||||
for (FunctionDefinition const* function: base->definedFunctions())
|
||||
{
|
||||
if (!function->isVisibleInDerivedContracts())
|
||||
|
||||
Reference in New Issue
Block a user