From 417f9c03d03a9fa52665bd238a42081d55df62c9 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 19 Jan 2015 23:34:49 +0100 Subject: Implicit conversion from derived to base. --- Types.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Types.cpp b/Types.cpp index 94fd5750..c6d8b62f 100644 --- a/Types.cpp +++ b/Types.cpp @@ -431,12 +431,19 @@ bool ContractType::isImplicitlyConvertibleTo(Type const& _convertTo) const return true; if (_convertTo.getCategory() == Category::INTEGER) return dynamic_cast(_convertTo).isAddress(); + if (_convertTo.getCategory() == Category::CONTRACT) + { + auto const& bases = getContractDefinition().getLinearizedBaseContracts(); + return find(bases.begin(), bases.end(), + &dynamic_cast(_convertTo).getContractDefinition()) != bases.end(); + } return false; } bool ContractType::isExplicitlyConvertibleTo(Type const& _convertTo) const { - return isImplicitlyConvertibleTo(_convertTo) || _convertTo.getCategory() == Category::INTEGER; + return isImplicitlyConvertibleTo(_convertTo) || _convertTo.getCategory() == Category::INTEGER || + _convertTo.getCategory() == Category::CONTRACT; } TypePointer ContractType::unaryOperatorResult(Token::Value _operator) const -- cgit v1.2.3