mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Move Visibility out of Declaration.
This commit is contained in:
+19
-19
@@ -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
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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, "");
|
||||
|
||||
Reference in New Issue
Block a user