]> git.sur5r.net Git - cc65/commitdiff
Fixed an error in the special purpose allocator in expr.c.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 2 Aug 2011 16:46:47 +0000 (16:46 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 2 Aug 2011 16:46:47 +0000 (16:46 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5109 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/expr.c

index b8efe42b1448ca6ff3fc394ad18ac7f07ebc6a08..123e9ad65218e93f002e6f8aa27a0681dfeeb4d6 100644 (file)
@@ -94,10 +94,11 @@ static ExprNode* NewExprNode (unsigned Op)
     ExprNode* N;
 
     /* Do we have some nodes in the list already? */
-    if (FreeExprNodes) {
+    if (FreeNodeCount) {
        /* Use first node from list */
        N = FreeExprNodes;
        FreeExprNodes = N->Left;
+        --FreeNodeCount;
     } else {
        /* Allocate fresh memory */
         N = xmalloc (sizeof (ExprNode));
@@ -124,6 +125,7 @@ static void FreeExprNode (ExprNode* E)
            /* Remember this node for later */
            E->Left = FreeExprNodes;
            FreeExprNodes = E;
+            ++FreeNodeCount;
        } else {
            /* Free the memory */
            xfree (E);
@@ -1016,7 +1018,7 @@ static ExprNode* Factor (void)
            break;
 
        default:
-           if (LooseCharTerm && CurTok.Tok == TOK_STRCON && 
+           if (LooseCharTerm && CurTok.Tok == TOK_STRCON &&
                 SB_GetLen (&CurTok.SVal) == 1) {
                /* A character constant */
                N = GenLiteralExpr (TgtTranslateChar (SB_At (&CurTok.SVal, 0)));
@@ -1471,8 +1473,8 @@ void FreeExpr (ExprNode* Root)
 {
     if (Root) {
        FreeExpr (Root->Left);
-       FreeExpr (Root->Right);
-       FreeExprNode (Root);
+       FreeExpr (Root->Right);
+       FreeExprNode (Root);
     }
 }