mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add ContractKind to ContractDefinition
This commit is contained in:
parent
c37397c178
commit
6d4628ace4
@ -316,19 +316,21 @@ protected:
|
|||||||
class ContractDefinition: public Declaration, public Documented
|
class ContractDefinition: public Declaration, public Documented
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
enum class ContractKind { Interface, Contract, Library };
|
||||||
|
|
||||||
ContractDefinition(
|
ContractDefinition(
|
||||||
SourceLocation const& _location,
|
SourceLocation const& _location,
|
||||||
ASTPointer<ASTString> const& _name,
|
ASTPointer<ASTString> const& _name,
|
||||||
ASTPointer<ASTString> const& _documentation,
|
ASTPointer<ASTString> const& _documentation,
|
||||||
std::vector<ASTPointer<InheritanceSpecifier>> const& _baseContracts,
|
std::vector<ASTPointer<InheritanceSpecifier>> const& _baseContracts,
|
||||||
std::vector<ASTPointer<ASTNode>> const& _subNodes,
|
std::vector<ASTPointer<ASTNode>> const& _subNodes,
|
||||||
bool _isLibrary
|
ContractKind _contractKind = ContractKind::Contract
|
||||||
):
|
):
|
||||||
Declaration(_location, _name),
|
Declaration(_location, _name),
|
||||||
Documented(_documentation),
|
Documented(_documentation),
|
||||||
m_baseContracts(_baseContracts),
|
m_baseContracts(_baseContracts),
|
||||||
m_subNodes(_subNodes),
|
m_subNodes(_subNodes),
|
||||||
m_isLibrary(_isLibrary)
|
m_contractKind(_contractKind)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
virtual void accept(ASTVisitor& _visitor) override;
|
virtual void accept(ASTVisitor& _visitor) override;
|
||||||
@ -344,7 +346,7 @@ public:
|
|||||||
std::vector<FunctionDefinition const*> definedFunctions() const { return filteredNodes<FunctionDefinition>(m_subNodes); }
|
std::vector<FunctionDefinition const*> definedFunctions() const { return filteredNodes<FunctionDefinition>(m_subNodes); }
|
||||||
std::vector<EventDefinition const*> events() const { return filteredNodes<EventDefinition>(m_subNodes); }
|
std::vector<EventDefinition const*> events() const { return filteredNodes<EventDefinition>(m_subNodes); }
|
||||||
std::vector<EventDefinition const*> const& interfaceEvents() const;
|
std::vector<EventDefinition const*> const& interfaceEvents() const;
|
||||||
bool isLibrary() const { return m_isLibrary; }
|
bool isLibrary() const { return m_contractKind == ContractKind::Library; }
|
||||||
|
|
||||||
/// @returns a map of canonical function signatures to FunctionDefinitions
|
/// @returns a map of canonical function signatures to FunctionDefinitions
|
||||||
/// as intended for use by the ABI.
|
/// as intended for use by the ABI.
|
||||||
@ -371,10 +373,12 @@ public:
|
|||||||
|
|
||||||
virtual ContractDefinitionAnnotation& annotation() const override;
|
virtual ContractDefinitionAnnotation& annotation() const override;
|
||||||
|
|
||||||
|
ContractKind contractKind() const { return m_contractKind; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<ASTPointer<InheritanceSpecifier>> m_baseContracts;
|
std::vector<ASTPointer<InheritanceSpecifier>> m_baseContracts;
|
||||||
std::vector<ASTPointer<ASTNode>> m_subNodes;
|
std::vector<ASTPointer<ASTNode>> m_subNodes;
|
||||||
bool m_isLibrary;
|
ContractKind m_contractKind;
|
||||||
|
|
||||||
// parsed Natspec documentation of the contract.
|
// parsed Natspec documentation of the contract.
|
||||||
Json::Value m_userDocumentation;
|
Json::Value m_userDocumentation;
|
||||||
|
@ -252,7 +252,7 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition(bool _isLibrary)
|
|||||||
docString,
|
docString,
|
||||||
baseContracts,
|
baseContracts,
|
||||||
subNodes,
|
subNodes,
|
||||||
_isLibrary
|
_isLibrary ? ContractDefinition::ContractKind::Library : ContractDefinition::ContractKind::Contract
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ BOOST_AUTO_TEST_CASE(type_identifiers)
|
|||||||
TypePointer multiArray = make_shared<ArrayType>(DataLocation::Storage, stringArray);
|
TypePointer multiArray = make_shared<ArrayType>(DataLocation::Storage, stringArray);
|
||||||
BOOST_CHECK_EQUAL(multiArray->identifier(), "t_array$_t_array$_t_string_storage_$20_storage_$dyn_storage_ptr");
|
BOOST_CHECK_EQUAL(multiArray->identifier(), "t_array$_t_array$_t_string_storage_$20_storage_$dyn_storage_ptr");
|
||||||
|
|
||||||
ContractDefinition c(SourceLocation{}, make_shared<string>("MyContract$"), {}, {}, {}, false);
|
ContractDefinition c(SourceLocation{}, make_shared<string>("MyContract$"), {}, {}, {}, ContractDefinition::ContractKind::Contract);
|
||||||
BOOST_CHECK_EQUAL(c.type()->identifier(), "t_type$_t_contract$_MyContract$$$_$2_$");
|
BOOST_CHECK_EQUAL(c.type()->identifier(), "t_type$_t_contract$_MyContract$$$_$2_$");
|
||||||
BOOST_CHECK_EQUAL(ContractType(c, true).identifier(), "t_super$_MyContract$$$_$2");
|
BOOST_CHECK_EQUAL(ContractType(c, true).identifier(), "t_super$_MyContract$$$_$2");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user