fixed a bug in qse_awk_rtx_call()
This commit is contained in:
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user