From 66b0bdd602e952f20fa98f6ce5430cea68d4f598 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 16 Jul 2010 12:30:13 +0300 Subject: Move to gawk-2.15.4. --- eval.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 449ab071..543d1298 100644 --- a/eval.c +++ b/eval.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991, 1992 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Progamming Language. @@ -318,7 +318,10 @@ register NODE *volatile tree; break; case Node_K_delete: - do_delete(tree->lnode, tree->rnode); + if (tree->rnode != NULL) + do_delete(tree->lnode, tree->rnode); + else + assoc_clear(tree->lnode); break; case Node_K_next: @@ -967,18 +970,20 @@ NODE *arg_list; /* Node_expression_list of calling args. */ /* should we free arg->var_value ? */ arg->var_array = n->var_array; arg->type = Node_var_array; + arg->array_size = n->array_size; + arg->table_size = n->table_size; } - unref(n->lnode); + /* n->lnode overlays the array size, don't unref it if array */ + if (n->type != Node_var_array) + unref(n->lnode); freenode(n); count--; } while (count-- > 0) { n = *sp++; /* if n is an (local) array, all the elements should be freed */ - if (n->type == Node_var_array) { + if (n->type == Node_var_array) assoc_clear(n); - free(n->var_array); - } unref(n->lnode); freenode(n); } -- cgit v1.2.3