mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
When a contract type is super, its members do not contain the functions of itself
Fixes #1151
This commit is contained in:
parent
6781ec105f
commit
ff9039b2a8
@ -1324,7 +1324,14 @@ MemberList::MemberMap ContractType::nativeMembers(ContractDefinition const*) con
|
|||||||
if (m_super)
|
if (m_super)
|
||||||
{
|
{
|
||||||
// add the most derived of all functions which are visible in derived contracts
|
// 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;
|
||||||
|
if (bases.size() < 1)
|
||||||
|
BOOST_THROW_EXCEPTION(
|
||||||
|
InternalCompilerError() <<
|
||||||
|
errinfo_comment("linearizedBaseContracts should at least contain the most derived contract.")
|
||||||
|
);
|
||||||
|
bases.erase(bases.begin()); // Remove the most derived contract, which should not be searchable from `super`.
|
||||||
|
for (ContractDefinition const* base: bases)
|
||||||
for (FunctionDefinition const* function: base->definedFunctions())
|
for (FunctionDefinition const* function: base->definedFunctions())
|
||||||
{
|
{
|
||||||
if (!function->isVisibleInDerivedContracts())
|
if (!function->isVisibleInDerivedContracts())
|
||||||
|
Loading…
Reference in New Issue
Block a user