*** empty log message ***

This commit is contained in:
hyung-hwan 2006-04-19 04:18:43 +00:00
parent 38ff71c2f2
commit fa80f5dade
3 changed files with 64 additions and 22 deletions

View File

@ -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 <xp/awk/awk_i.h>
@ -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)

View File

@ -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 <xp/awk/awk_i.h>
@ -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');

19
ase/test/awk/t1.awk Normal file
View File

@ -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);
}