diff options
author | Gav Wood <i@gavwood.com> | 2015-03-03 18:20:12 +0800 |
---|---|---|
committer | Gav Wood <i@gavwood.com> | 2015-03-03 18:20:12 +0800 |
commit | f7f2861f5fd3b629026ea7ad31419a86784549e8 (patch) | |
tree | eec4aac7d02969147e2397369166c9745d991174 /AST.h | |
parent | 226c4a89b2510d69b49513f8863c25d16729adfd (diff) | |
parent | 5efd2fbab73b39b03b10332a6644ed19708c1c91 (diff) | |
download | dexon-solidity-f7f2861f5fd3b629026ea7ad31419a86784549e8.tar dexon-solidity-f7f2861f5fd3b629026ea7ad31419a86784549e8.tar.gz dexon-solidity-f7f2861f5fd3b629026ea7ad31419a86784549e8.tar.bz2 dexon-solidity-f7f2861f5fd3b629026ea7ad31419a86784549e8.tar.lz dexon-solidity-f7f2861f5fd3b629026ea7ad31419a86784549e8.tar.xz dexon-solidity-f7f2861f5fd3b629026ea7ad31419a86784549e8.tar.zst dexon-solidity-f7f2861f5fd3b629026ea7ad31419a86784549e8.zip |
Merge branch 'develop' of github.com:ethereum/cpp-ethereum into develop
Diffstat (limited to 'AST.h')
-rw-r--r-- | AST.h | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -144,7 +144,7 @@ public: Visibility getVisibility() const { return m_visibility == Visibility::Default ? getDefaultVisibility() : m_visibility; } bool isPublic() const { return getVisibility() >= Visibility::Public; } bool isVisibleInContract() const { return getVisibility() != Visibility::External; } - bool isVisibleInDerivedContracts() const { return isVisibleInContract() && getVisibility() >= Visibility::Internal; } + virtual bool isVisibleInDerivedContracts() const { return isVisibleInContract() && getVisibility() >= Visibility::Internal; } /// @returns the scope this declaration resides in. Can be nullptr if it is the global scope. /// Available only after name and type resolution step. @@ -247,6 +247,9 @@ public: /// as intended for use by the ABI. std::map<FixedHash<4>, FunctionTypePointer> getInterfaceFunctions() const; + /// @returns a list of the inheritable members of this contract + std::vector<Declaration const*> const& getInheritableMembers() const; + /// List of all (direct and indirect) base contracts in order from derived to base, including /// the contract itself. Available after name resolution std::vector<ContractDefinition const*> const& getLinearizedBaseContracts() const { return m_linearizedBaseContracts; } @@ -273,6 +276,7 @@ private: std::vector<ContractDefinition const*> m_linearizedBaseContracts; mutable std::unique_ptr<std::vector<std::pair<FixedHash<4>, FunctionTypePointer>>> m_interfaceFunctionList; mutable std::unique_ptr<std::vector<ASTPointer<EventDefinition>>> m_interfaceEvents; + mutable std::unique_ptr<std::vector<Declaration const*>> m_inheritableMembers; }; class InheritanceSpecifier: public ASTNode @@ -405,6 +409,11 @@ public: ASTPointer<ParameterList> const& getReturnParameterList() const { return m_returnParameters; } Block const& getBody() const { return *m_body; } + virtual bool isVisibleInDerivedContracts() const override + { + return !isConstructor() && !getName().empty() && isVisibleInContract() && + getVisibility() >= Visibility::Internal; + } virtual TypePointer getType(ContractDefinition const*) const override; /// Checks that all parameters have allowed types and calls checkTypeRequirements on the body. @@ -501,7 +510,7 @@ private: }; /** - * Invocation/usage of a modifier in a function header. + * Invocation/usage of a modifier in a function header or a base constructor call. */ class ModifierInvocation: public ASTNode { @@ -516,7 +525,8 @@ public: ASTPointer<Identifier> const& getName() const { return m_modifierName; } std::vector<ASTPointer<Expression>> const& getArguments() const { return m_arguments; } - void checkTypeRequirements(); + /// @param _bases is the list of base contracts for base constructor calls. For modifiers an empty vector should be passed. + void checkTypeRequirements(std::vector<ASTPointer<InheritanceSpecifier>> const& _bases); private: ASTPointer<Identifier> m_modifierName; |