summaryrefslogtreecommitdiff
path: root/idlc/source/astexpression.cxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2015-09-27 19:23:05 +0200
committerStephan Bergmann <sbergman@redhat.com>2015-09-28 08:12:15 +0200
commita5bb6eff8672f5a6e7ed1f885f69ca8434db6ce7 (patch)
tree97f5ad5248f70b4a348dcfb829e0a3ff368c7303 /idlc/source/astexpression.cxx
parent1f8723bf91bd48d432f1d2b930d0908ff28f44df (diff)
Return unique_ptr from AstExpression::eval_* functions
...generally, idlc leaks most memory, and e.g. trying to turn AstExpression::m_exprValue into a unique_ptr would fail because AstExpression::eval_symbol returns a pointer to an object "owned" elsewhere (but never actually deleted by its owner). So improvement of idlc ends here---for one, it does not improve anything to try and make idlc not leak memory, and for another, idlc is doomed to go away anyway. Change-Id: I36f54130c8bfd1933126ae7f8a982e50d9bc616e
Diffstat (limited to 'idlc/source/astexpression.cxx')
-rw-r--r--idlc/source/astexpression.cxx18
1 files changed, 9 insertions, 9 deletions
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
index 3798b7ac04e9..593cdb65cd14 100644
--- a/idlc/source/astexpression.cxx
+++ b/idlc/source/astexpression.cxx
@@ -885,19 +885,19 @@ void AstExpression::evaluate()
case EC_mul:
case EC_div:
case EC_mod:
- m_exprValue = eval_bin_op();
+ m_exprValue = eval_bin_op().release();
break;
case EC_or:
case EC_xor:
case EC_and:
case EC_left:
case EC_right:
- m_exprValue = eval_bit_op();
+ m_exprValue = eval_bit_op().release();
break;
case EC_u_plus:
case EC_u_minus:
case EC_bit_neg:
- m_exprValue = eval_un_op();
+ m_exprValue = eval_un_op().release();
break;
case EC_symbol:
m_exprValue = eval_symbol();
@@ -907,7 +907,7 @@ void AstExpression::evaluate()
}
}
-AstExprValue* AstExpression::eval_bin_op()
+std::unique_ptr<AstExprValue> AstExpression::eval_bin_op()
{
ExprType eType = ET_double;
@@ -955,10 +955,10 @@ AstExprValue* AstExpression::eval_bin_op()
return NULL;
}
- return retval.release();
+ return retval;
}
-AstExprValue* AstExpression::eval_bit_op()
+std::unique_ptr<AstExprValue> AstExpression::eval_bit_op()
{
if (m_subExpr1 == NULL || m_subExpr2 == NULL)
return NULL;
@@ -997,10 +997,10 @@ AstExprValue* AstExpression::eval_bit_op()
return NULL;
}
- return retval.release();
+ return retval;
}
-AstExprValue* AstExpression::eval_un_op()
+std::unique_ptr<AstExprValue> AstExpression::eval_un_op()
{
if (m_subExpr1 == NULL)
return NULL;
@@ -1030,7 +1030,7 @@ AstExprValue* AstExpression::eval_un_op()
return NULL;
}
- return retval.release();
+ return retval;
}
AstExprValue* AstExpression::eval_symbol()