fixed a bug in qse_awk_rtx_call()

This commit is contained in:
2009-02-17 19:41:53 +00:00
parent b9958d4ff7
commit fed0a952ab
6 changed files with 85 additions and 39 deletions

View File

@ -172,14 +172,15 @@ static const qse_char_t* __geterrstr (int errnum)
return QSE_T("unknown error");
}
const qse_char_t* qse_awk_geterrstr (qse_awk_t* awk, int num)
const qse_char_t* qse_awk_geterrstr (qse_awk_t* awk, qse_awk_errnum_t num)
{
if (awk != QSE_NULL &&
awk->errstr[num] != QSE_NULL) return awk->errstr[num];
return __geterrstr (num);
}
int qse_awk_seterrstr (qse_awk_t* awk, int num, const qse_char_t* str)
int qse_awk_seterrstr (
qse_awk_t* awk, qse_awk_errnum_t num, const qse_char_t* str)
{
qse_char_t* dup;

View File

@ -1474,7 +1474,7 @@ int qse_awk_rtx_call (
qse_awk_rtx_t* rtx, const qse_char_t* name,
qse_awk_val_t** args, qse_size_t nargs)
{
int ret;
int ret = 0;
qse_map_pair_t* pair;
qse_awk_fun_t* fun;
struct capture_retval_data_t crdata;
@ -1543,29 +1543,37 @@ int qse_awk_rtx_call (
if (crdata.val == QSE_NULL)
{
QSE_ASSERT (rtx->errnum != QSE_AWK_ENOERR);
v = qse_awk_val_nil; /* defaults to nil */
ret = -1;
}
else
{
if (rtx->errnum == QSE_AWK_ENOERR)
{
if (rtx->rcb.on_exit != QSE_NULL)
rtx->rcb.on_exit (rtx, crdata.val, rtx->rcb.data);
/* exiting with exit() */
v = crdata.val;
/* no need to ref-up as it is done in
* capture_retval_on_exit() */
}
else
{
v = qse_awk_val_nil; /* defaults to nil */
ret = -1;
}
else ret = -1;
qse_awk_rtx_refdownval(rtx, crdata.val);
}
}
else
{
else
{
/* the reference count of crdata.val is updated in
* capture_retval_on_exit(). update reference count of
* v here to balance it */
qse_awk_rtx_refupval (rtx, v);
if (rtx->rcb.on_exit != QSE_NULL)
rtx->rcb.on_exit (rtx, v, rtx->rcb.data);
qse_awk_rtx_refdownval (rtx, v);
}
if (rtx->rcb.on_exit != QSE_NULL)
rtx->rcb.on_exit (rtx, v, rtx->rcb.data);
qse_awk_rtx_refdownval (rtx, v);
return ret;
}