aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-09-21 03:20:46 +0800
committerGitHub <noreply@github.com>2018-09-21 03:20:46 +0800
commitdc9853bb6e47e9774141813ad17691c78fdd204c (patch)
treeff581dfc39a191213afba77430accd415b316d5b /libsolidity
parente2baad54c50ca0383c839ec00519dd500759ae29 (diff)
parentd0461c49fee20c5213f351bf3f1814112dcf3331 (diff)
downloaddexon-solidity-dc9853bb6e47e9774141813ad17691c78fdd204c.tar
dexon-solidity-dc9853bb6e47e9774141813ad17691c78fdd204c.tar.gz
dexon-solidity-dc9853bb6e47e9774141813ad17691c78fdd204c.tar.bz2
dexon-solidity-dc9853bb6e47e9774141813ad17691c78fdd204c.tar.lz
dexon-solidity-dc9853bb6e47e9774141813ad17691c78fdd204c.tar.xz
dexon-solidity-dc9853bb6e47e9774141813ad17691c78fdd204c.tar.zst
dexon-solidity-dc9853bb6e47e9774141813ad17691c78fdd204c.zip
Merge pull request #5030 from ethereum/payableConversion
Make non-payable default for conversion to address.
Diffstat (limited to 'libsolidity')
-rw-r--r--libsolidity/analysis/TypeChecker.cpp4
-rw-r--r--libsolidity/ast/Types.cpp4
2 files changed, 3 insertions, 5 deletions
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp
index 3056561b..c42a0068 100644
--- a/libsolidity/analysis/TypeChecker.cpp
+++ b/libsolidity/analysis/TypeChecker.cpp
@@ -1778,9 +1778,7 @@ bool TypeChecker::visit(FunctionCall const& _functionCall)
}
if (resultType->category() == Type::Category::Address)
{
- bool payable = true;
- if (auto const* contractType = dynamic_cast<ContractType const*>(argType.get()))
- payable = contractType->isPayable();
+ bool payable = argType->isExplicitlyConvertibleTo(AddressType::addressPayable());
resultType = make_shared<AddressType>(payable ? StateMutability::Payable : StateMutability::NonPayable);
}
}
diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp
index 56735698..afedbb69 100644
--- a/libsolidity/ast/Types.cpp
+++ b/libsolidity/ast/Types.cpp
@@ -2641,8 +2641,8 @@ bool FunctionType::operator==(Type const& _other) const
bool FunctionType::isExplicitlyConvertibleTo(Type const& _convertTo) const
{
- if (m_kind == Kind::External && _convertTo.category() == Category::Address)
- return true;
+ if (m_kind == Kind::External && _convertTo == AddressType::address())
+ return true;
return _convertTo.category() == category();
}