*** empty log message ***

This commit is contained in:
hyung-hwan 2006-02-05 06:10:43 +00:00
parent 37078b8afc
commit b54441bfc1
2 changed files with 18 additions and 8 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: parse.c,v 1.44 2006-02-04 19:37:40 bacon Exp $ * $Id: parse.c,v 1.45 2006-02-05 06:10:43 bacon Exp $
*/ */
#include <xp/awk/awk.h> #include <xp/awk/awk.h>
@ -504,9 +504,10 @@ static xp_awk_node_t* __parse_block (xp_awk_t* awk, xp_bool_t is_top)
{ {
xp_awk_node_t* head, * curr, * node; xp_awk_node_t* head, * curr, * node;
xp_awk_node_block_t* block; xp_awk_node_block_t* block;
xp_size_t nlocals, tmp; xp_size_t nlocals, nlocals_max, tmp;
nlocals = xp_awk_tab_getsize(&awk->parse.locals); nlocals = xp_awk_tab_getsize(&awk->parse.locals);
nlocals_max = awk->parse.nlocals_max;
/* local variable declarations */ /* local variable declarations */
if (awk->opt.parse & XP_AWK_EXPLICIT) { if (awk->opt.parse & XP_AWK_EXPLICIT) {
@ -581,6 +582,8 @@ static xp_awk_node_t* __parse_block (xp_awk_t* awk, xp_bool_t is_top)
} }
tmp = xp_awk_tab_getsize(&awk->parse.locals); tmp = xp_awk_tab_getsize(&awk->parse.locals);
if (tmp > awk->parse.nlocals_max) awk->parse.nlocals_max = tmp;
xp_awk_tab_remrange ( xp_awk_tab_remrange (
&awk->parse.locals, nlocals - 1, tmp - nlocals); &awk->parse.locals, nlocals - 1, tmp - nlocals);
@ -591,14 +594,14 @@ static xp_awk_node_t* __parse_block (xp_awk_t* awk, xp_bool_t is_top)
block->next = XP_NULL; block->next = XP_NULL;
block->body = head; block->body = head;
/* migrate all local variables to a top-level block */ /* migrate all block-local variables to a top-level block */
if (is_top) { if (is_top) {
block->nlocals = awk->parse.nlocals_max - nlocals; block->nlocals = awk->parse.nlocals_max - nlocals;
awk->parse.nlocals_max = nlocals; awk->parse.nlocals_max = nlocals_max;
} }
else { else {
/*block->nlocals = tmp - nlocals;*/
block->nlocals = 0; block->nlocals = 0;
if (tmp > awk->parse.nlocals_max) awk->parse.nlocals_max = tmp;
} }
return (xp_awk_node_t*)block; return (xp_awk_node_t*)block;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: tree.c,v 1.16 2006-02-04 19:31:51 bacon Exp $ * $Id: tree.c,v 1.17 2006-02-05 06:10:43 bacon Exp $
*/ */
#include <xp/awk/awk.h> #include <xp/awk/awk.h>
@ -121,6 +121,7 @@ static int __print_expr_node_list (xp_awk_node_t* tree)
static void __print_statements (xp_awk_node_t* tree, int depth) static void __print_statements (xp_awk_node_t* tree, int depth)
{ {
xp_awk_node_t* p = tree; xp_awk_node_t* p = tree;
xp_size_t i;
while (p != XP_NULL) { while (p != XP_NULL) {
@ -133,11 +134,17 @@ static void __print_statements (xp_awk_node_t* tree, int depth)
case XP_AWK_NODE_BLOCK: case XP_AWK_NODE_BLOCK:
__print_tabs (depth); __print_tabs (depth);
xp_printf (XP_TEXT("{\n")); xp_printf (XP_TEXT("{\n"));
if (((xp_awk_node_block_t*)p)->nlocals > 0) { if (((xp_awk_node_block_t*)p)->nlocals > 0) {
__print_tabs (depth + 1); __print_tabs (depth + 1);
xp_printf (XP_TEXT("NLOCALS=>%u;\n"), xp_printf (XP_TEXT("local "));
(unsigned int)((xp_awk_node_block_t*)p)->nlocals);
for (i = 0; i < ((xp_awk_node_block_t*)p)->nlocals - 1; i++) {
xp_printf (XP_TEXT("__local%u, "), (unsigned int)i);
}
xp_printf (XP_TEXT("__local%u;\n"), (unsigned int)i);
} }
__print_statements (((xp_awk_node_block_t*)p)->body, depth + 1); __print_statements (((xp_awk_node_block_t*)p)->body, depth + 1);
__print_tabs (depth); __print_tabs (depth);
xp_printf (XP_TEXT("}\n")); xp_printf (XP_TEXT("}\n"));