added QSE_AWK_MODERN
This commit is contained in:
@ -209,7 +209,7 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, qse_awk_prm_t* pr
|
||||
qse_lda_setscale (awk->parse.params, QSE_SIZEOF(qse_char_t));
|
||||
qse_lda_setcopier (awk->parse.params, QSE_LDA_COPIER_INLINE);
|
||||
|
||||
awk->opt.trait = QSE_AWK_CLASSIC;
|
||||
awk->opt.trait = QSE_AWK_MODERN;
|
||||
#if defined(__OS2__) || defined(_WIN32) || defined(__DOS__)
|
||||
awk->opt.trait |= QSE_AWK_CRLF;
|
||||
#endif
|
||||
|
@ -5206,6 +5206,7 @@ static qse_awk_nde_t* parse_fncall (
|
||||
qse_awk_loc_t eloc;
|
||||
|
||||
head = curr = QSE_NULL;
|
||||
call = QSE_NULL;
|
||||
nargs = 0;
|
||||
|
||||
if (noarg) goto make_node;
|
||||
@ -5277,6 +5278,17 @@ make_node:
|
||||
|
||||
call->args = head;
|
||||
call->nargs = nargs;
|
||||
|
||||
if (nargs > call->u.fnc.arg.max)
|
||||
{
|
||||
SETERR_LOC (awk, QSE_AWK_EARGTM, xloc);
|
||||
goto oops;
|
||||
}
|
||||
else if (nargs < call->u.fnc.arg.min)
|
||||
{
|
||||
SETERR_LOC (awk, QSE_AWK_EARGTF, xloc);
|
||||
goto oops;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -5293,7 +5305,6 @@ make_node:
|
||||
awk->parse.funs, name->ptr, name->len, call, 0) == QSE_NULL)
|
||||
{
|
||||
SETERR_LOC (awk, QSE_AWK_ENOMEM, xloc);
|
||||
QSE_AWK_FREE (awk, call);
|
||||
goto oops;
|
||||
}
|
||||
}
|
||||
@ -5301,6 +5312,7 @@ make_node:
|
||||
return (qse_awk_nde_t*)call;
|
||||
|
||||
oops:
|
||||
if (call) QSE_AWK_FREE (awk, call);
|
||||
if (head) qse_awk_clrpt (awk, head);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
@ -5512,9 +5512,16 @@ static qse_awk_val_t* eval_cnd (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
|
||||
static qse_awk_val_t* eval_fnc (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
{
|
||||
/* intrinsic function */
|
||||
|
||||
qse_awk_nde_fncall_t* call = (qse_awk_nde_fncall_t*)nde;
|
||||
|
||||
/* intrinsic function */
|
||||
/* the parser must make sure taht the number of arguments
|
||||
* is proper */
|
||||
QSE_ASSERT (call->nargs >= call->u.fnc.arg.min &&
|
||||
call->nargs <= call->u.fnc.arg.max);
|
||||
|
||||
#if 0
|
||||
if (call->nargs < call->u.fnc.arg.min)
|
||||
{
|
||||
SETERR_LOC (run, QSE_AWK_EARGTF, &nde->loc);
|
||||
@ -5526,6 +5533,7 @@ static qse_awk_val_t* eval_fnc (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
SETERR_LOC (run, QSE_AWK_EARGTM, &nde->loc);
|
||||
return QSE_NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
return eval_call (run, nde, call->u.fnc.arg.spec, QSE_NULL, QSE_NULL, QSE_NULL);
|
||||
}
|
||||
|
Reference in New Issue
Block a user