*** empty log message ***

This commit is contained in:
hyung-hwan 2006-07-13 03:10:35 +00:00
parent ffbc3c3042
commit e1d5b43bae
6 changed files with 62 additions and 57 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: extio.c,v 1.17 2006-07-01 16:07:06 bacon Exp $ * $Id: extio.c,v 1.18 2006-07-13 03:10:34 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -249,7 +249,7 @@ int xp_awk_writeextio (
} }
/* convert the value to string representation first */ /* convert the value to string representation first */
if (xp_awk_valtostr(v, errnum, &buf) == XP_NULL) if (xp_awk_valtostr(v, errnum, &buf, XP_NULL) == XP_NULL)
{ {
xp_str_close (&buf); xp_str_close (&buf);
return -1; return -1;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: func.c,v 1.6 2006-06-30 04:25:53 bacon Exp $ * $Id: func.c,v 1.7 2006-07-13 03:10:35 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -60,7 +60,7 @@ static int __bfn_close (void* run)
return -1; return -1;
} }
if (xp_awk_valtostr (xp_awk_getarg(run, 0), &errnum, &buf) == XP_NULL) if (xp_awk_valtostr (xp_awk_getarg(run, 0), &errnum, &buf, XP_NULL) == XP_NULL)
{ {
xp_str_close (&buf); xp_str_close (&buf);
xp_awk_seterrnum (run, errnum); xp_awk_seterrnum (run, errnum);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.131 2006-07-12 07:25:15 bacon Exp $ * $Id: run.c,v 1.132 2006-07-13 03:10:35 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -1192,7 +1192,8 @@ static int __run_delete (xp_awk_run_t* run, xp_awk_nde_delete_t* nde)
if (idx == XP_NULL) return -1; if (idx == XP_NULL) return -1;
xp_awk_refupval (idx); xp_awk_refupval (idx);
key = xp_awk_valtostr (idx, &errnum, XP_NULL); key = xp_awk_valtostr (
idx, &errnum, XP_NULL, XP_NULL);
xp_awk_refdownval (run, idx); xp_awk_refdownval (run, idx);
if (key == XP_NULL) PANIC_I (run, errnum); if (key == XP_NULL) PANIC_I (run, errnum);
@ -1269,7 +1270,8 @@ static int __run_delete (xp_awk_run_t* run, xp_awk_nde_delete_t* nde)
if (idx == XP_NULL) return -1; if (idx == XP_NULL) return -1;
xp_awk_refupval (idx); xp_awk_refupval (idx);
key = xp_awk_valtostr (idx, &errnum, XP_NULL); key = xp_awk_valtostr (
idx, &errnum, XP_NULL, XP_NULL);
xp_awk_refdownval (run, idx); xp_awk_refdownval (run, idx);
if (key == XP_NULL) PANIC_I (run, errnum); if (key == XP_NULL) PANIC_I (run, errnum);
@ -1314,7 +1316,7 @@ static int __run_print (xp_awk_run_t* run, xp_awk_nde_print_t* nde)
if (v == XP_NULL) return -1; if (v == XP_NULL) return -1;
xp_awk_refupval (v); xp_awk_refupval (v);
out = xp_awk_valtostr (v, &errnum, XP_NULL); out = xp_awk_valtostr (v, &errnum, XP_NULL, XP_NULL);
if (out == XP_NULL) if (out == XP_NULL)
{ {
xp_awk_refdownval (run, v); xp_awk_refdownval (run, v);
@ -1448,7 +1450,7 @@ static xp_awk_val_t* __eval_group (xp_awk_run_t* run, xp_awk_nde_t* nde)
static xp_awk_val_t* __eval_assignment (xp_awk_run_t* run, xp_awk_nde_t* nde) static xp_awk_val_t* __eval_assignment (xp_awk_run_t* run, xp_awk_nde_t* nde)
{ {
xp_awk_val_t* val, * res; xp_awk_val_t* val, * ret;
xp_awk_nde_ass_t* ass = (xp_awk_nde_ass_t*)nde; xp_awk_nde_ass_t* ass = (xp_awk_nde_ass_t*)nde;
xp_assert (ass->left != XP_NULL && ass->right != XP_NULL); xp_assert (ass->left != XP_NULL && ass->right != XP_NULL);
@ -1515,15 +1517,17 @@ static xp_awk_val_t* __eval_assignment (xp_awk_run_t* run, xp_awk_nde_t* nde)
xp_awk_refupval (val); xp_awk_refupval (val);
} }
res = __do_assignment (run, ass->left, val); ret = __do_assignment (run, ass->left, val);
xp_awk_refdownval (run, val); xp_awk_refdownval (run, val);
return res; return ret;
} }
static xp_awk_val_t* __do_assignment ( static xp_awk_val_t* __do_assignment (
xp_awk_run_t* run, xp_awk_nde_t* var, xp_awk_val_t* val) xp_awk_run_t* run, xp_awk_nde_t* var, xp_awk_val_t* val)
{ {
xp_awk_val_t* ret;
if (val->type == XP_AWK_VAL_MAP) if (val->type == XP_AWK_VAL_MAP)
{ {
/* a map cannot be assigned to a variable */ /* a map cannot be assigned to a variable */
@ -1535,30 +1539,18 @@ static xp_awk_val_t* __do_assignment (
var->type == XP_AWK_NDE_LOCAL || var->type == XP_AWK_NDE_LOCAL ||
var->type == XP_AWK_NDE_ARG) var->type == XP_AWK_NDE_ARG)
{ {
if (__do_assignment_scalar ( ret = __do_assignment_scalar (run, (xp_awk_nde_var_t*)var, val);
run, (xp_awk_nde_var_t*)var, val) == XP_NULL)
{
return XP_NULL;
}
} }
else if (var->type == XP_AWK_NDE_NAMEDIDX || else if (var->type == XP_AWK_NDE_NAMEDIDX ||
var->type == XP_AWK_NDE_GLOBALIDX || var->type == XP_AWK_NDE_GLOBALIDX ||
var->type == XP_AWK_NDE_LOCALIDX || var->type == XP_AWK_NDE_LOCALIDX ||
var->type == XP_AWK_NDE_ARGIDX) var->type == XP_AWK_NDE_ARGIDX)
{ {
if (__do_assignment_map ( ret = __do_assignment_map (run, (xp_awk_nde_var_t*)var, val);
run, (xp_awk_nde_var_t*)var, val) == XP_NULL)
{
return XP_NULL;
}
} }
else if (var->type == XP_AWK_NDE_POS) else if (var->type == XP_AWK_NDE_POS)
{ {
if (__do_assignment_pos ( ret = __do_assignment_pos (run, (xp_awk_nde_pos_t*)var, val);
run, (xp_awk_nde_pos_t*)var, val) == XP_NULL)
{
return XP_NULL;
}
} }
else else
{ {
@ -1566,7 +1558,7 @@ static xp_awk_val_t* __do_assignment (
PANIC (run, XP_AWK_EINTERNAL); PANIC (run, XP_AWK_EINTERNAL);
} }
return val; return ret;
} }
static xp_awk_val_t* __do_assignment_scalar ( static xp_awk_val_t* __do_assignment_scalar (
@ -1750,6 +1742,7 @@ static xp_awk_val_t* __do_assignment_pos (
xp_long_t lv; xp_long_t lv;
xp_real_t rv; xp_real_t rv;
xp_char_t* str; xp_char_t* str;
xp_size_t len;
int n, errnum; int n, errnum;
/* get the position number */ /* get the position number */
@ -1765,14 +1758,14 @@ static xp_awk_val_t* __do_assignment_pos (
if (lv < 0) PANIC (run, XP_AWK_EPOSIDX); if (lv < 0) PANIC (run, XP_AWK_EPOSIDX);
/* convert the value to the string */ /* convert the value to the string */
str = xp_awk_valtostr (val, &errnum, XP_NULL); str = xp_awk_valtostr (val, &errnum, XP_NULL, &len);
if (str == XP_NULL) PANIC (run, errnum); if (str == XP_NULL) PANIC (run, errnum);
if (lv == 0) if (lv == 0)
{ {
__clear_record (run, xp_false); __clear_record (run, xp_false);
if (xp_str_cpy (&run->inrec.line, str) == (xp_size_t)-1) if (xp_str_ncpy (&run->inrec.line, str, len) == (xp_size_t)-1)
{ {
xp_free (str); xp_free (str);
PANIC (run, errnum); PANIC (run, errnum);
@ -1791,12 +1784,8 @@ static xp_awk_val_t* __do_assignment_pos (
} }
else else
{ {
/* TODO: change xp_awk_valtostr to return the length
* so that xp_strlen doesn't have to be called here */
xp_size_t xlen = xp_strlen(str);
if (__recomp_record_fields ( if (__recomp_record_fields (
run, (xp_size_t)lv, str, xlen, &errnum) == -1) run, (xp_size_t)lv, str, len, &errnum) == -1)
{ {
xp_free (str); xp_free (str);
__clear_record (run, xp_false); __clear_record (run, xp_false);
@ -1817,6 +1806,8 @@ static xp_awk_val_t* __do_assignment_pos (
xp_awk_refdownval (run, run->inrec.d0); xp_awk_refdownval (run, run->inrec.d0);
run->inrec.d0 = v; run->inrec.d0 = v;
xp_awk_refupval (v); xp_awk_refupval (v);
val = v;
} }
return val; return val;
@ -2695,14 +2686,14 @@ static xp_awk_val_t* __eval_binop_concat (
PANIC (run, XP_AWK_ENOMEM); PANIC (run, XP_AWK_ENOMEM);
} }
if (xp_awk_valtostr (left, &errnum, &lv) == XP_NULL) if (xp_awk_valtostr (left, &errnum, &lv, XP_NULL) == XP_NULL)
{ {
xp_str_close (&lv); xp_str_close (&lv);
xp_str_close (&rv); xp_str_close (&rv);
PANIC (run, errnum); PANIC (run, errnum);
} }
if (xp_awk_valtostr (right, &errnum, &rv) == XP_NULL) if (xp_awk_valtostr (right, &errnum, &rv, XP_NULL) == XP_NULL)
{ {
xp_str_close (&lv); xp_str_close (&lv);
xp_str_close (&rv); xp_str_close (&rv);
@ -3494,7 +3485,7 @@ static xp_awk_val_t* __eval_getline (xp_awk_run_t* run, xp_awk_nde_t* nde)
if (v == XP_NULL) return XP_NULL; if (v == XP_NULL) return XP_NULL;
xp_awk_refupval (v); xp_awk_refupval (v);
in = xp_awk_valtostr (v, &errnum, XP_NULL); in = xp_awk_valtostr (v, &errnum, XP_NULL, XP_NULL);
if (in == XP_NULL) if (in == XP_NULL)
{ {
xp_awk_refdownval (run, v); xp_awk_refdownval (run, v);
@ -3938,7 +3929,7 @@ static xp_char_t* __idxnde_to_str (xp_awk_run_t* run, xp_awk_nde_t* nde)
xp_awk_refupval (idx); xp_awk_refupval (idx);
str = xp_awk_valtostr (idx, &errnum, XP_NULL); str = xp_awk_valtostr (idx, &errnum, XP_NULL, XP_NULL);
if (str == XP_NULL) if (str == XP_NULL)
{ {
xp_awk_refdownval (run, idx); xp_awk_refdownval (run, idx);
@ -3977,7 +3968,8 @@ static xp_char_t* __idxnde_to_str (xp_awk_run_t* run, xp_awk_nde_t* nde)
PANIC (run, XP_AWK_ENOMEM); PANIC (run, XP_AWK_ENOMEM);
} }
if (xp_awk_valtostr (idx, &errnum, &idxstr) == XP_NULL) if (xp_awk_valtostr (idx,
&errnum, &idxstr, XP_NULL) == XP_NULL)
{ {
xp_awk_refdownval (run, idx); xp_awk_refdownval (run, idx);
xp_str_close (&idxstr); xp_str_close (&idxstr);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: val.c,v 1.40 2006-07-12 17:04:02 bacon Exp $ * $Id: val.c,v 1.41 2006-07-13 03:10:35 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -314,7 +314,8 @@ xp_bool_t xp_awk_valtobool (xp_awk_val_t* val)
return xp_false; return xp_false;
} }
xp_char_t* xp_awk_valtostr (xp_awk_val_t* v, int* errnum, xp_str_t* buf) xp_char_t* xp_awk_valtostr (
xp_awk_val_t* v, int* errnum, xp_str_t* buf, xp_size_t* len)
{ {
if (v->type == XP_AWK_VAL_NIL) if (v->type == XP_AWK_VAL_NIL)
{ {
@ -322,12 +323,19 @@ xp_char_t* xp_awk_valtostr (xp_awk_val_t* v, int* errnum, xp_str_t* buf)
{ {
xp_char_t* tmp; xp_char_t* tmp;
tmp = xp_strdup (XP_T("")); tmp = xp_strdup (XP_T(""));
if (tmp == XP_NULL) *errnum = XP_AWK_ENOMEM; if (tmp == XP_NULL)
{
*errnum = XP_AWK_ENOMEM;
return XP_NULL;
}
if (len != XP_NULL) *len = 0;
return tmp; return tmp;
} }
else else
{ {
xp_str_clear (buf); xp_str_clear (buf);
if (len != XP_NULL) *len = XP_STR_LEN(buf);
return XP_STR_BUF(buf); return XP_STR_BUF(buf);
} }
} }
@ -336,7 +344,7 @@ xp_char_t* xp_awk_valtostr (xp_awk_val_t* v, int* errnum, xp_str_t* buf)
{ {
xp_char_t* tmp; xp_char_t* tmp;
xp_long_t t; xp_long_t t;
xp_size_t len = 0; xp_size_t l = 0;
t = ((xp_awk_val_int_t*)v)->val; t = ((xp_awk_val_int_t*)v)->val;
if (t == 0) if (t == 0)
@ -353,6 +361,7 @@ xp_char_t* xp_awk_valtostr (xp_awk_val_t* v, int* errnum, xp_str_t* buf)
tmp[0] = XP_T('0'); tmp[0] = XP_T('0');
tmp[1] = XP_T('\0'); tmp[1] = XP_T('\0');
if (len != XP_NULL) *len = 1;
return tmp; return tmp;
} }
else else
@ -364,53 +373,55 @@ xp_char_t* xp_awk_valtostr (xp_awk_val_t* v, int* errnum, xp_str_t* buf)
return XP_NULL; return XP_NULL;
} }
if (len != XP_NULL) *len = XP_STR_LEN(buf);
return XP_STR_BUF(buf); return XP_STR_BUF(buf);
} }
} }
/* non-zero values */ /* non-zero values */
if (t < 0) { t = -t; len++; } if (t < 0) { t = -t; l++; }
while (t > 0) { len++; t /= 10; } while (t > 0) { l++; t /= 10; }
if (buf == XP_NULL) if (buf == XP_NULL)
{ {
tmp = xp_malloc ((len + 1) * xp_sizeof(xp_char_t)); tmp = xp_malloc ((l + 1) * xp_sizeof(xp_char_t));
if (tmp == XP_NULL) if (tmp == XP_NULL)
{ {
*errnum = XP_AWK_ENOMEM; *errnum = XP_AWK_ENOMEM;
return XP_NULL; return XP_NULL;
} }
tmp[len] = XP_T('\0'); tmp[l] = XP_T('\0');
} }
else else
{ {
/* clear the buffer */
xp_str_clear (buf); xp_str_clear (buf);
/* get the current end of the buffer */ tmp = XP_STR_BUF(buf);
tmp = XP_STR_BUF(buf) + XP_STR_LEN(buf);
/* extend the buffer */ /* extend the buffer */
if (xp_str_nccat ( if (xp_str_nccat (
buf, XP_T(' '), len) == (xp_size_t)-1) buf, XP_T(' '), l) == (xp_size_t)-1)
{ {
*errnum = XP_AWK_ENOMEM; *errnum = XP_AWK_ENOMEM;
return XP_NULL; return XP_NULL;
} }
} }
if (len != XP_NULL) *len = l;
t = ((xp_awk_val_int_t*)v)->val; t = ((xp_awk_val_int_t*)v)->val;
if (t < 0) t = -t; if (t < 0) t = -t;
while (t > 0) while (t > 0)
{ {
tmp[--len] = (xp_char_t)(t % 10) + XP_T('0'); tmp[--l] = (xp_char_t)(t % 10) + XP_T('0');
t /= 10; t /= 10;
} }
if (((xp_awk_val_int_t*)v)->val < 0) tmp[--len] = XP_T('-'); if (((xp_awk_val_int_t*)v)->val < 0) tmp[--l] = XP_T('-');
/*return (buf == XP_NULL) tmp: XP_STR_BUF(buf);*/
return tmp; return tmp;
} }
@ -429,7 +440,7 @@ xp_char_t* xp_awk_valtostr (xp_awk_val_t* v, int* errnum, xp_str_t* buf)
else else
{ {
xp_str_clear (buf); xp_str_clear (buf);
tmp = XP_STR_BUF(buf) + XP_STR_LEN(buf); tmp = XP_STR_BUF(buf);
if (xp_str_ncat (buf, if (xp_str_ncat (buf,
((xp_awk_val_str_t*)v)->buf, ((xp_awk_val_str_t*)v)->buf,
@ -440,6 +451,7 @@ xp_char_t* xp_awk_valtostr (xp_awk_val_t* v, int* errnum, xp_str_t* buf)
} }
} }
if (len != XP_NULL) *len = ((xp_awk_val_str_t*)v)->len;
return tmp; return tmp;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: val.h,v 1.29 2006-07-12 07:25:15 bacon Exp $ * $Id: val.h,v 1.30 2006-07-13 03:10:35 bacon Exp $
*/ */
#ifndef _XP_AWK_VAL_H_ #ifndef _XP_AWK_VAL_H_
@ -115,7 +115,8 @@ void xp_awk_refdownval (xp_awk_run_t* run, xp_awk_val_t* val);
void xp_awk_refdownval_nofree (xp_awk_run_t* run, xp_awk_val_t* val); void xp_awk_refdownval_nofree (xp_awk_run_t* run, xp_awk_val_t* val);
xp_bool_t xp_awk_valtobool (xp_awk_val_t* val); xp_bool_t xp_awk_valtobool (xp_awk_val_t* val);
xp_char_t* xp_awk_valtostr (xp_awk_val_t* val, int* errnum, xp_str_t* buf); xp_char_t* xp_awk_valtostr (
xp_awk_val_t* val, int* errnum, xp_str_t* buf, xp_size_t* len);
void xp_awk_printval (xp_awk_val_t* val); void xp_awk_printval (xp_awk_val_t* val);

View File

@ -33,7 +33,7 @@ global x, y;
//$3 = $2; //$3 = $2;
//$2 = $2; //$2 = $2;
$10 = 10; $20 = 10;
print $0; print $0;
print "--------------------"; print "--------------------";
print "NF ===>>> " NF; print "NF ===>>> " NF;