special handle of send

This commit is contained in:
Liana Husikyan committed 2015-06-01 13:06:12 +02:00
1 parent ce6126094a
commit e72a014cf4
2 files changed
+15 -6

No files matched your search

+13 -5
View File
@@ -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;
+2 -1
View File
@@ -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