From f20b150f3830d7a014258d92a26aba6a2bbdc8cb Mon Sep 17 00:00:00 2001 From: Federico Bond Date: Sat, 8 Jul 2017 22:42:42 -0300 Subject: Add type error when attempting value transfer to a non-payable contract --- libsolidity/ast/Types.cpp | 6 ++++++ libsolidity/ast/Types.h | 4 ++++ 2 files changed, 10 insertions(+) (limited to 'libsolidity/ast') diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 6ecf509d..b54407c6 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -1230,6 +1230,12 @@ bool ContractType::isExplicitlyConvertibleTo(Type const& _convertTo) const _convertTo.category() == Category::Contract; } +bool ContractType::isPayable() const +{ + auto fallbackFunction = m_contract.fallbackFunction(); + return fallbackFunction && fallbackFunction->isPayable(); +} + TypePointer ContractType::unaryOperatorResult(Token::Value _operator) const { return _operator == Token::Delete ? make_shared() : TypePointer(); diff --git a/libsolidity/ast/Types.h b/libsolidity/ast/Types.h index 66eb039f..bd5da30a 100644 --- a/libsolidity/ast/Types.h +++ b/libsolidity/ast/Types.h @@ -675,6 +675,10 @@ public: } bool isSuper() const { return m_super; } + + // @returns true if and only if the contract has a payable fallback function + bool isPayable() const; + ContractDefinition const& contractDefinition() const { return m_contract; } /// Returns the function type of the constructor modified to return an object of the contract's type. -- cgit v1.2.3