aboutsummaryrefslogtreecommitdiffstats
path: root/AST.h
diff options
context:
space:
mode:
authorGav Wood <i@gavwood.com>2015-03-03 18:20:12 +0800
committerGav Wood <i@gavwood.com>2015-03-03 18:20:12 +0800
commitf7f2861f5fd3b629026ea7ad31419a86784549e8 (patch)
treeeec4aac7d02969147e2397369166c9745d991174 /AST.h
parent226c4a89b2510d69b49513f8863c25d16729adfd (diff)
parent5efd2fbab73b39b03b10332a6644ed19708c1c91 (diff)
downloaddexon-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.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/AST.h b/AST.h
index dea0fba6..c91c433e 100644
--- a/AST.h
+++ b/AST.h
@@ -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;