diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2015-09-27 19:23:05 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2015-09-28 08:12:15 +0200 |
commit | a5bb6eff8672f5a6e7ed1f885f69ca8434db6ce7 (patch) | |
tree | 97f5ad5248f70b4a348dcfb829e0a3ff368c7303 /idlc/source | |
parent | 1f8723bf91bd48d432f1d2b930d0908ff28f44df (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')
-rw-r--r-- | idlc/source/astexpression.cxx | 18 |
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() |