diff options
author | chriseth <chris@ethereum.org> | 2018-11-30 01:26:53 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-11-30 23:30:19 +0800 |
commit | 2a85152463e3990d4695978613efddbcebe29b5b (patch) | |
tree | 9403a55686f1ef6bb49d1877a2c1b34dc31e6242 /libsolidity/analysis/ContractLevelChecker.cpp | |
parent | b610be4882ca77defb73e35eda93996ca790f9f4 (diff) | |
download | dexon-solidity-2a85152463e3990d4695978613efddbcebe29b5b.tar dexon-solidity-2a85152463e3990d4695978613efddbcebe29b5b.tar.gz dexon-solidity-2a85152463e3990d4695978613efddbcebe29b5b.tar.bz2 dexon-solidity-2a85152463e3990d4695978613efddbcebe29b5b.tar.lz dexon-solidity-2a85152463e3990d4695978613efddbcebe29b5b.tar.xz dexon-solidity-2a85152463e3990d4695978613efddbcebe29b5b.tar.zst dexon-solidity-2a85152463e3990d4695978613efddbcebe29b5b.zip |
Move constructor checks.
Diffstat (limited to 'libsolidity/analysis/ContractLevelChecker.cpp')
-rw-r--r-- | libsolidity/analysis/ContractLevelChecker.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libsolidity/analysis/ContractLevelChecker.cpp b/libsolidity/analysis/ContractLevelChecker.cpp index 0ddb198f..879903de 100644 --- a/libsolidity/analysis/ContractLevelChecker.cpp +++ b/libsolidity/analysis/ContractLevelChecker.cpp @@ -40,6 +40,7 @@ bool ContractLevelChecker::check(ContractDefinition const& _contract) checkIllegalOverrides(_contract); checkAbstractFunctions(_contract); checkBaseConstructorArguments(_contract); + checkConstructor(_contract); return Error::containsOnlyWarnings(m_errorReporter.errors()); } @@ -339,3 +340,22 @@ void ContractLevelChecker::annotateBaseConstructorArguments( } } + +void ContractLevelChecker::checkConstructor(ContractDefinition const& _contract) +{ + FunctionDefinition const* constructor = _contract.constructor(); + if (!constructor) + return; + + if (!constructor->returnParameters().empty()) + m_errorReporter.typeError(constructor->returnParameterList()->location(), "Non-empty \"returns\" directive for constructor."); + if (constructor->stateMutability() != StateMutability::NonPayable && constructor->stateMutability() != StateMutability::Payable) + m_errorReporter.typeError( + constructor->location(), + "Constructor must be payable or non-payable, but is \"" + + stateMutabilityToString(constructor->stateMutability()) + + "\"." + ); + if (constructor->visibility() != FunctionDefinition::Visibility::Public && constructor->visibility() != FunctionDefinition::Visibility::Internal) + m_errorReporter.typeError(constructor->location(), "Constructor must be public or internal."); +} |