aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-02-24 08:27:36 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-02-24 08:27:36 +0800
commit4d290e551c2d563671f9d56744883d3f3dff98ec (patch)
tree9f4a581d0fb76d744a242678bc6dba1c2d5882a9 /libsolidity
parent59514d8268585f02aa1abb1fdb1b56bcf6e56ef4 (diff)
downloaddexon-solidity-4d290e551c2d563671f9d56744883d3f3dff98ec.tar.gz
dexon-solidity-4d290e551c2d563671f9d56744883d3f3dff98ec.tar.zst
dexon-solidity-4d290e551c2d563671f9d56744883d3f3dff98ec.zip
Disallow setting .gas() on .transfer()
Diffstat (limited to 'libsolidity')
-rw-r--r--libsolidity/ast/Types.cpp3
-rw-r--r--libsolidity/codegen/ExpressionCompiler.cpp12
2 files changed, 5 insertions, 10 deletions
diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp
index 3e3a3818..7fccccbc 100644
--- a/libsolidity/ast/Types.cpp
+++ b/libsolidity/ast/Types.cpp
@@ -2315,10 +2315,9 @@ MemberList::MemberMap FunctionType::nativeMembers(ContractDefinition const*) con
case Location::Bare:
case Location::BareCallCode:
case Location::BareDelegateCall:
- case Location::Transfer:
{
MemberList::MemberMap members;
- if (m_location != Location::BareDelegateCall && m_location != Location::DelegateCall && m_location != Location::Transfer)
+ if (m_location != Location::BareDelegateCall && m_location != Location::DelegateCall)
{
if (m_isPayable)
members.push_back(MemberList::Member(
diff --git a/libsolidity/codegen/ExpressionCompiler.cpp b/libsolidity/codegen/ExpressionCompiler.cpp
index 4956871d..fd4d87a5 100644
--- a/libsolidity/codegen/ExpressionCompiler.cpp
+++ b/libsolidity/codegen/ExpressionCompiler.cpp
@@ -620,19 +620,15 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall)
_functionCall.expression().accept(*this);
// Provide the gas stipend manually at first because we may send zero ether.
// Will be zeroed if we send more than zero ether.
- if (!function.gasSet())
- m_context << u256(eth::GasCosts::callStipend);
+ m_context << u256(eth::GasCosts::callStipend);
arguments.front()->accept(*this);
utils().convertType(
*arguments.front()->annotation().type,
*function.parameterTypes().front(), true
);
- if (!function.gasSet())
- {
- // gas <- gas * !value
- m_context << Instruction::SWAP1 << Instruction::DUP2;
- m_context << Instruction::ISZERO << Instruction::MUL << Instruction::SWAP1;
- }
+ // gas <- gas * !value
+ m_context << Instruction::SWAP1 << Instruction::DUP2;
+ m_context << Instruction::ISZERO << Instruction::MUL << Instruction::SWAP1;
appendExternalFunctionCall(
FunctionType(
TypePointers{},