From 64c5165a5b2984d15035dd17d1e953502db25d36 Mon Sep 17 00:00:00 2001 From: cuz Date: Fri, 31 Oct 2003 20:56:40 +0000 Subject: [PATCH] Free expression trees when they're no longer needed git-svn-id: svn://svn.cc65.org/cc65/trunk@2594 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/ca65/expr.c | 14 ++++++++++---- src/ca65/segment.c | 3 +++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ca65/expr.c b/src/ca65/expr.c index 22eace8a4..b5beb8e78 100644 --- a/src/ca65/expr.c +++ b/src/ca65/expr.c @@ -923,18 +923,24 @@ long ConstExpression (void) * not constant. */ { + long Val; + /* Read the expression, and call finalize (exception here, since we * expect a const). */ ExprNode* Expr = FinalizeExpr (Expression ()); - /* Return the value */ + /* Get the value */ if (IsConstExpr (Expr)) { - return GetExprVal (Expr); + Val = GetExprVal (Expr); } else { Error (ERR_CONSTEXPR_EXPECTED); - return 0; + Val = 0; } + + /* Free the expression tree and return the value */ + FreeExpr (Expr); + return Val; } @@ -1644,4 +1650,4 @@ void WriteExpr (ExprNode* Expr) - + diff --git a/src/ca65/segment.c b/src/ca65/segment.c index 3e50d96ac..8fd5e356f 100644 --- a/src/ca65/segment.c +++ b/src/ca65/segment.c @@ -370,6 +370,9 @@ void SegCheck (void) } } + /* We don't need the expression tree any longer */ + FreeExpr (F->V.Expr); + /* Convert the fragment into a literal fragment */ for (I = 0; I < F->Len; ++I) { F->V.Data [I] = Val & 0xFF;