diff options
author | Gav Wood <i@gavwood.com> | 2015-01-27 07:00:48 +0800 |
---|---|---|
committer | Gav Wood <i@gavwood.com> | 2015-01-27 07:00:48 +0800 |
commit | 6e33b8cce1a7e4881f207e73fc366df1929de5c3 (patch) | |
tree | a2849a2a6845d2ae1be471d57e77836ac4b70c87 | |
parent | 32853fbc70e44cfaef25f53891734840340d6fe8 (diff) | |
parent | fe37aad4d52f2ddd3d9fd6f6249a9a94394eaf1c (diff) | |
download | dexon-solidity-6e33b8cce1a7e4881f207e73fc366df1929de5c3.tar dexon-solidity-6e33b8cce1a7e4881f207e73fc366df1929de5c3.tar.gz dexon-solidity-6e33b8cce1a7e4881f207e73fc366df1929de5c3.tar.bz2 dexon-solidity-6e33b8cce1a7e4881f207e73fc366df1929de5c3.tar.lz dexon-solidity-6e33b8cce1a7e4881f207e73fc366df1929de5c3.tar.xz dexon-solidity-6e33b8cce1a7e4881f207e73fc366df1929de5c3.tar.zst dexon-solidity-6e33b8cce1a7e4881f207e73fc366df1929de5c3.zip |
Merge branch 'develop' of github.com:ethereum/cpp-ethereum into develop
-rw-r--r-- | NameAndTypeResolver.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/NameAndTypeResolver.cpp b/NameAndTypeResolver.cpp index ba5ca134..c67cd727 100644 --- a/NameAndTypeResolver.cpp +++ b/NameAndTypeResolver.cpp @@ -111,7 +111,7 @@ void NameAndTypeResolver::linearizeBaseContracts(ContractDefinition& _contract) { // order in the lists is from derived to base // list of lists to linearize, the last element is the list of direct bases - list<list<ContractDefinition const*>> input(1, {&_contract}); + list<list<ContractDefinition const*>> input(1, {}); for (ASTPointer<InheritanceSpecifier> const& baseSpecifier: _contract.getBaseContracts()) { ASTPointer<Identifier> baseName = baseSpecifier->getName(); @@ -119,14 +119,15 @@ void NameAndTypeResolver::linearizeBaseContracts(ContractDefinition& _contract) baseName->getReferencedDeclaration()); if (!base) BOOST_THROW_EXCEPTION(baseName->createTypeError("Contract expected.")); - // "push_back" has the effect that bases mentioned earlier can overwrite members of bases - // mentioned later - input.back().push_back(base); + // "push_front" has the effect that bases mentioned later can overwrite members of bases + // mentioned earlier + input.back().push_front(base); vector<ContractDefinition const*> const& basesBases = base->getLinearizedBaseContracts(); if (basesBases.empty()) BOOST_THROW_EXCEPTION(baseName->createTypeError("Definition of base has to precede definition of derived contract")); input.push_front(list<ContractDefinition const*>(basesBases.begin(), basesBases.end())); } + input.back().push_front(&_contract); vector<ContractDefinition const*> result = cThreeMerge(input); if (result.empty()) BOOST_THROW_EXCEPTION(_contract.createTypeError("Linearization of inheritance graph impossible")); |