Fri Apr 25 12:42:45 CEST 2003 Stepan Kasal * Fix the following bug: address@hidden gawk-3.1.2]$ ./gawk 'BEGIN{a();b(S)} function a(){delete S}' gawk: cmd. line:1: fatal: delete: illegal use of variable `S' as array address@hidden gawk-3.1.2]$ ./gawk 'BEGIN{a();b(S)} function a(){for(i in S)delete S[i]}' gawk: cmd. line:1: fatal: delete: illegal use of variable `S' as array next release should contain a get_array() function which should fix all problems of this type. diff -urp gawk-3.1.2.orig/array.c gawk-3.1.2/array.c --- gawk-3.1.2.orig/array.c Tue Feb 18 14:57:44 2003 +++ gawk-3.1.2/array.c Fri Apr 25 12:41:01 2003 @@ -406,15 +406,15 @@ do_delete(NODE *symbol, NODE *tree) if (symbol->type == Node_param_list) { symbol = stack_ptr[symbol->param_cnt]; - if (symbol->type == Node_var) { - if (subs != NULL) { - if (do_lint) - lintwarn(_("delete: index `%s' not in array `%s'"), - subs->stptr, symbol->vname); - free_temp(subs); - } - return; + } + if (symbol->type == Node_var && (symbol->flags & SCALAR) == 0) { + if (subs != NULL) { + if (do_lint) + lintwarn(_("delete: index `%s' not in array `%s'"), + subs->stptr, symbol->vname); + free_temp(subs); } + return; } if (symbol->type == Node_array_ref) symbol = symbol->orig_array; @@ -503,8 +503,9 @@ do_delete_loop(NODE *symbol, NODE *tree) if (symbol->type == Node_param_list) { symbol = stack_ptr[symbol->param_cnt]; - if (symbol->type == Node_var) - return; + } + if (symbol->type == Node_var && (symbol->flags & SCALAR) == 0) { + return; } if (symbol->type == Node_array_ref) symbol = symbol->orig_array;