From fa80f5dadeaef88c23204cd9d7ff74c1b5a86de6 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Wed, 19 Apr 2006 04:18:43 +0000 Subject: [PATCH] *** empty log message *** --- ase/awk/run.c | 9 +++++-- ase/awk/sa.c | 58 +++++++++++++++++++++++++++++---------------- ase/test/awk/t1.awk | 19 +++++++++++++++ 3 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 ase/test/awk/t1.awk diff --git a/ase/awk/run.c b/ase/awk/run.c index c465c596..6182f985 100644 --- a/ase/awk/run.c +++ b/ase/awk/run.c @@ -1,5 +1,5 @@ /* - * $Id: run.c,v 1.60 2006-04-19 03:42:08 bacon Exp $ + * $Id: run.c,v 1.61 2006-04-19 04:18:43 bacon Exp $ */ #include @@ -763,6 +763,7 @@ static xp_awk_val_t* __do_assignment ( { int n; +/* TODO: need to check if the old value is a map?? prevent the assignment? */ n = xp_awk_map_putx ( &awk->run.named, var->id.name, val, XP_NULL); if (n < 0) PANIC (awk, XP_AWK_ENOMEM); @@ -771,18 +772,21 @@ static xp_awk_val_t* __do_assignment ( } else if (var->type == XP_AWK_NDE_GLOBAL) { +/* TODO: need to check if the old value is a map?? prevent the assignment? */ xp_awk_refdownval (awk, STACK_GLOBAL(awk,var->id.idxa)); STACK_GLOBAL(awk,var->id.idxa) = val; xp_awk_refupval (val); } else if (var->type == XP_AWK_NDE_LOCAL) { +/* TODO: need to check if the old value is a map?? prevent the assignment? */ xp_awk_refdownval (awk, STACK_LOCAL(awk,var->id.idxa)); STACK_LOCAL(awk,var->id.idxa) = val; xp_awk_refupval (val); } else if (var->type == XP_AWK_NDE_ARG) { +/* TODO: need to check if the old value is a map?? prevent the assignment? */ xp_awk_refdownval (awk, STACK_ARG(awk,var->id.idxa)); STACK_ARG(awk,var->id.idxa) = val; xp_awk_refupval (val); @@ -843,7 +847,8 @@ static xp_awk_val_t* __do_assignment_map ( if (tmp == XP_NULL) PANIC (awk, XP_AWK_ENOMEM); /* decrease the reference count of the previous value - - * in fact, this is not necessary as map is always xp_awk_val_nil here. */ + * in fact, this is not necessary as map is always + * xp_awk_val_nil here. */ xp_awk_refdownval (awk, (xp_awk_val_t*)map); if (var->type == XP_AWK_NDE_GLOBALIDX) diff --git a/ase/awk/sa.c b/ase/awk/sa.c index 1ffe4d8c..58a60dfe 100644 --- a/ase/awk/sa.c +++ b/ase/awk/sa.c @@ -1,5 +1,5 @@ /* - * $Id: sa.c,v 1.16 2006-04-16 04:31:38 bacon Exp $ + * $Id: sa.c,v 1.17 2006-04-19 04:18:43 bacon Exp $ */ #include @@ -162,7 +162,7 @@ xp_str_t* xp_str_open (xp_str_t* str, xp_size_t capa) return XP_NULL; } - str->size = 0; + str->size = 0; str->capa = capa; str->buf[0] = XP_CHAR('\0'); @@ -252,8 +252,10 @@ static xp_char_t* __adjust_format (const xp_char_t* format) if (xp_str_open (&str, 256) == XP_NULL) return XP_NULL; - while (*fp != XP_CHAR('\0')) { - while (*fp != XP_CHAR('\0') && *fp != XP_CHAR('%')) { + while (*fp != XP_CHAR('\0')) + { + while (*fp != XP_CHAR('\0') && *fp != XP_CHAR('%')) + { ADDC (str, *fp++); } @@ -266,12 +268,15 @@ static xp_char_t* __adjust_format (const xp_char_t* format) ch = *fp++; /* flags */ - for (;;) { + for (;;) + { if (ch == XP_CHAR(' ') || ch == XP_CHAR('+') || - ch == XP_CHAR('-') || ch == XP_CHAR('#')) { + ch == XP_CHAR('-') || ch == XP_CHAR('#')) + { ADDC (str, ch); } - else if (ch == XP_CHAR('0')) { + else if (ch == XP_CHAR('0')) + { ADDC (str, ch); ch = *fp++; break; @@ -283,21 +288,26 @@ static xp_char_t* __adjust_format (const xp_char_t* format) /* check the width */ if (ch == XP_CHAR('*')) ADDC (str, ch); - else { - while (xp_isdigit(ch)) { + else + { + while (xp_isdigit(ch)) + { ADDC (str, ch); ch = *fp++; } } /* precision */ - if (ch == XP_CHAR('.')) { + if (ch == XP_CHAR('.')) + { ADDC (str, ch); ch = *fp++; if (ch == XP_CHAR('*')) ADDC (str, ch); - else { - while (xp_isdigit(ch)) { + else + { + while (xp_isdigit(ch)) + { ADDC (str, ch); ch = *fp++; } @@ -305,9 +315,11 @@ static xp_char_t* __adjust_format (const xp_char_t* format) } /* modifier */ - for (modifier = 0;;) { + for (modifier = 0;;) + { if (ch == XP_CHAR('h')) modifier = MOD_SHORT; - else if (ch == XP_CHAR('l')) { + else if (ch == XP_CHAR('l')) + { modifier = (modifier == MOD_LONG)? MOD_LONGLONG: MOD_LONG; } else break; @@ -317,13 +329,15 @@ static xp_char_t* __adjust_format (const xp_char_t* format) /* type */ if (ch == XP_CHAR('%')) ADDC (str, ch); - else if (ch == XP_CHAR('c') || ch == XP_CHAR('s')) { + else if (ch == XP_CHAR('c') || ch == XP_CHAR('s')) + { #if !defined(XP_CHAR_IS_MCHAR) && !defined(_WIN32) ADDC (str, 'l'); #endif ADDC (str, ch); } - else if (ch == XP_CHAR('C') || ch == XP_CHAR('S')) { + else if (ch == XP_CHAR('C') || ch == XP_CHAR('S')) + { #ifdef _WIN32 ADDC (str, ch); #else @@ -335,14 +349,18 @@ static xp_char_t* __adjust_format (const xp_char_t* format) } else if (ch == XP_CHAR('d') || ch == XP_CHAR('i') || ch == XP_CHAR('o') || ch == XP_CHAR('u') || - ch == XP_CHAR('x') || ch == XP_CHAR('X')) { - if (modifier == MOD_SHORT) { + ch == XP_CHAR('x') || ch == XP_CHAR('X')) + { + if (modifier == MOD_SHORT) + { ADDC (str, 'h'); } - else if (modifier == MOD_LONG) { + else if (modifier == MOD_LONG) + { ADDC (str, 'l'); } - else if (modifier == MOD_LONGLONG) { + else if (modifier == MOD_LONGLONG) + { #if defined(_WIN32) && !defined(__LCC__) ADDC (str, 'I'); ADDC (str, '6'); diff --git a/ase/test/awk/t1.awk b/ase/test/awk/t1.awk new file mode 100644 index 00000000..77eb4838 --- /dev/null +++ b/ase/test/awk/t1.awk @@ -0,0 +1,19 @@ +function sum(i, k, y) +{ + + y = 0; + for (k = i; k; k = k - 1) + { + y = y + k; + } + + return y; + y = 10; + return y; +} + +BEGIN { + //s = sum(10000000); + s = sum (100); +} +