Move Visibility out of Declaration.

This commit is contained in:
chriseth
2019-12-11 00:38:59 +01:00
parent 5389e03fb1
commit 90feb8f72a
10 changed files with 69 additions and 63 deletions
+19 -19
View File
@@ -328,13 +328,13 @@ FunctionTypePointer FunctionDefinition::functionType(bool _internal) const
{
switch (visibility())
{
case Declaration::Visibility::Default:
case Visibility::Default:
solAssert(false, "visibility() should not return Default");
case Declaration::Visibility::Private:
case Declaration::Visibility::Internal:
case Declaration::Visibility::Public:
case Visibility::Private:
case Visibility::Internal:
case Visibility::Public:
return TypeProvider::function(*this, _internal);
case Declaration::Visibility::External:
case Visibility::External:
return {};
}
}
@@ -342,13 +342,13 @@ FunctionTypePointer FunctionDefinition::functionType(bool _internal) const
{
switch (visibility())
{
case Declaration::Visibility::Default:
case Visibility::Default:
solAssert(false, "visibility() should not return Default");
case Declaration::Visibility::Private:
case Declaration::Visibility::Internal:
case Visibility::Private:
case Visibility::Internal:
return {};
case Declaration::Visibility::Public:
case Declaration::Visibility::External:
case Visibility::Public:
case Visibility::External:
return TypeProvider::function(*this, _internal);
}
}
@@ -359,7 +359,7 @@ FunctionTypePointer FunctionDefinition::functionType(bool _internal) const
TypePointer FunctionDefinition::type() const
{
solAssert(visibility() != Declaration::Visibility::External, "");
solAssert(visibility() != Visibility::External, "");
return TypeProvider::function(*this);
}
@@ -518,7 +518,7 @@ bool VariableDeclaration::isExternalCallableParameter() const
return false;
if (auto const* callable = dynamic_cast<CallableDeclaration const*>(scope()))
if (callable->visibility() == Declaration::Visibility::External)
if (callable->visibility() == Visibility::External)
return !isReturnParameter();
return false;
@@ -530,9 +530,9 @@ bool VariableDeclaration::isInternalCallableParameter() const
return false;
if (auto const* funTypeName = dynamic_cast<FunctionTypeName const*>(scope()))
return funTypeName->visibility() == Declaration::Visibility::Internal;
return funTypeName->visibility() == Visibility::Internal;
else if (auto const* callable = dynamic_cast<CallableDeclaration const*>(scope()))
return callable->visibility() <= Declaration::Visibility::Internal;
return callable->visibility() <= Visibility::Internal;
return false;
}
@@ -607,13 +607,13 @@ FunctionTypePointer VariableDeclaration::functionType(bool _internal) const
return nullptr;
switch (visibility())
{
case Declaration::Visibility::Default:
case Visibility::Default:
solAssert(false, "visibility() should not return Default");
case Declaration::Visibility::Private:
case Declaration::Visibility::Internal:
case Visibility::Private:
case Visibility::Internal:
return nullptr;
case Declaration::Visibility::Public:
case Declaration::Visibility::External:
case Visibility::Public:
case Visibility::External:
return TypeProvider::function(*this);
}
+11 -13
View File
@@ -182,20 +182,18 @@ protected:
class Declaration: public ASTNode, public Scopable
{
public:
/// Visibility ordered from restricted to unrestricted.
enum class Visibility { Default, Private, Internal, Public, External };
static std::string visibilityToString(Declaration::Visibility _visibility)
static std::string visibilityToString(Visibility _visibility)
{
switch (_visibility)
{
case Declaration::Visibility::Public:
case Visibility::Public:
return "public";
case Declaration::Visibility::Internal:
case Visibility::Internal:
return "internal";
case Declaration::Visibility::Private:
case Visibility::Private:
return "private";
case Declaration::Visibility::External:
case Visibility::External:
return "external";
default:
solAssert(false, "Invalid visibility specifier.");
@@ -602,7 +600,7 @@ public:
CallableDeclaration(
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
Declaration::Visibility _visibility,
Visibility _visibility,
ASTPointer<ParameterList> const& _parameters,
bool _isVirtual = false,
ASTPointer<OverrideSpecifier> const& _overrides = nullptr,
@@ -665,7 +663,7 @@ public:
FunctionDefinition(
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
Declaration::Visibility _visibility,
Visibility _visibility,
StateMutability _stateMutability,
Token _kind,
bool _isVirtual,
@@ -1028,7 +1026,7 @@ public:
SourceLocation const& _location,
ASTPointer<ParameterList> const& _parameterTypes,
ASTPointer<ParameterList> const& _returnTypes,
Declaration::Visibility _visibility,
Visibility _visibility,
StateMutability _stateMutability
):
TypeName(_location), m_parameterTypes(_parameterTypes), m_returnTypes(_returnTypes),
@@ -1042,9 +1040,9 @@ public:
ASTPointer<ParameterList> const& parameterTypeList() const { return m_parameterTypes; }
ASTPointer<ParameterList> const& returnParameterTypeList() const { return m_returnTypes; }
Declaration::Visibility visibility() const
Visibility visibility() const
{
return m_visibility == Declaration::Visibility::Default ? Declaration::Visibility::Internal : m_visibility;
return m_visibility == Visibility::Default ? Visibility::Internal : m_visibility;
}
StateMutability stateMutability() const { return m_stateMutability; }
bool isPayable() const { return m_stateMutability == StateMutability::Payable; }
@@ -1052,7 +1050,7 @@ public:
private:
ASTPointer<ParameterList> m_parameterTypes;
ASTPointer<ParameterList> m_returnTypes;
Declaration::Visibility m_visibility;
Visibility m_visibility;
StateMutability m_stateMutability;
};
+3
View File
@@ -34,6 +34,9 @@ namespace solidity
// How a function can mutate the EVM state.
enum class StateMutability { Pure, View, NonPayable, Payable };
/// Visibility ordered from restricted to unrestricted.
enum class Visibility { Default, Private, Internal, Public, External };
inline std::string stateMutabilityToString(StateMutability const& _stateMutability)
{
switch (_stateMutability)
+6 -1
View File
@@ -26,7 +26,12 @@
#include <string>
#include <vector>
// Forward-declare all AST node types
// Forward-declare all AST node types and related enums.
namespace langutil
{
enum class Token : unsigned int;
}
namespace dev
{
+3 -3
View File
@@ -2601,7 +2601,7 @@ FunctionType::FunctionType(EventDefinition const& _event):
FunctionType::FunctionType(FunctionTypeName const& _typeName):
m_parameterNames(_typeName.parameterTypes().size(), ""),
m_returnParameterNames(_typeName.returnParameterTypes().size(), ""),
m_kind(_typeName.visibility() == VariableDeclaration::Visibility::External ? Kind::External : Kind::Internal),
m_kind(_typeName.visibility() == Visibility::External ? Kind::External : Kind::Internal),
m_stateMutability(_typeName.stateMutability())
{
if (_typeName.isPayable())
@@ -3011,8 +3011,8 @@ MemberList::MemberMap FunctionType::nativeMembers(ContractDefinition const*) con
{
auto const* functionDefinition = dynamic_cast<FunctionDefinition const*>(m_declaration);
solAssert(functionDefinition, "");
solAssert(functionDefinition->visibility() != Declaration::Visibility::Private, "");
if (functionDefinition->visibility() != Declaration::Visibility::Internal)
solAssert(functionDefinition->visibility() != Visibility::Private, "");
if (functionDefinition->visibility() != Visibility::Internal)
{
auto const* contract = dynamic_cast<ContractDefinition const*>(m_declaration->scope());
solAssert(contract, "");