enhanced eval_getline() in awk.

fixed a bug in awk's printf().
fixed a bug of not incrementing NR and FNR in awk's getline().
added some MPI stuffs
This commit is contained in:
2012-09-10 09:55:22 +00:00
parent efcccc05e7
commit 9cc8d6f76d
9 changed files with 320 additions and 188 deletions

View File

@ -1165,7 +1165,7 @@ int qse_awk_rtx_valtonum (
#ifdef DEBUG_VAL
qse_dprintf (
QSE_T(">>WRONG VALUE TYPE [%d] in qse_awk_rtx_valtonum\n"),
QSE_T(">>WRONG VALUE TYPE [%d] in qse_awk_rtx_valtonum()\n"),
v->type
);
#endif
@ -1225,6 +1225,52 @@ int qse_awk_rtx_strtonum (
return 0; /* long */
}
static qse_ulong_t hash (qse_uint8_t* ptr, qse_size_t len)
{
qse_ulong_t h = 5381;
while (len > 0) h = ((h << 5) + h) + ptr[--len];
return h;
}
qse_long_t qse_awk_rtx_hashval (qse_awk_rtx_t* rtx, qse_awk_val_t* v)
{
qse_long_t hv;
switch (v->type)
{
case QSE_AWK_VAL_NIL:
hv = 0;
break;
case QSE_AWK_VAL_INT:
/*hv = ((qse_awk_val_int_t*)v)->val;*/
hv = (qse_long_t)hash (&((qse_awk_val_int_t*)v)->val, QSE_SIZEOF(((qse_awk_val_int_t*)v)->val));
break;
case QSE_AWK_VAL_FLT:
hv = (qse_long_t)hash (&((qse_awk_val_flt_t*)v)->val, QSE_SIZEOF(((qse_awk_val_flt_t*)v)->val));
break;
case QSE_AWK_VAL_STR:
hv = (qse_long_t)hash (((qse_awk_val_str_t*)v)->val.ptr, ((qse_awk_val_str_t*)v)->val.len * QSE_SIZEOF(qse_char_t));
break;
default:
#ifdef DEBUG_VAL
qse_dprintf (
QSE_T(">>WRONG VALUE TYPE [%d] in qse_awk_rtx_hashval()\n"),
v->type
);
#endif
qse_awk_rtx_seterrnum (rtx, QSE_AWK_EVALTYPE, QSE_NULL);
return -1;
}
return hv & ~(((qse_ulong_t)1) << ((QSE_SIZEOF(qse_ulong_t) * 8) - 1));
}
#if 0
#define DPRINTF run->awk->prmfns->dprintf