diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2017-08-05 03:38:45 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2017-08-05 03:38:45 +0800 |
commit | bb0eb57c2f2eadb4cc4a88cd347b70fec7813887 (patch) | |
tree | 6dabbedb630a0bfcd9022e233a5f083955a5bef0 /libsolidity | |
parent | a372941a442fe1029d212ebf7b097bdea7534fad (diff) | |
download | dexon-solidity-bb0eb57c2f2eadb4cc4a88cd347b70fec7813887.tar dexon-solidity-bb0eb57c2f2eadb4cc4a88cd347b70fec7813887.tar.gz dexon-solidity-bb0eb57c2f2eadb4cc4a88cd347b70fec7813887.tar.bz2 dexon-solidity-bb0eb57c2f2eadb4cc4a88cd347b70fec7813887.tar.lz dexon-solidity-bb0eb57c2f2eadb4cc4a88cd347b70fec7813887.tar.xz dexon-solidity-bb0eb57c2f2eadb4cc4a88cd347b70fec7813887.tar.zst dexon-solidity-bb0eb57c2f2eadb4cc4a88cd347b70fec7813887.zip |
Constructors must be implemented if declared.
Diffstat (limited to 'libsolidity')
-rw-r--r-- | libsolidity/analysis/TypeChecker.cpp | 8 | ||||
-rw-r--r-- | libsolidity/ast/ASTAnnotations.h | 3 |
2 files changed, 3 insertions, 8 deletions
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index ce4baa3f..a9f5b931 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -192,13 +192,7 @@ void TypeChecker::checkContractAbstractFunctions(ContractDefinition const& _cont { // Take constructors out of overload hierarchy if (function->isConstructor()) - { - if (!function->isImplemented()) - // Base contract's constructor is not fully implemented, no way to get - // out of this. - _contract.annotation().unimplementedFunctions.push_back(function); continue; - } auto& overloads = functions[function->name()]; FunctionTypePointer funType = make_shared<FunctionType>(*function); auto it = find_if(overloads.begin(), overloads.end(), [&](FunTypeAndFlag const& _funAndFlag) @@ -522,6 +516,8 @@ bool TypeChecker::visit(FunctionDefinition const& _function) } if (_function.isImplemented()) _function.body().accept(*this); + else if (_function.isConstructor()) + m_errorReporter.typeError(_function.location(), "Constructor must be implemented if declared."); return false; } diff --git a/libsolidity/ast/ASTAnnotations.h b/libsolidity/ast/ASTAnnotations.h index ecddbe21..f757f03c 100644 --- a/libsolidity/ast/ASTAnnotations.h +++ b/libsolidity/ast/ASTAnnotations.h @@ -79,8 +79,7 @@ struct TypeDeclarationAnnotation: ASTAnnotation struct ContractDefinitionAnnotation: TypeDeclarationAnnotation, DocumentedAnnotation { - /// List of functions without a body. Can also contain functions from base classes, - /// especially constructors. + /// List of functions without a body. Can also contain functions from base classes. std::vector<FunctionDefinition const*> unimplementedFunctions; /// List of all (direct and indirect) base contracts in order from derived to /// base, including the contract itself. |