mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
special handle of send
This commit is contained in:
parent
ce6126094a
commit
e72a014cf4
@ -534,7 +534,8 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall)
|
||||
true,
|
||||
true
|
||||
),
|
||||
{}
|
||||
{},
|
||||
true
|
||||
);
|
||||
break;
|
||||
case Location::Suicide:
|
||||
@ -1034,8 +1035,8 @@ void ExpressionCompiler::appendHighBitsCleanup(IntegerType const& _typeOnStack)
|
||||
|
||||
void ExpressionCompiler::appendExternalFunctionCall(
|
||||
FunctionType const& _functionType,
|
||||
vector<ASTPointer<Expression const>> const& _arguments
|
||||
)
|
||||
vector<ASTPointer<Expression const>> const& _arguments,
|
||||
bool isSend)
|
||||
{
|
||||
solAssert(_functionType.takesArbitraryParameters() ||
|
||||
_arguments.size() == _functionType.getParameterTypes().size(), "");
|
||||
@ -1105,8 +1106,15 @@ void ExpressionCompiler::appendExternalFunctionCall(
|
||||
m_context << eth::Instruction::CALL;
|
||||
|
||||
//Propagate error condition (if CALL pushes 0 on stack).
|
||||
m_context << eth::Instruction::ISZERO;
|
||||
m_context.appendConditionalJumpTo(m_context.errorTag());
|
||||
if (!isSend)
|
||||
{
|
||||
m_context << eth::Instruction::ISZERO;
|
||||
m_context.appendConditionalJumpTo(m_context.errorTag());
|
||||
} else
|
||||
{
|
||||
auto tag = m_context.appendConditionalJump();
|
||||
m_context << eth::Instruction::STOP << tag;
|
||||
}
|
||||
|
||||
if (_functionType.valueSet())
|
||||
m_context << eth::Instruction::POP;
|
||||
|
@ -100,7 +100,8 @@ private:
|
||||
/// Appends code to call a function of the given type with the given arguments.
|
||||
void appendExternalFunctionCall(
|
||||
FunctionType const& _functionType,
|
||||
std::vector<ASTPointer<Expression const>> const& _arguments
|
||||
std::vector<ASTPointer<Expression const>> const& _arguments,
|
||||
bool isSend = false
|
||||
);
|
||||
/// Appends code that evaluates the given arguments and moves the result to memory encoded as
|
||||
/// specified by the ABI. The memory offset is expected to be on the stack and is updated by
|
||||
|
Loading…
Reference in New Issue
Block a user