renamed many functions, typedefs, and variables.
This commit is contained in:
parent
b9c02b48bc
commit
4f968e7f11
@ -140,7 +140,7 @@ static qse_map_walk_t print_awk_value (
|
||||
qse_char_t* str;
|
||||
qse_size_t len;
|
||||
|
||||
str = qse_awk_valtostr (run, QSE_MAP_VPTR(pair), 0, QSE_NULL, &len);
|
||||
str = qse_awk_rtx_valtostr (run, QSE_MAP_VPTR(pair), 0, QSE_NULL, &len);
|
||||
if (str == QSE_NULL)
|
||||
{
|
||||
dprint (QSE_T("***OUT OF MEMORY***\n"));
|
||||
@ -170,12 +170,12 @@ static int on_run_enter (qse_awk_rtx_t* run, void* data)
|
||||
{
|
||||
qse_awk_val_t* fs;
|
||||
|
||||
fs = qse_awk_makestrval0 (run, ao->fs);
|
||||
fs = qse_awk_rtx_makestrval0 (run, ao->fs);
|
||||
if (fs == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (run, fs);
|
||||
qse_awk_rtx_refupval (run, fs);
|
||||
qse_awk_rtx_setglobal (run, QSE_AWK_GLOBAL_FS, fs);
|
||||
qse_awk_refdownval (run, fs);
|
||||
qse_awk_rtx_refdownval (run, fs);
|
||||
}
|
||||
|
||||
|
||||
@ -194,7 +194,7 @@ static void on_run_exit (
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_valtostr (run, ret, 0, QSE_NULL, &len);
|
||||
str = qse_awk_rtx_valtostr (run, ret, 0, QSE_NULL, &len);
|
||||
if (str == QSE_NULL)
|
||||
{
|
||||
dprint (QSE_T("[RETURN] - ***OUT OF MEMORY***\n"));
|
||||
@ -218,8 +218,8 @@ static void on_run_end (qse_awk_rtx_t* run, int errnum, void* data)
|
||||
dprint (QSE_T("[AWK ENDED WITH AN ERROR]\n"));
|
||||
qse_printf (QSE_T("RUN ERROR: CODE [%d] LINE [%u] %s\n"),
|
||||
errnum,
|
||||
(unsigned int)qse_awk_getrunerrlin(run),
|
||||
qse_awk_getrunerrmsg(run));
|
||||
(unsigned int)qse_awk_rtx_geterrlin(run),
|
||||
qse_awk_rtx_geterrmsg(run));
|
||||
}
|
||||
else dprint (QSE_T("[AWK ENDED SUCCESSFULLY]\n"));
|
||||
|
||||
@ -287,7 +287,7 @@ static int bfn_sleep (
|
||||
|
||||
a0 = qse_awk_rtx_getarg (run, 0);
|
||||
|
||||
n = qse_awk_valtonum (run, a0, &lv, &rv);
|
||||
n = qse_awk_rtx_valtonum (run, a0, &lv, &rv);
|
||||
if (n == -1) return -1;
|
||||
if (n == 1) lv = (qse_long_t)rv;
|
||||
|
||||
@ -298,10 +298,10 @@ static int bfn_sleep (
|
||||
n = sleep (lv);
|
||||
#endif
|
||||
|
||||
r = qse_awk_makeintval (run, n);
|
||||
r = qse_awk_rtx_makeintval (run, n);
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -571,7 +571,7 @@ static qse_awk_t* open_awk (void)
|
||||
*/
|
||||
/*qse_awk_setkeyword (awk, QSE_T("func"), 4, QSE_T("FX"), 2);*/
|
||||
|
||||
if (qse_awk_addfunc (awk,
|
||||
if (qse_awk_addfnc (awk,
|
||||
QSE_T("sleep"), 5, 0,
|
||||
1, 1, QSE_NULL, bfn_sleep) == QSE_NULL)
|
||||
{
|
||||
|
@ -28,6 +28,6 @@ BEGIN {
|
||||
print "wide characteter 넓은 문자";
|
||||
|
||||
print fflush ("abc");
|
||||
return "x.awk";
|
||||
#return "x.awk";
|
||||
}
|
||||
|
||||
|
@ -54,7 +54,7 @@ typedef qse_ssize_t (*qse_awk_io_t) (
|
||||
|
||||
struct qse_awk_eio_t
|
||||
{
|
||||
qse_awk_rtx_t* run; /* [IN] */
|
||||
qse_awk_rtx_t* rtx; /* [IN] */
|
||||
int type; /* [IN] console, file, coproc, pipe */
|
||||
int mode; /* [IN] read, write, etc */
|
||||
qse_char_t* name; /* [IN] */
|
||||
@ -109,19 +109,19 @@ struct qse_awk_runios_t
|
||||
struct qse_awk_runcbs_t
|
||||
{
|
||||
int (*on_start) (
|
||||
qse_awk_rtx_t* run, void* data);
|
||||
qse_awk_rtx_t* rtx, void* data);
|
||||
|
||||
int (*on_enter) (
|
||||
qse_awk_rtx_t* run, void* data);
|
||||
qse_awk_rtx_t* rtx, void* data);
|
||||
|
||||
void (*on_statement) (
|
||||
qse_awk_rtx_t* run, qse_size_t line, void* data);
|
||||
qse_awk_rtx_t* rtx, qse_size_t line, void* data);
|
||||
|
||||
void (*on_exit) (
|
||||
qse_awk_rtx_t* run, qse_awk_val_t* ret, void* data);
|
||||
qse_awk_rtx_t* rtx, qse_awk_val_t* ret, void* data);
|
||||
|
||||
void (*on_end) (
|
||||
qse_awk_rtx_t* run, int errnum, void* data);
|
||||
qse_awk_rtx_t* rtx, int errnum, void* data);
|
||||
|
||||
void* data;
|
||||
};
|
||||
@ -468,7 +468,7 @@ enum qse_awk_val_ref_id_t
|
||||
QSE_AWK_VAL_REF_POS
|
||||
};
|
||||
|
||||
enum qse_awk_valtostr_opt_t
|
||||
enum qse_awk_rtx_valtostr_opt_t
|
||||
{
|
||||
QSE_AWK_VALTOSTR_CLEAR = (1 << 0),
|
||||
QSE_AWK_VALTOSTR_FIXED = (1 << 1),/* this overrides CLEAR */
|
||||
@ -694,38 +694,90 @@ void qse_awk_setprmfns (
|
||||
qse_awk_prmfns_t* prmfns
|
||||
);
|
||||
|
||||
/*
|
||||
* clear an qse_awk_t instance
|
||||
*
|
||||
* If you want to reuse an qse_awk_t instance that finished being used,
|
||||
* you may call qse_awk_close instead of destroying and creating a new
|
||||
* qse_awk_t instance using qse_awk_close() and qse_awk_open().
|
||||
*
|
||||
* RETURN 0 on success, -1 on failure
|
||||
/****f* qse.awk/qse_awk_clear
|
||||
* NAME
|
||||
* qse_awk_clear - clear a qse_awk_t object
|
||||
* DESCRIPTION
|
||||
* If you want to reuse an qse_awk_t instance that finished being used,
|
||||
* you may call qse_awk_close instead of destroying and creating a new
|
||||
* qse_awk_t instance using qse_awk_close() and qse_awk_open().
|
||||
* RETURN
|
||||
* 0 on success, -1 on failure
|
||||
* SYNOPSIS
|
||||
*/
|
||||
int qse_awk_clear (
|
||||
/* the pointer to an qse_awk_t instance */
|
||||
qse_awk_t* awk
|
||||
);
|
||||
/******/
|
||||
|
||||
const qse_char_t* qse_awk_geterrstr (qse_awk_t* awk, int num);
|
||||
int qse_awk_seterrstr (qse_awk_t* awk, int num, const qse_char_t* str);
|
||||
/****f* qse.awk/qse_awk_geterrstr
|
||||
* NAME
|
||||
* qse_awk_geterrstr - get a format string for an error
|
||||
* DESCRIPTION
|
||||
* The qse_awk_geterrstr() function returns a pointer to a format string for
|
||||
* the error number num.
|
||||
* SYNOPSIS
|
||||
*/
|
||||
const qse_char_t* qse_awk_geterrstr (
|
||||
qse_awk_t* awk,
|
||||
int num
|
||||
);
|
||||
/******/
|
||||
|
||||
int qse_awk_geterrnum (qse_awk_t* awk);
|
||||
qse_size_t qse_awk_geterrlin (qse_awk_t* awk);
|
||||
const qse_char_t* qse_awk_geterrmsg (qse_awk_t* awk);
|
||||
/****f* qse.awk/qse_awk_seterrstr
|
||||
* NAME
|
||||
* qse_awk_geterrstr - set a format string for an error
|
||||
* DESCRIPTION
|
||||
* The qse_awk_seterrstr() function sets a format string for an error. The
|
||||
* format string is used to compose an actual error message to be returned
|
||||
* by qse_awk_geterrmsg() and qse_awk_geterror().
|
||||
* SYNOPSIS
|
||||
*/
|
||||
int qse_awk_seterrstr (
|
||||
qse_awk_t* awk,
|
||||
int num,
|
||||
const qse_char_t* str
|
||||
);
|
||||
/******/
|
||||
|
||||
void qse_awk_seterrnum (qse_awk_t* awk, int errnum);
|
||||
void qse_awk_seterrmsg (qse_awk_t* awk,
|
||||
int errnum, qse_size_t errlin, const qse_char_t* errmsg);
|
||||
int qse_awk_geterrnum (
|
||||
qse_awk_t* awk
|
||||
);
|
||||
|
||||
qse_size_t qse_awk_geterrlin (
|
||||
qse_awk_t* awk
|
||||
);
|
||||
|
||||
const qse_char_t* qse_awk_geterrmsg (
|
||||
qse_awk_t* awk
|
||||
);
|
||||
|
||||
void qse_awk_seterrnum (
|
||||
qse_awk_t* awk,
|
||||
int errnum
|
||||
);
|
||||
|
||||
void qse_awk_seterrmsg (
|
||||
qse_awk_t* awk,
|
||||
int errnum,
|
||||
qse_size_t errlin,
|
||||
const qse_char_t* errmsg
|
||||
);
|
||||
|
||||
void qse_awk_geterror (
|
||||
qse_awk_t* awk, int* errnum,
|
||||
qse_size_t* errlin, const qse_char_t** errmsg);
|
||||
qse_awk_t* awk,
|
||||
int* errnum,
|
||||
qse_size_t* errlin,
|
||||
const qse_char_t** errmsg
|
||||
);
|
||||
|
||||
void qse_awk_seterror (
|
||||
qse_awk_t* awk, int errnum, qse_size_t errlin,
|
||||
const qse_cstr_t* errarg, qse_size_t argcnt);
|
||||
qse_awk_t* awk,
|
||||
int errnum,
|
||||
qse_size_t errlin,
|
||||
const qse_cstr_t* errarg,
|
||||
qse_size_t argcnt
|
||||
);
|
||||
|
||||
int qse_awk_getoption (qse_awk_t* awk);
|
||||
void qse_awk_setoption (qse_awk_t* awk, int opt);
|
||||
@ -893,6 +945,41 @@ int qse_awk_run (
|
||||
);
|
||||
/******/
|
||||
|
||||
/* functions to manipulate intrinsic functions */
|
||||
void* qse_awk_addfnc (
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t* name,
|
||||
qse_size_t name_len,
|
||||
int when_valid,
|
||||
qse_size_t min_args,
|
||||
qse_size_t max_args,
|
||||
const qse_char_t* arg_spec,
|
||||
int (*handler)(qse_awk_rtx_t*,const qse_char_t*,qse_size_t)
|
||||
);
|
||||
|
||||
int qse_awk_delfnc (
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t* name,
|
||||
qse_size_t len
|
||||
);
|
||||
|
||||
void qse_awk_clrfnc (
|
||||
qse_awk_t* awk
|
||||
);
|
||||
|
||||
/****f* qse.awk/qse_awk_rtx_stopall
|
||||
* NAME
|
||||
* qse_awk_rtx_stop - stop all runtime contexts
|
||||
* DESCRIPTION
|
||||
* The qse_awk_rtx_stopall() function aborts all active qse_awk_run() functions
|
||||
* invoked with the awk parameter.
|
||||
* SYNOPSIS
|
||||
*/
|
||||
void qse_awk_rtx_stopall (
|
||||
qse_awk_t* awk
|
||||
);
|
||||
/******/
|
||||
|
||||
/****f* qse.awk/qse_awk_shouldstop
|
||||
* NAME
|
||||
* qse_awk_rtx_stop - test if qse_awk_rtx_stop() is called
|
||||
@ -916,19 +1003,6 @@ void qse_awk_rtx_stop (
|
||||
);
|
||||
/******/
|
||||
|
||||
/****f* qse.awk/qse_awk_rtx_stopall
|
||||
* NAME
|
||||
* qse_awk_rtx_stop - stop all runtime contexts
|
||||
* DESCRIPTION
|
||||
* The qse_awk_rtx_stopall() function aborts all active qse_awk_run() functions
|
||||
* invoked with the awk parameter.
|
||||
* SYNOPSIS
|
||||
*/
|
||||
void qse_awk_rtx_stopall (
|
||||
qse_awk_t* awk
|
||||
);
|
||||
/******/
|
||||
|
||||
/****f* qse.awk/qse_awk_rtx_getnargs
|
||||
* NAME
|
||||
* qse_awk_rtx_getnargs - get the number of arguments passed to qse_awk_run()
|
||||
@ -989,7 +1063,7 @@ int qse_awk_rtx_setglobal (
|
||||
* DESCRIPTION
|
||||
* The qse_awk_rtx_setretval() sets the return value of a function
|
||||
* when called from within a function handlers. The caller doesn't
|
||||
* have to invoke qse_awk_refupval() and qse_awk_refdownval()
|
||||
* have to invoke qse_awk_rtx_refupval() and qse_awk_rtx_refdownval()
|
||||
* with the value to be passed to qse_awk_rtx_setretval().
|
||||
* The qse_awk_rtx_setretval() will update its reference count properly
|
||||
* once the return value is set.
|
||||
@ -1075,61 +1149,54 @@ int qse_awk_rtx_geterrnum (
|
||||
);
|
||||
/******/
|
||||
|
||||
qse_size_t qse_awk_getrunerrlin (
|
||||
qse_size_t qse_awk_rtx_geterrlin (
|
||||
qse_awk_rtx_t* rtx
|
||||
);
|
||||
const qse_char_t* qse_awk_getrunerrmsg (
|
||||
|
||||
const qse_char_t* qse_awk_rtx_geterrmsg (
|
||||
qse_awk_rtx_t* rtx
|
||||
);
|
||||
void qse_awk_setrunerrnum (
|
||||
|
||||
void qse_awk_rtx_seterrnum (
|
||||
qse_awk_rtx_t* rtx,
|
||||
int errnum
|
||||
int errnum
|
||||
);
|
||||
void qse_awk_setrunerrmsg (
|
||||
qse_awk_rtx_t* run,
|
||||
int errnum,
|
||||
qse_size_t errlin,
|
||||
|
||||
void qse_awk_rtx_seterrmsg (
|
||||
qse_awk_rtx_t* rtx,
|
||||
int errnum,
|
||||
qse_size_t errlin,
|
||||
const qse_char_t* errmsg
|
||||
);
|
||||
|
||||
void qse_awk_getrunerror (
|
||||
qse_awk_rtx_t* run,
|
||||
int* errnum,
|
||||
qse_size_t* errlin,
|
||||
void qse_awk_rtx_geterror (
|
||||
qse_awk_rtx_t* rtx,
|
||||
int* errnum,
|
||||
qse_size_t* errlin,
|
||||
const qse_char_t** errmsg
|
||||
);
|
||||
|
||||
void qse_awk_setrunerror (
|
||||
qse_awk_rtx_t* run,
|
||||
int errnum,
|
||||
qse_size_t errlin,
|
||||
void qse_awk_rtx_seterror (
|
||||
qse_awk_rtx_t* rtx,
|
||||
int errnum,
|
||||
qse_size_t errlin,
|
||||
const qse_cstr_t* errarg,
|
||||
qse_size_t argcnt
|
||||
qse_size_t argcnt
|
||||
);
|
||||
|
||||
/* functions to manipulate intrinsic functions */
|
||||
void* qse_awk_addfunc (
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t* name,
|
||||
qse_size_t name_len,
|
||||
int when_valid,
|
||||
qse_size_t min_args,
|
||||
qse_size_t max_args,
|
||||
const qse_char_t* arg_spec,
|
||||
int (*handler)(qse_awk_rtx_t*,const qse_char_t*,qse_size_t)
|
||||
);
|
||||
|
||||
int qse_awk_delfunc (
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t* name,
|
||||
qse_size_t len
|
||||
);
|
||||
|
||||
void qse_awk_clrbfn (qse_awk_t* awk);
|
||||
|
||||
/* record and field functions */
|
||||
int qse_awk_clrrec (qse_awk_rtx_t* run, qse_bool_t skip_inrec_line);
|
||||
int qse_awk_setrec (qse_awk_rtx_t* run, qse_size_t idx, const qse_char_t* str, qse_size_t len);
|
||||
int qse_awk_rtx_clrrec (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_bool_t skip_inrec_line
|
||||
);
|
||||
|
||||
int qse_awk_rtx_setrec (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_size_t idx,
|
||||
const qse_char_t* str,
|
||||
qse_size_t len
|
||||
);
|
||||
|
||||
/****f* qse.awk/qse_awk_alloc
|
||||
* NAME
|
||||
@ -1147,8 +1214,7 @@ void* qse_awk_alloc (
|
||||
/****f* qse.awk/qse_awk_free
|
||||
* NAME
|
||||
* qse_awk_free - free dynamic memory
|
||||
*
|
||||
* SYNOSPSIS
|
||||
* SYNOPSIS
|
||||
*/
|
||||
void qse_awk_free (
|
||||
qse_awk_t* awk /* the pointer to an qse_awk_t instance */,
|
||||
@ -1156,134 +1222,194 @@ void qse_awk_free (
|
||||
);
|
||||
/******/
|
||||
|
||||
/*
|
||||
* NAME duplicate a string
|
||||
*
|
||||
/****f* qse.awk/qse_awk_strdup
|
||||
* NAME
|
||||
* qse_awk_strdup - duplicate a null-terminated string
|
||||
* DESCRIPTION
|
||||
* The qse_awk_strdup() function is used to duplicate a string using
|
||||
* the memory manager used by the associated qse_awk_t instance.
|
||||
* The new string should be freed using the qse_awk_free() function.
|
||||
*
|
||||
* RETURNS
|
||||
* The pointer to a new string which is a duplicate of the string s.
|
||||
* The qse_awk_strdup() function returns the pointer to a new string which
|
||||
* is a duplicate of the string s. It returns QSE_NULL on failure.
|
||||
* SYNOPSIS
|
||||
*/
|
||||
qse_char_t* qse_awk_strdup (
|
||||
/* the pointer to an qse_awk_t instance */
|
||||
qse_awk_t* awk,
|
||||
/* the pointer to a string */
|
||||
const qse_char_t* s
|
||||
qse_awk_t* awk /* the pointer to an qse_awk_t instance */,
|
||||
const qse_char_t* str /* the pointer to a string */
|
||||
);
|
||||
/******/
|
||||
|
||||
/*
|
||||
* NAME duplicate a string of a length given
|
||||
*
|
||||
/****f* qse.awk/qse_awk_strxdup
|
||||
* NAME
|
||||
* qse_awk_strxdup - duplicate a length-delimited string
|
||||
* DESCRIPTION
|
||||
* The qse_awk_strdup() function is used to duplicate a string whose length
|
||||
* is as long as l characters using the memory manager used by the associated
|
||||
* The qse_awk_strxdup() function is used to duplicate a string whose length
|
||||
* is as long as len characters using the memory manager used by the
|
||||
* qse_awk_t instance. The new string should be freed using the qse_awk_free()
|
||||
* function.
|
||||
*
|
||||
* RETURNS
|
||||
* The pointer to a new string which is a duplicate of the string s.
|
||||
* The qse_awk_strxdup() function returns the pointer to a new string which
|
||||
* is a duplicate of the string s on success. It returns QSE_NULL on failure.
|
||||
* SYNOPSIS
|
||||
*/
|
||||
qse_char_t* qse_awk_strxdup (qse_awk_t* awk, const qse_char_t* s, qse_size_t l);
|
||||
qse_char_t* qse_awk_strxdup (
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t* str,
|
||||
qse_size_t len
|
||||
);
|
||||
/******/
|
||||
|
||||
qse_long_t qse_awk_strxtolong (
|
||||
qse_awk_t* awk, const qse_char_t* str, qse_size_t len,
|
||||
int base, const qse_char_t** endptr);
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t* str,
|
||||
qse_size_t len,
|
||||
int base,
|
||||
const qse_char_t** endptr
|
||||
);
|
||||
|
||||
qse_real_t qse_awk_strxtoreal (
|
||||
qse_awk_t* awk, const qse_char_t* str, qse_size_t len,
|
||||
const qse_char_t** endptr);
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t* str,
|
||||
qse_size_t len,
|
||||
const qse_char_t** endptr
|
||||
);
|
||||
|
||||
qse_size_t qse_awk_longtostr (
|
||||
qse_long_t value, int radix, const qse_char_t* prefix,
|
||||
qse_char_t* buf, qse_size_t size);
|
||||
qse_long_t value,
|
||||
int radix,
|
||||
const qse_char_t* prefix,
|
||||
qse_char_t* buf,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
/* value manipulation functions */
|
||||
qse_awk_val_t* qse_awk_makeintval (qse_awk_rtx_t* run, qse_long_t v);
|
||||
qse_awk_val_t* qse_awk_makerealval (qse_awk_rtx_t* run, qse_real_t v);
|
||||
qse_awk_val_t* qse_awk_rtx_makeintval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_long_t v
|
||||
);
|
||||
qse_awk_val_t* qse_awk_rtx_makerealval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_real_t v
|
||||
);
|
||||
|
||||
qse_awk_val_t* qse_awk_makestrval0 (
|
||||
qse_awk_rtx_t* run, const qse_char_t* str);
|
||||
qse_awk_val_t* qse_awk_makestrval (
|
||||
qse_awk_rtx_t* run, const qse_char_t* str, qse_size_t len);
|
||||
qse_awk_val_t* qse_awk_makestrval_nodup (
|
||||
qse_awk_rtx_t* run, qse_char_t* str, qse_size_t len);
|
||||
qse_awk_val_t* qse_awk_makestrval2 (
|
||||
qse_awk_rtx_t* run,
|
||||
const qse_char_t* str1, qse_size_t len1,
|
||||
const qse_char_t* str2, qse_size_t len2);
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval0 (
|
||||
qse_awk_rtx_t* rtx,
|
||||
const qse_char_t* str
|
||||
);
|
||||
|
||||
qse_awk_val_t* qse_awk_makerexval (
|
||||
qse_awk_rtx_t* run, const qse_char_t* buf, qse_size_t len, void* code);
|
||||
qse_awk_val_t* qse_awk_makemapval (qse_awk_rtx_t* run);
|
||||
qse_awk_val_t* qse_awk_makerefval (
|
||||
qse_awk_rtx_t* run, int id, qse_awk_val_t** adr);
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
const qse_char_t* str,
|
||||
qse_size_t len
|
||||
);
|
||||
|
||||
qse_bool_t qse_awk_isstaticval (qse_awk_val_t* val);
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval_nodup (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_char_t* str,
|
||||
qse_size_t len
|
||||
);
|
||||
|
||||
void qse_awk_freeval (qse_awk_rtx_t* run, qse_awk_val_t* val, qse_bool_t cache);
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval2 (
|
||||
qse_awk_rtx_t* rtx,
|
||||
const qse_char_t* str1,
|
||||
qse_size_t len1,
|
||||
const qse_char_t* str2,
|
||||
qse_size_t len2
|
||||
);
|
||||
|
||||
void qse_awk_refupval (qse_awk_rtx_t* run, qse_awk_val_t* val);
|
||||
void qse_awk_refdownval (qse_awk_rtx_t* run, qse_awk_val_t* val);
|
||||
void qse_awk_refdownval_nofree (qse_awk_rtx_t* run, qse_awk_val_t* val);
|
||||
qse_awk_val_t* qse_awk_rtx_makerexval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
const qse_char_t* buf,
|
||||
qse_size_t len,
|
||||
void* code
|
||||
);
|
||||
|
||||
void qse_awk_freevalchunk (qse_awk_rtx_t* run, qse_awk_val_chunk_t* chunk);
|
||||
qse_awk_val_t* qse_awk_rtx_makemapval (
|
||||
qse_awk_rtx_t* rtx
|
||||
);
|
||||
|
||||
qse_bool_t qse_awk_valtobool (
|
||||
qse_awk_rtx_t* run,
|
||||
qse_awk_val_t* qse_awk_rtx_makerefval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
int id,
|
||||
qse_awk_val_t** adr
|
||||
);
|
||||
|
||||
qse_bool_t qse_awk_isstaticval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* val
|
||||
);
|
||||
|
||||
qse_char_t* qse_awk_valtostr (
|
||||
qse_awk_rtx_t* run,
|
||||
void qse_awk_rtx_freeval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* val,
|
||||
qse_bool_t cache
|
||||
);
|
||||
|
||||
void qse_awk_rtx_refupval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* val
|
||||
);
|
||||
|
||||
void qse_awk_rtx_refdownval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* val
|
||||
);
|
||||
|
||||
void qse_awk_rtx_refdownval_nofree (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* val
|
||||
);
|
||||
|
||||
qse_bool_t qse_awk_rtx_valtobool (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* val
|
||||
);
|
||||
|
||||
qse_char_t* qse_awk_rtx_valtostr (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* val,
|
||||
int opt,
|
||||
qse_str_t* buf,
|
||||
qse_size_t* len
|
||||
);
|
||||
|
||||
/****f* qse.awk/qse_awk_valtonum
|
||||
/****f* qse.awk/qse_awk_rtx_valtonum
|
||||
* NAME
|
||||
* qse_awk_valtonum - convert a value to a number
|
||||
*
|
||||
* qse_awk_rtx_valtonum - convert a value to a number
|
||||
* DESCRIPTION
|
||||
* The qse_awk_valtonum() function converts a value to a number.
|
||||
* The qse_awk_rtx_valtonum() function converts a value to a number.
|
||||
* If the value is converted to a long number, it is stored in the memory
|
||||
* pointed to by l and 0 is returned. If the value is converted to a real
|
||||
* number, it is stored in the memory pointed to by r and 1 is returned.
|
||||
*
|
||||
* RETURN
|
||||
* The qse_awk_valtonum() function returns -1 on error, 0 if the converted
|
||||
* The qse_awk_rtx_valtonum() function returns -1 on error, 0 if the converted
|
||||
* number is a long number and 1 if it is a real number.
|
||||
*
|
||||
* EXAMPLES
|
||||
* qse_long_t l;
|
||||
* qse_real_t r;
|
||||
* int n;
|
||||
*
|
||||
* n = qse_awk_valtonum (v, &l, &r);
|
||||
* n = qse_awk_rtx_valtonum (v, &l, &r);
|
||||
* if (n == -1) error ();
|
||||
* else if (n == 0) do_long (l);
|
||||
* else if (n == 1) do_real (r);
|
||||
*
|
||||
* SYNOPSIS
|
||||
*/
|
||||
int qse_awk_valtonum (
|
||||
qse_awk_rtx_t* run,
|
||||
int qse_awk_rtx_valtonum (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* v /* the value to convert to a number */,
|
||||
qse_long_t* l /* a pointer to a long number */,
|
||||
qse_real_t* r /* a pointer to a qse_real_t */
|
||||
);
|
||||
/******/
|
||||
|
||||
/****f* qse.awk/qse_awk_strtonum
|
||||
/****f* qse.awk/qse_awk_rtx_strtonum
|
||||
* NAME
|
||||
* qse_awk_strtonum - convert a string to a number
|
||||
*
|
||||
* qse_awk_rtx_strtonum - convert a string to a number
|
||||
* SYNOPSIS
|
||||
*/
|
||||
int qse_awk_strtonum (
|
||||
int qse_awk_rtx_strtonum (
|
||||
qse_awk_rtx_t* run,
|
||||
const qse_char_t* ptr,
|
||||
qse_size_t len,
|
||||
|
@ -156,12 +156,12 @@ int Awk::Console::setFNR (long_t fnr)
|
||||
qse_awk_val_t* tmp;
|
||||
int n;
|
||||
|
||||
tmp = qse_awk_makeintval (eio->run, fnr);
|
||||
tmp = qse_awk_rtx_makeintval (eio->run, fnr);
|
||||
if (tmp == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (eio->run, tmp);
|
||||
qse_awk_rtx_refupval (eio->run, tmp);
|
||||
n = qse_awk_rtx_setglobal (eio->run, QSE_AWK_GLOBAL_FNR, tmp);
|
||||
qse_awk_refdownval (eio->run, tmp);
|
||||
qse_awk_rtx_refdownval (eio->run, tmp);
|
||||
|
||||
return n;
|
||||
}
|
||||
@ -224,7 +224,7 @@ void Awk::Argument::clear ()
|
||||
|
||||
/* when the value is a map, str.ptr and str.len are
|
||||
* used for index iteration in getFirstIndex & getNextIndex */
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = QSE_NULL;
|
||||
}
|
||||
else
|
||||
@ -245,7 +245,7 @@ void Awk::Argument::clear ()
|
||||
|
||||
if (this->val != QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = QSE_NULL;
|
||||
}
|
||||
|
||||
@ -304,12 +304,12 @@ int Awk::Argument::init (val_t* v)
|
||||
QSE_ASSERT (this->val == QSE_NULL);
|
||||
QSE_ASSERT (v != QSE_NULL);
|
||||
|
||||
qse_awk_refupval (this->run->run, v);
|
||||
qse_awk_rtx_refupval (this->run->run, v);
|
||||
this->val = v;
|
||||
|
||||
if (QSE_AWK_VAL_TYPE(v) == QSE_AWK_VAL_STR)
|
||||
{
|
||||
int n = qse_awk_valtonum (
|
||||
int n = qse_awk_rtx_valtonum (
|
||||
this->run->run, v, &this->inum, &this->rnum);
|
||||
if (n == 0)
|
||||
{
|
||||
@ -331,7 +331,7 @@ int Awk::Argument::init (val_t* v)
|
||||
this->inum = ((qse_awk_val_int_t*)v)->val;
|
||||
this->rnum = (qse_real_t)((qse_awk_val_int_t*)v)->val;
|
||||
|
||||
this->str.ptr = qse_awk_valtostr (
|
||||
this->str.ptr = qse_awk_rtx_valtostr (
|
||||
this->run->run, v, 0, QSE_NULL, &this->str.len);
|
||||
if (this->str.ptr != QSE_NULL) return 0;
|
||||
}
|
||||
@ -340,7 +340,7 @@ int Awk::Argument::init (val_t* v)
|
||||
this->inum = (qse_long_t)((qse_awk_val_real_t*)v)->val;
|
||||
this->rnum = ((qse_awk_val_real_t*)v)->val;
|
||||
|
||||
this->str.ptr = qse_awk_valtostr (
|
||||
this->str.ptr = qse_awk_rtx_valtostr (
|
||||
this->run->run, v, 0, QSE_NULL, &this->str.len);
|
||||
if (this->str.ptr != QSE_NULL) return 0;
|
||||
}
|
||||
@ -349,7 +349,7 @@ int Awk::Argument::init (val_t* v)
|
||||
this->inum = 0;
|
||||
this->rnum = 0.0;
|
||||
|
||||
this->str.ptr = qse_awk_valtostr (
|
||||
this->str.ptr = qse_awk_rtx_valtostr (
|
||||
this->run->run, v, 0, QSE_NULL, &this->str.len);
|
||||
if (this->str.ptr != QSE_NULL) return 0;
|
||||
}
|
||||
@ -363,7 +363,7 @@ int Awk::Argument::init (val_t* v)
|
||||
}
|
||||
|
||||
// an error has occurred
|
||||
qse_awk_refdownval (this->run->run, v);
|
||||
qse_awk_rtx_refdownval (this->run->run, v);
|
||||
this->val = QSE_NULL;
|
||||
return -1;
|
||||
}
|
||||
@ -375,7 +375,7 @@ int Awk::Argument::init (const char_t* str, size_t len)
|
||||
this->str.ptr = (char_t*)str;
|
||||
this->str.len = len;
|
||||
|
||||
if (qse_awk_strtonum (this->run->run,
|
||||
if (qse_awk_rtx_strtonum (this->run->run,
|
||||
str, len, &this->inum, &this->rnum) == 0)
|
||||
{
|
||||
this->rnum = (real_t)this->inum;
|
||||
@ -575,12 +575,12 @@ int Awk::Return::set (long_t v)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
|
||||
qse_awk_val_t* x = qse_awk_makeintval (this->run->run, v);
|
||||
qse_awk_val_t* x = qse_awk_rtx_makeintval (this->run->run, v);
|
||||
if (x == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = x;
|
||||
qse_awk_refupval (this->run->run, this->val);
|
||||
qse_awk_rtx_refupval (this->run->run, this->val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -589,12 +589,12 @@ int Awk::Return::set (real_t v)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
|
||||
qse_awk_val_t* x = qse_awk_makerealval (this->run->run, v);
|
||||
qse_awk_val_t* x = qse_awk_rtx_makerealval (this->run->run, v);
|
||||
if (x == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = x;
|
||||
qse_awk_refupval (this->run->run, this->val);
|
||||
qse_awk_rtx_refupval (this->run->run, this->val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -603,12 +603,12 @@ int Awk::Return::set (const char_t* ptr, size_t len)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
|
||||
qse_awk_val_t* x = qse_awk_makestrval (this->run->run, ptr, len);
|
||||
qse_awk_val_t* x = qse_awk_rtx_makestrval (this->run->run, ptr, len);
|
||||
if (x == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = x;
|
||||
qse_awk_refupval (this->run->run, this->val);
|
||||
qse_awk_rtx_refupval (this->run->run, this->val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -632,47 +632,47 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, long_t v)
|
||||
|
||||
if (QSE_AWK_VAL_TYPE(this->val) != QSE_AWK_VAL_MAP)
|
||||
{
|
||||
qse_awk_val_t* x = qse_awk_makemapval (this->run->run);
|
||||
qse_awk_val_t* x = qse_awk_rtx_makemapval (this->run->run);
|
||||
if (x == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (this->run->run, x);
|
||||
qse_awk_rtx_refupval (this->run->run, x);
|
||||
|
||||
qse_awk_val_t* x2 = qse_awk_makeintval (this->run->run, v);
|
||||
qse_awk_val_t* x2 = qse_awk_rtx_makeintval (this->run->run, v);
|
||||
if (x2 == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x);
|
||||
qse_awk_rtx_refdownval (this->run->run, x);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refupval (this->run->run, x2);
|
||||
qse_awk_rtx_refupval (this->run->run, x2);
|
||||
|
||||
pair_t* pair = qse_map_upsert (
|
||||
((qse_awk_val_map_t*)x)->map,
|
||||
(char_t*)idx, iln, x2, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x2);
|
||||
qse_awk_refdownval (this->run->run, x);
|
||||
qse_awk_rtx_refdownval (this->run->run, x2);
|
||||
qse_awk_rtx_refdownval (this->run->run, x);
|
||||
this->run->setError (ERR_NOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = x;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_awk_val_t* x2 = qse_awk_makeintval (this->run->run, v);
|
||||
qse_awk_val_t* x2 = qse_awk_rtx_makeintval (this->run->run, v);
|
||||
if (x2 == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (this->run->run, x2);
|
||||
qse_awk_rtx_refupval (this->run->run, x2);
|
||||
|
||||
pair_t* pair = qse_map_upsert (
|
||||
((qse_awk_val_map_t*)this->val)->map,
|
||||
(char_t*)idx, iln, x2, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x2);
|
||||
qse_awk_rtx_refdownval (this->run->run, x2);
|
||||
this->run->setError (ERR_NOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@ -695,47 +695,47 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, real_t v)
|
||||
|
||||
if (QSE_AWK_VAL_TYPE(this->val) != QSE_AWK_VAL_MAP)
|
||||
{
|
||||
qse_awk_val_t* x = qse_awk_makemapval (this->run->run);
|
||||
qse_awk_val_t* x = qse_awk_rtx_makemapval (this->run->run);
|
||||
if (x == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (this->run->run, x);
|
||||
qse_awk_rtx_refupval (this->run->run, x);
|
||||
|
||||
qse_awk_val_t* x2 = qse_awk_makerealval (this->run->run, v);
|
||||
qse_awk_val_t* x2 = qse_awk_rtx_makerealval (this->run->run, v);
|
||||
if (x2 == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x);
|
||||
qse_awk_rtx_refdownval (this->run->run, x);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refupval (this->run->run, x2);
|
||||
qse_awk_rtx_refupval (this->run->run, x2);
|
||||
|
||||
pair_t* pair = qse_map_upsert (
|
||||
((qse_awk_val_map_t*)x)->map,
|
||||
(char_t*)idx, iln, x2, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x2);
|
||||
qse_awk_refdownval (this->run->run, x);
|
||||
qse_awk_rtx_refdownval (this->run->run, x2);
|
||||
qse_awk_rtx_refdownval (this->run->run, x);
|
||||
this->run->setError (ERR_NOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = x;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_awk_val_t* x2 = qse_awk_makerealval (this->run->run, v);
|
||||
qse_awk_val_t* x2 = qse_awk_rtx_makerealval (this->run->run, v);
|
||||
if (x2 == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (this->run->run, x2);
|
||||
qse_awk_rtx_refupval (this->run->run, x2);
|
||||
|
||||
pair_t* pair = qse_map_upsert (
|
||||
((qse_awk_val_map_t*)this->val)->map,
|
||||
(char_t*)idx, iln, x2, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x2);
|
||||
qse_awk_rtx_refdownval (this->run->run, x2);
|
||||
this->run->setError (ERR_NOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@ -758,47 +758,47 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, const char_t* str, s
|
||||
|
||||
if (QSE_AWK_VAL_TYPE(this->val) != QSE_AWK_VAL_MAP)
|
||||
{
|
||||
qse_awk_val_t* x = qse_awk_makemapval (this->run->run);
|
||||
qse_awk_val_t* x = qse_awk_rtx_makemapval (this->run->run);
|
||||
if (x == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (this->run->run, x);
|
||||
qse_awk_rtx_refupval (this->run->run, x);
|
||||
|
||||
qse_awk_val_t* x2 = qse_awk_makestrval (this->run->run, str, sln);
|
||||
qse_awk_val_t* x2 = qse_awk_rtx_makestrval (this->run->run, str, sln);
|
||||
if (x2 == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x);
|
||||
qse_awk_rtx_refdownval (this->run->run, x);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refupval (this->run->run, x2);
|
||||
qse_awk_rtx_refupval (this->run->run, x2);
|
||||
|
||||
pair_t* pair = qse_map_upsert (
|
||||
((qse_awk_val_map_t*)x)->map,
|
||||
(char_t*)idx, iln, x2, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x2);
|
||||
qse_awk_refdownval (this->run->run, x);
|
||||
qse_awk_rtx_refdownval (this->run->run, x2);
|
||||
qse_awk_rtx_refdownval (this->run->run, x);
|
||||
this->run->setError (ERR_NOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = x;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_awk_val_t* x2 = qse_awk_makestrval (this->run->run, str, sln);
|
||||
qse_awk_val_t* x2 = qse_awk_rtx_makestrval (this->run->run, str, sln);
|
||||
if (x2 == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (this->run->run, x2);
|
||||
qse_awk_rtx_refupval (this->run->run, x2);
|
||||
|
||||
pair_t* pair = qse_map_upsert (
|
||||
((qse_awk_val_map_t*)this->val)->map,
|
||||
(char_t*)idx, iln, x2, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, x2);
|
||||
qse_awk_rtx_refdownval (this->run->run, x2);
|
||||
this->run->setError (ERR_NOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@ -893,7 +893,7 @@ int Awk::Return::setIndexed (long_t idx, const char_t* str, size_t sln)
|
||||
|
||||
void Awk::Return::clear ()
|
||||
{
|
||||
qse_awk_refdownval (this->run->run, this->val);
|
||||
qse_awk_rtx_refdownval (this->run->run, this->val);
|
||||
this->val = qse_awk_val_nil;
|
||||
}
|
||||
|
||||
@ -947,32 +947,32 @@ Awk::ErrorCode Awk::Run::getErrorCode () const
|
||||
Awk::size_t Awk::Run::getErrorLine () const
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
return qse_awk_getrunerrlin (this->run);
|
||||
return qse_awk_rtx_geterrlin (this->run);
|
||||
}
|
||||
|
||||
const Awk::char_t* Awk::Run::getErrorMessage () const
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
return qse_awk_getrunerrmsg (this->run);
|
||||
return qse_awk_rtx_geterrmsg (this->run);
|
||||
}
|
||||
|
||||
void Awk::Run::setError (ErrorCode code)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
qse_awk_setrunerror (this->run, code, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (this->run, code, 0, QSE_NULL, 0);
|
||||
}
|
||||
|
||||
void Awk::Run::setError (ErrorCode code, size_t line)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
qse_awk_setrunerror (this->run, code, line, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (this->run, code, line, QSE_NULL, 0);
|
||||
}
|
||||
|
||||
void Awk::Run::setError (ErrorCode code, size_t line, const char_t* arg)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
qse_cstr_t x = { arg, qse_strlen(arg) };
|
||||
qse_awk_setrunerror (this->run, code, line, &x, 1);
|
||||
qse_awk_rtx_seterror (this->run, code, line, &x, 1);
|
||||
}
|
||||
|
||||
void Awk::Run::setError (
|
||||
@ -980,26 +980,26 @@ void Awk::Run::setError (
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
qse_cstr_t x = { arg, len };
|
||||
qse_awk_setrunerror (this->run, code, line, &x, 1);
|
||||
qse_awk_rtx_seterror (this->run, code, line, &x, 1);
|
||||
}
|
||||
|
||||
void Awk::Run::setErrorWithMessage (
|
||||
ErrorCode code, size_t line, const char_t* msg)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
qse_awk_setrunerrmsg (this->run, code, line, msg);
|
||||
qse_awk_rtx_seterrmsg (this->run, code, line, msg);
|
||||
}
|
||||
|
||||
int Awk::Run::setGlobal (int id, long_t v)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
|
||||
qse_awk_val_t* tmp = qse_awk_makeintval (run, v);
|
||||
qse_awk_val_t* tmp = qse_awk_rtx_makeintval (run, v);
|
||||
if (tmp == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (run, tmp);
|
||||
qse_awk_rtx_refupval (run, tmp);
|
||||
int n = qse_awk_rtx_setglobal (this->run, id, tmp);
|
||||
qse_awk_refdownval (run, tmp);
|
||||
qse_awk_rtx_refdownval (run, tmp);
|
||||
return n;
|
||||
}
|
||||
|
||||
@ -1007,12 +1007,12 @@ int Awk::Run::setGlobal (int id, real_t v)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
|
||||
qse_awk_val_t* tmp = qse_awk_makerealval (run, v);
|
||||
qse_awk_val_t* tmp = qse_awk_rtx_makerealval (run, v);
|
||||
if (tmp == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (run, tmp);
|
||||
qse_awk_rtx_refupval (run, tmp);
|
||||
int n = qse_awk_rtx_setglobal (this->run, id, tmp);
|
||||
qse_awk_refdownval (run, tmp);
|
||||
qse_awk_rtx_refdownval (run, tmp);
|
||||
return n;
|
||||
}
|
||||
|
||||
@ -1020,12 +1020,12 @@ int Awk::Run::setGlobal (int id, const char_t* ptr, size_t len)
|
||||
{
|
||||
QSE_ASSERT (run != QSE_NULL);
|
||||
|
||||
qse_awk_val_t* tmp = qse_awk_makestrval (run, ptr, len);
|
||||
qse_awk_val_t* tmp = qse_awk_rtx_makestrval (run, ptr, len);
|
||||
if (tmp == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (run, tmp);
|
||||
qse_awk_rtx_refupval (run, tmp);
|
||||
int n = qse_awk_rtx_setglobal (this->run, id, tmp);
|
||||
qse_awk_refdownval (run, tmp);
|
||||
qse_awk_rtx_refdownval (run, tmp);
|
||||
return n;
|
||||
}
|
||||
|
||||
@ -1500,7 +1500,7 @@ int Awk::addFunction (
|
||||
|
||||
size_t nameLen = qse_strlen(name);
|
||||
|
||||
void* p = qse_awk_addfunc (awk, name, nameLen,
|
||||
void* p = qse_awk_addfnc (awk, name, nameLen,
|
||||
0, minArgs, maxArgs, QSE_NULL,
|
||||
functionHandler);
|
||||
if (p == QSE_NULL)
|
||||
@ -1514,7 +1514,7 @@ int Awk::addFunction (
|
||||
functionMap, (char_t*)name, nameLen, tmp, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
qse_awk_delfunc (awk, name, nameLen);
|
||||
qse_awk_delfnc (awk, name, nameLen);
|
||||
qse_awk_free (awk, tmp);
|
||||
|
||||
setError (ERR_NOMEM);
|
||||
@ -1530,7 +1530,7 @@ int Awk::deleteFunction (const char_t* name)
|
||||
|
||||
size_t nameLen = qse_strlen(name);
|
||||
|
||||
int n = qse_awk_delfunc (awk, name, nameLen);
|
||||
int n = qse_awk_delfnc (awk, name, nameLen);
|
||||
if (n == 0) qse_map_delete (functionMap, name, nameLen);
|
||||
else retrieveError ();
|
||||
|
||||
@ -1743,7 +1743,7 @@ void Awk::onRunEnd (run_t* run, int errnum, void* data)
|
||||
|
||||
if (errnum == ERR_NOERR && r->callbackFailed)
|
||||
{
|
||||
qse_awk_setrunerrnum (r->run, ERR_NOMEM);
|
||||
qse_awk_rtx_seterrnum (r->run, ERR_NOMEM);
|
||||
}
|
||||
|
||||
r->awk->onRunEnd (*r);
|
||||
|
@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = nostdinc
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
|
||||
lib_LTLIBRARIES = libqseawk.la
|
||||
libqseawk_la_SOURCES = awk.c err.c tree.c parse.c run.c rec.c val.c func.c misc.c eio.c std.c awk.h eio.h func.h misc.h parse.h run.h tree.h
|
||||
libqseawk_la_SOURCES = awk.c err.c tree.c parse.c run.c rec.c val.c fnc.c misc.c eio.c std.c awk.h eio.h val.h fnc.h misc.h parse.h run.h tree.h
|
||||
libqseawk_la_LDFLAGS= -L../cmn -L../utl -version-info 1:0:0 -no-undefined
|
||||
libqseawk_la_LIBADD= -lqsecmn -lqseutl
|
||||
|
||||
|
@ -61,7 +61,7 @@ libqseawk___la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
|
||||
@ENABLE_CXX_TRUE@am_libqseawk___la_rpath = -rpath $(libdir)
|
||||
libqseawk_la_DEPENDENCIES =
|
||||
am_libqseawk_la_OBJECTS = awk.lo err.lo tree.lo parse.lo run.lo rec.lo \
|
||||
val.lo func.lo misc.lo eio.lo std.lo
|
||||
val.lo fnc.lo misc.lo eio.lo std.lo
|
||||
libqseawk_la_OBJECTS = $(am_libqseawk_la_OBJECTS)
|
||||
libqseawk_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
@ -217,7 +217,7 @@ top_srcdir = @top_srcdir@
|
||||
AUTOMAKE_OPTIONS = nostdinc
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
lib_LTLIBRARIES = libqseawk.la $(am__append_1)
|
||||
libqseawk_la_SOURCES = awk.c err.c tree.c parse.c run.c rec.c val.c func.c misc.c eio.c std.c awk.h eio.h func.h misc.h parse.h run.h tree.h
|
||||
libqseawk_la_SOURCES = awk.c err.c tree.c parse.c run.c rec.c val.c fnc.c misc.c eio.c std.c awk.h eio.h val.h fnc.h misc.h parse.h run.h tree.h
|
||||
libqseawk_la_LDFLAGS = -L../cmn -L../utl -version-info 1:0:0 -no-undefined
|
||||
libqseawk_la_LIBADD = -lqsecmn -lqseutl
|
||||
@ENABLE_CXX_TRUE@libqseawk___la_SOURCES = Awk.cpp StdAwk.cpp
|
||||
@ -299,7 +299,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/awk.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eio.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/func.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnc.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec.Plo@am__quote@
|
||||
|
@ -33,10 +33,10 @@
|
||||
qse_awk_seterror ((awk), (code), (line), &errarg, 1); \
|
||||
} while (0)
|
||||
|
||||
static void free_afn (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
static void free_fun (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
{
|
||||
qse_awk_t* awk = *(qse_awk_t**)QSE_MAP_XTN(map);
|
||||
qse_awk_afn_t* f = (qse_awk_afn_t*)vptr;
|
||||
qse_awk_fun_t* f = (qse_awk_fun_t*)vptr;
|
||||
|
||||
/* f->name doesn't have to be freed */
|
||||
/*QSE_AWK_FREE (awk, f->name);*/
|
||||
@ -45,10 +45,10 @@ static void free_afn (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
QSE_AWK_FREE (awk, f);
|
||||
}
|
||||
|
||||
static void free_bfn (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
static void free_fnc (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
{
|
||||
qse_awk_t* awk = *(qse_awk_t**)QSE_MAP_XTN(map);
|
||||
qse_awk_bfn_t* f = (qse_awk_bfn_t*)vptr;
|
||||
qse_awk_fnc_t* f = (qse_awk_fnc_t*)vptr;
|
||||
|
||||
QSE_AWK_FREE (awk, f);
|
||||
}
|
||||
@ -93,19 +93,19 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t ext)
|
||||
qse_map_setscale (awk->rwtab, QSE_MAP_VAL, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
/* TODO: initial map size?? */
|
||||
awk->tree.afns = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->tree.afns == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_MAP_XTN(awk->tree.afns) = awk;
|
||||
qse_map_setcopier (awk->tree.afns, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (awk->tree.afns, QSE_MAP_VAL, free_afn);
|
||||
qse_map_setscale (awk->tree.afns, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
awk->tree.funs = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->tree.funs == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_MAP_XTN(awk->tree.funs) = awk;
|
||||
qse_map_setcopier (awk->tree.funs, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (awk->tree.funs, QSE_MAP_VAL, free_fun);
|
||||
qse_map_setscale (awk->tree.funs, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->parse.afns = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
if (awk->parse.afns == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_MAP_XTN(awk->parse.afns) = awk;
|
||||
qse_map_setcopier (awk->parse.afns, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setcopier (awk->parse.afns, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->parse.afns, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
awk->parse.funs = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
if (awk->parse.funs == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_MAP_XTN(awk->parse.funs) = awk;
|
||||
qse_map_setcopier (awk->parse.funs, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setcopier (awk->parse.funs, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->parse.funs, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->parse.named = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
if (awk->parse.named == QSE_NULL) goto oops;
|
||||
@ -165,13 +165,13 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t ext)
|
||||
awk->src.shared.buf_pos = 0;
|
||||
awk->src.shared.buf_len = 0;
|
||||
|
||||
awk->bfn.sys = QSE_NULL;
|
||||
awk->bfn.user = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->bfn.user == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_MAP_XTN(awk->bfn.user) = awk;
|
||||
qse_map_setcopier (awk->bfn.user, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (awk->bfn.user, QSE_MAP_VAL, free_bfn);
|
||||
qse_map_setscale (awk->bfn.user, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
awk->fnc.sys = QSE_NULL;
|
||||
awk->fnc.user = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->fnc.user == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_MAP_XTN(awk->fnc.user) = awk;
|
||||
qse_map_setcopier (awk->fnc.user, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (awk->fnc.user, QSE_MAP_VAL, free_fnc);
|
||||
qse_map_setscale (awk->fnc.user, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->parse.depth.cur.block = 0;
|
||||
awk->parse.depth.cur.loop = 0;
|
||||
@ -192,13 +192,13 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t ext)
|
||||
|
||||
|
||||
oops:
|
||||
if (awk->bfn.user) qse_map_close (awk->bfn.user);
|
||||
if (awk->fnc.user) qse_map_close (awk->fnc.user);
|
||||
if (awk->parse.params) qse_lda_close (awk->parse.params);
|
||||
if (awk->parse.locals) qse_lda_close (awk->parse.locals);
|
||||
if (awk->parse.globals) qse_lda_close (awk->parse.globals);
|
||||
if (awk->parse.named) qse_map_close (awk->parse.named);
|
||||
if (awk->parse.afns) qse_map_close (awk->parse.afns);
|
||||
if (awk->tree.afns) qse_map_close (awk->tree.afns);
|
||||
if (awk->parse.funs) qse_map_close (awk->parse.funs);
|
||||
if (awk->tree.funs) qse_map_close (awk->tree.funs);
|
||||
if (awk->rwtab) qse_map_close (awk->rwtab);
|
||||
if (awk->wtab) qse_map_close (awk->wtab);
|
||||
if (awk->token.name) qse_str_close (awk->token.name);
|
||||
@ -213,16 +213,16 @@ int qse_awk_close (qse_awk_t* awk)
|
||||
qse_size_t i;
|
||||
|
||||
if (qse_awk_clear (awk) == -1) return -1;
|
||||
/*qse_awk_clrbfn (awk);*/
|
||||
qse_map_close (awk->bfn.user);
|
||||
/*qse_awk_clrfnc (awk);*/
|
||||
qse_map_close (awk->fnc.user);
|
||||
|
||||
qse_lda_close (awk->parse.params);
|
||||
qse_lda_close (awk->parse.locals);
|
||||
qse_lda_close (awk->parse.globals);
|
||||
qse_map_close (awk->parse.named);
|
||||
qse_map_close (awk->parse.afns);
|
||||
qse_map_close (awk->parse.funs);
|
||||
|
||||
qse_map_close (awk->tree.afns);
|
||||
qse_map_close (awk->tree.funs);
|
||||
qse_map_close (awk->rwtab);
|
||||
qse_map_close (awk->wtab);
|
||||
|
||||
@ -264,7 +264,7 @@ int qse_awk_clear (qse_awk_t* awk)
|
||||
qse_lda_clear (awk->parse.locals);
|
||||
qse_lda_clear (awk->parse.params);
|
||||
qse_map_clear (awk->parse.named);
|
||||
qse_map_clear (awk->parse.afns);
|
||||
qse_map_clear (awk->parse.funs);
|
||||
|
||||
awk->parse.nlocals_max = 0;
|
||||
awk->parse.depth.cur.block = 0;
|
||||
@ -277,9 +277,9 @@ int qse_awk_clear (qse_awk_t* awk)
|
||||
awk->tree.nglobals = 0; */
|
||||
awk->tree.nglobals = awk->tree.nbglobals;
|
||||
|
||||
awk->tree.cur_afn.ptr = QSE_NULL;
|
||||
awk->tree.cur_afn.len = 0;
|
||||
qse_map_clear (awk->tree.afns);
|
||||
awk->tree.cur_fun.ptr = QSE_NULL;
|
||||
awk->tree.cur_fun.len = 0;
|
||||
qse_map_clear (awk->tree.funs);
|
||||
|
||||
if (awk->tree.begin != QSE_NULL)
|
||||
{
|
||||
|
@ -31,10 +31,11 @@ typedef struct qse_awk_tree_t qse_awk_tree_t;
|
||||
|
||||
#include <qse/awk/awk.h>
|
||||
#include "tree.h"
|
||||
#include "func.h"
|
||||
#include "fnc.h"
|
||||
#include "parse.h"
|
||||
#include "run.h"
|
||||
#include "eio.h"
|
||||
#include "val.h"
|
||||
#include "misc.h"
|
||||
|
||||
#define QSE_AWK_MAX_GLOBALS 9999
|
||||
@ -66,8 +67,8 @@ struct qse_awk_tree_t
|
||||
{
|
||||
qse_size_t nglobals; /* total number of globals */
|
||||
qse_size_t nbglobals; /* number of intrinsic globals */
|
||||
qse_cstr_t cur_afn;
|
||||
qse_map_t* afns; /* awk function map */
|
||||
qse_cstr_t cur_fun;
|
||||
qse_map_t* funs; /* awk function map */
|
||||
|
||||
qse_awk_nde_t* begin;
|
||||
qse_awk_nde_t* begin_tail;
|
||||
@ -131,7 +132,7 @@ struct qse_awk_t
|
||||
} depth;
|
||||
|
||||
/* function calls */
|
||||
qse_map_t* afns;
|
||||
qse_map_t* funs;
|
||||
|
||||
/* named variables */
|
||||
qse_map_t* named;
|
||||
@ -197,9 +198,9 @@ struct qse_awk_t
|
||||
/* intrinsic functions */
|
||||
struct
|
||||
{
|
||||
qse_awk_bfn_t* sys;
|
||||
qse_awk_fnc_t* sys;
|
||||
qse_map_t* user;
|
||||
} bfn;
|
||||
} fnc;
|
||||
|
||||
struct
|
||||
{
|
||||
|
@ -114,7 +114,7 @@ int qse_awk_readeio (
|
||||
if (handler == QSE_NULL)
|
||||
{
|
||||
/* no io handler provided */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOUSER);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOUSER);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -134,7 +134,7 @@ int qse_awk_readeio (
|
||||
run->awk, QSE_SIZEOF(qse_awk_eio_t));
|
||||
if (p == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -142,11 +142,11 @@ int qse_awk_readeio (
|
||||
if (p->name == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, p);
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
p->run = run;
|
||||
p->rtx = run;
|
||||
p->type = (eio_type | eio_mask);
|
||||
p->mode = eio_mode;
|
||||
p->handle = QSE_NULL;
|
||||
@ -159,7 +159,7 @@ int qse_awk_readeio (
|
||||
p->in.eof = QSE_FALSE;
|
||||
p->in.eos = QSE_FALSE;
|
||||
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
|
||||
/* request to open the stream */
|
||||
x = handler (QSE_AWK_IO_OPEN, p, QSE_NULL, 0);
|
||||
@ -172,7 +172,7 @@ int qse_awk_readeio (
|
||||
{
|
||||
/* if the error number has not been
|
||||
* set by the user handler */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
}
|
||||
|
||||
return -1;
|
||||
@ -205,7 +205,7 @@ int qse_awk_readeio (
|
||||
|
||||
/* get the record separator */
|
||||
rs = qse_awk_rtx_getglobal (run, QSE_AWK_GLOBAL_RS);
|
||||
qse_awk_refupval (run, rs);
|
||||
qse_awk_rtx_refupval (run, rs);
|
||||
|
||||
if (rs->type == QSE_AWK_VAL_NIL)
|
||||
{
|
||||
@ -219,11 +219,11 @@ int qse_awk_readeio (
|
||||
}
|
||||
else
|
||||
{
|
||||
rs_ptr = qse_awk_valtostr (
|
||||
rs_ptr = qse_awk_rtx_valtostr (
|
||||
run, rs, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &rs_len);
|
||||
if (rs_ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (run, rs);
|
||||
qse_awk_rtx_refdownval (run, rs);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -243,7 +243,7 @@ int qse_awk_readeio (
|
||||
break;
|
||||
}
|
||||
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
|
||||
n = handler (QSE_AWK_IO_READ,
|
||||
p, p->in.buf, QSE_COUNTOF(p->in.buf));
|
||||
@ -253,7 +253,7 @@ int qse_awk_readeio (
|
||||
{
|
||||
/* if the error number has not been
|
||||
* set by the user handler */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
}
|
||||
|
||||
ret = -1;
|
||||
@ -393,7 +393,7 @@ int qse_awk_readeio (
|
||||
|
||||
if (qse_str_ccat (buf, c) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
ret = -1;
|
||||
break;
|
||||
@ -406,7 +406,7 @@ int qse_awk_readeio (
|
||||
|
||||
if (rs_ptr != QSE_NULL &&
|
||||
rs->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, rs_ptr);
|
||||
qse_awk_refdownval (run, rs);
|
||||
qse_awk_rtx_refdownval (run, rs);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -426,7 +426,7 @@ int qse_awk_writeeio_val (
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_valtostr (
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, v,
|
||||
QSE_AWK_VALTOSTR_CLEAR | QSE_AWK_VALTOSTR_PRINT,
|
||||
QSE_NULL, &len);
|
||||
@ -461,7 +461,7 @@ int qse_awk_writeeio_str (
|
||||
if (handler == QSE_NULL)
|
||||
{
|
||||
/* no io handler provided */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOUSER);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOUSER);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -490,7 +490,7 @@ int qse_awk_writeeio_str (
|
||||
run->awk, QSE_SIZEOF(qse_awk_eio_t));
|
||||
if (p == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@ -499,12 +499,12 @@ int qse_awk_writeeio_str (
|
||||
if (p->name == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, p);
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
p->run = run;
|
||||
p->rtx = run;
|
||||
p->type = (eio_type | eio_mask);
|
||||
p->mode = eio_mode;
|
||||
p->handle = QSE_NULL;
|
||||
@ -514,7 +514,7 @@ int qse_awk_writeeio_str (
|
||||
p->out.eof = QSE_FALSE;
|
||||
p->out.eos = QSE_FALSE;
|
||||
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (QSE_AWK_IO_OPEN, p, QSE_NULL, 0);
|
||||
if (n <= -1)
|
||||
{
|
||||
@ -522,7 +522,7 @@ int qse_awk_writeeio_str (
|
||||
QSE_AWK_FREE (run->awk, p);
|
||||
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@ -558,12 +558,12 @@ int qse_awk_writeeio_str (
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (QSE_AWK_IO_WRITE, p, str, len);
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@ -603,7 +603,7 @@ int qse_awk_flusheio (
|
||||
if (handler == QSE_NULL)
|
||||
{
|
||||
/* no io handler provided */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOUSER);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOUSER);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -613,13 +613,13 @@ int qse_awk_flusheio (
|
||||
if (p->type == (eio_type | eio_mask) &&
|
||||
(name == QSE_NULL || qse_strcmp(p->name,name) == 0))
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (QSE_AWK_IO_FLUSH, p, QSE_NULL, 0);
|
||||
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -632,7 +632,7 @@ int qse_awk_flusheio (
|
||||
if (ok) return 0;
|
||||
|
||||
/* there is no corresponding eio for name */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIONONE);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIONONE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -657,7 +657,7 @@ int qse_awk_nexteio_read (
|
||||
if (handler == QSE_NULL)
|
||||
{
|
||||
/* no io handler provided */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOUSER);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOUSER);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -673,7 +673,7 @@ int qse_awk_nexteio_read (
|
||||
/* something is totally wrong */
|
||||
QSE_ASSERT (
|
||||
!"should never happen - cannot find the relevant eio entry");
|
||||
qse_awk_setrunerror (run, QSE_AWK_EINTERN, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_EINTERN, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -683,12 +683,12 @@ int qse_awk_nexteio_read (
|
||||
return 0;
|
||||
}
|
||||
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (QSE_AWK_IO_NEXT, p, QSE_NULL, 0);
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -735,7 +735,7 @@ int qse_awk_nexteio_write (
|
||||
if (handler == QSE_NULL)
|
||||
{
|
||||
/* no io handler provided */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOUSER);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOUSER);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -751,7 +751,7 @@ int qse_awk_nexteio_write (
|
||||
/* something is totally wrong */
|
||||
QSE_ASSERT (!"should never happen - cannot find the relevant eio entry");
|
||||
|
||||
qse_awk_setrunerror (run, QSE_AWK_EINTERN, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_EINTERN, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -761,12 +761,12 @@ int qse_awk_nexteio_write (
|
||||
return 0;
|
||||
}
|
||||
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (QSE_AWK_IO_NEXT, p, QSE_NULL, 0);
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -807,7 +807,7 @@ int qse_awk_closeeio_read (
|
||||
if (handler == QSE_NULL)
|
||||
{
|
||||
/* no io handler provided */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOUSER);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOUSER);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -824,7 +824,7 @@ int qse_awk_closeeio_read (
|
||||
if (handler (QSE_AWK_IO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
{
|
||||
/* this is not a run-time error.*/
|
||||
qse_awk_setrunerror (run, QSE_AWK_EIOIMPL, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_EIOIMPL, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -842,7 +842,7 @@ int qse_awk_closeeio_read (
|
||||
}
|
||||
|
||||
/* the name given is not found */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIONONE);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIONONE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -866,7 +866,7 @@ int qse_awk_closeeio_write (
|
||||
if (handler == QSE_NULL)
|
||||
{
|
||||
/* no io handler provided */
|
||||
qse_awk_setrunerror (run, QSE_AWK_EIOUSER, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_EIOUSER, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -880,11 +880,11 @@ int qse_awk_closeeio_write (
|
||||
handler = run->eio.handler[p->type & MASK_CLEAR];
|
||||
if (handler != QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
if (handler (QSE_AWK_IO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -901,7 +901,7 @@ int qse_awk_closeeio_write (
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIONONE);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIONONE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -920,12 +920,12 @@ int qse_awk_closeeio (qse_awk_rtx_t* run, const qse_char_t* name)
|
||||
handler = run->eio.handler[p->type & MASK_CLEAR];
|
||||
if (handler != QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
if (handler (QSE_AWK_IO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
{
|
||||
/* this is not a run-time error.*/
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -943,7 +943,7 @@ int qse_awk_closeeio (qse_awk_rtx_t* run, const qse_char_t* name)
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIONONE);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIONONE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -961,12 +961,12 @@ void qse_awk_cleareio (qse_awk_rtx_t* run)
|
||||
|
||||
if (handler != QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOERR);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (QSE_AWK_IO_CLOSE, run->eio.chain, QSE_NULL, 0);
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIOIMPL);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
/* TODO: some warnings need to be shown??? */
|
||||
}
|
||||
}
|
||||
|
@ -350,12 +350,12 @@ int qse_awk_rtx_geterrnum (qse_awk_rtx_t* run)
|
||||
return run->errnum;
|
||||
}
|
||||
|
||||
qse_size_t qse_awk_getrunerrlin (qse_awk_rtx_t* run)
|
||||
qse_size_t qse_awk_rtx_geterrlin (qse_awk_rtx_t* run)
|
||||
{
|
||||
return run->errlin;
|
||||
}
|
||||
|
||||
const qse_char_t* qse_awk_getrunerrmsg (qse_awk_rtx_t* run)
|
||||
const qse_char_t* qse_awk_rtx_geterrmsg (qse_awk_rtx_t* run)
|
||||
{
|
||||
if (run->errmsg[0] == QSE_T('\0'))
|
||||
return qse_awk_geterrstr (run->awk, run->errnum);
|
||||
@ -363,14 +363,14 @@ const qse_char_t* qse_awk_getrunerrmsg (qse_awk_rtx_t* run)
|
||||
return run->errmsg;
|
||||
}
|
||||
|
||||
void qse_awk_setrunerrnum (qse_awk_rtx_t* run, int errnum)
|
||||
void qse_awk_rtx_seterrnum (qse_awk_rtx_t* run, int errnum)
|
||||
{
|
||||
run->errnum = errnum;
|
||||
run->errlin = 0;
|
||||
run->errmsg[0] = QSE_T('\0');
|
||||
}
|
||||
|
||||
void qse_awk_setrunerrmsg (qse_awk_rtx_t* run,
|
||||
void qse_awk_rtx_seterrmsg (qse_awk_rtx_t* run,
|
||||
int errnum, qse_size_t errlin, const qse_char_t* errmsg)
|
||||
{
|
||||
run->errnum = errnum;
|
||||
@ -378,7 +378,7 @@ void qse_awk_setrunerrmsg (qse_awk_rtx_t* run,
|
||||
qse_strxcpy (run->errmsg, QSE_COUNTOF(run->errmsg), errmsg);
|
||||
}
|
||||
|
||||
void qse_awk_getrunerror (
|
||||
void qse_awk_rtx_geterror (
|
||||
qse_awk_rtx_t* run, int* errnum,
|
||||
qse_size_t* errlin, const qse_char_t** errmsg)
|
||||
{
|
||||
@ -393,7 +393,7 @@ void qse_awk_getrunerror (
|
||||
}
|
||||
}
|
||||
|
||||
void qse_awk_setrunerror (
|
||||
void qse_awk_rtx_seterror (
|
||||
qse_awk_rtx_t* run, int errnum, qse_size_t errlin,
|
||||
const qse_cstr_t* errarg, qse_size_t argcnt)
|
||||
{
|
||||
|
@ -18,50 +18,50 @@
|
||||
|
||||
#include "awk.h"
|
||||
|
||||
static int bfn_close (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_fflush (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_index (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_length (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_substr (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_split (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_tolower (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_toupper (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_gsub (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_sub (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_match (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int bfn_sprintf (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_close (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_fflush (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_index (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_length (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_substr (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_split (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_tolower (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_toupper (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_gsub (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_sub (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_match (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
static int fnc_sprintf (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
|
||||
#undef MAX
|
||||
#define MAX QSE_TYPE_UNSIGNED_MAX(qse_size_t)
|
||||
|
||||
static qse_awk_bfn_t sys_bfn[] =
|
||||
static qse_awk_fnc_t sys_fnc[] =
|
||||
{
|
||||
/* io functions */
|
||||
{ {QSE_T("close"), 5}, QSE_AWK_EIO, {1, 1, QSE_NULL}, bfn_close},
|
||||
{ {QSE_T("fflush"), 6}, QSE_AWK_EIO, {0, 1, QSE_NULL}, bfn_fflush},
|
||||
{ {QSE_T("close"), 5}, QSE_AWK_EIO, {1, 1, QSE_NULL}, fnc_close},
|
||||
{ {QSE_T("fflush"), 6}, QSE_AWK_EIO, {0, 1, QSE_NULL}, fnc_fflush},
|
||||
|
||||
/* string functions */
|
||||
{ {QSE_T("index"), 5}, 0, {2, 2, QSE_NULL}, bfn_index},
|
||||
{ {QSE_T("substr"), 6}, 0, {2, 3, QSE_NULL}, bfn_substr},
|
||||
{ {QSE_T("length"), 6}, 0, {1, 1, QSE_NULL}, bfn_length},
|
||||
{ {QSE_T("split"), 5}, 0, {2, 3, QSE_T("vrv")}, bfn_split},
|
||||
{ {QSE_T("tolower"), 7}, 0, {1, 1, QSE_NULL}, bfn_tolower},
|
||||
{ {QSE_T("toupper"), 7}, 0, {1, 1, QSE_NULL}, bfn_toupper},
|
||||
{ {QSE_T("gsub"), 4}, 0, {2, 3, QSE_T("xvr")}, bfn_gsub},
|
||||
{ {QSE_T("sub"), 3}, 0, {2, 3, QSE_T("xvr")}, bfn_sub},
|
||||
{ {QSE_T("match"), 5}, 0, {2, 2, QSE_T("vx")}, bfn_match},
|
||||
{ {QSE_T("sprintf"), 7}, 0, {1, MAX, QSE_NULL}, bfn_sprintf},
|
||||
{ {QSE_T("index"), 5}, 0, {2, 2, QSE_NULL}, fnc_index},
|
||||
{ {QSE_T("substr"), 6}, 0, {2, 3, QSE_NULL}, fnc_substr},
|
||||
{ {QSE_T("length"), 6}, 0, {1, 1, QSE_NULL}, fnc_length},
|
||||
{ {QSE_T("split"), 5}, 0, {2, 3, QSE_T("vrv")}, fnc_split},
|
||||
{ {QSE_T("tolower"), 7}, 0, {1, 1, QSE_NULL}, fnc_tolower},
|
||||
{ {QSE_T("toupper"), 7}, 0, {1, 1, QSE_NULL}, fnc_toupper},
|
||||
{ {QSE_T("gsub"), 4}, 0, {2, 3, QSE_T("xvr")}, fnc_gsub},
|
||||
{ {QSE_T("sub"), 3}, 0, {2, 3, QSE_T("xvr")}, fnc_sub},
|
||||
{ {QSE_T("match"), 5}, 0, {2, 2, QSE_T("vx")}, fnc_match},
|
||||
{ {QSE_T("sprintf"), 7}, 0, {1, MAX, QSE_NULL}, fnc_sprintf},
|
||||
|
||||
{ {QSE_NULL, 0}, 0, {0, 0, QSE_NULL}, QSE_NULL}
|
||||
};
|
||||
|
||||
void* qse_awk_addfunc (
|
||||
void* qse_awk_addfnc (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t name_len,
|
||||
int when_valid, qse_size_t min_args, qse_size_t max_args,
|
||||
const qse_char_t* arg_spec,
|
||||
int (*handler)(qse_awk_rtx_t*,const qse_char_t*,qse_size_t))
|
||||
{
|
||||
qse_awk_bfn_t* bfn;
|
||||
qse_awk_fnc_t* fnc;
|
||||
qse_size_t spec_len;
|
||||
|
||||
if (name_len <= 0)
|
||||
@ -70,7 +70,7 @@ void* qse_awk_addfunc (
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
if (qse_awk_getbfn (awk, name, name_len) != QSE_NULL)
|
||||
if (qse_awk_getfnc (awk, name, name_len) != QSE_NULL)
|
||||
{
|
||||
qse_cstr_t errarg;
|
||||
|
||||
@ -83,48 +83,48 @@ void* qse_awk_addfunc (
|
||||
|
||||
spec_len = (arg_spec == QSE_NULL)? 0: qse_strlen(arg_spec);
|
||||
|
||||
bfn = (qse_awk_bfn_t*) QSE_AWK_ALLOC (awk,
|
||||
QSE_SIZEOF(qse_awk_bfn_t) +
|
||||
fnc = (qse_awk_fnc_t*) QSE_AWK_ALLOC (awk,
|
||||
QSE_SIZEOF(qse_awk_fnc_t) +
|
||||
(name_len+1) * QSE_SIZEOF(qse_char_t) +
|
||||
(spec_len+1) * QSE_SIZEOF(qse_char_t));
|
||||
if (bfn == QSE_NULL)
|
||||
if (fnc == QSE_NULL)
|
||||
{
|
||||
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
bfn->name.ptr = (qse_char_t*)(bfn + 1);
|
||||
bfn->name.len = name_len;
|
||||
qse_strxncpy (bfn->name.ptr, name_len+1, name, name_len);
|
||||
fnc->name.ptr = (qse_char_t*)(fnc + 1);
|
||||
fnc->name.len = name_len;
|
||||
qse_strxncpy (fnc->name.ptr, name_len+1, name, name_len);
|
||||
|
||||
bfn->valid = when_valid;
|
||||
bfn->arg.min = min_args;
|
||||
bfn->arg.max = max_args;
|
||||
fnc->valid = when_valid;
|
||||
fnc->arg.min = min_args;
|
||||
fnc->arg.max = max_args;
|
||||
|
||||
if (arg_spec == QSE_NULL) bfn->arg.spec = QSE_NULL;
|
||||
if (arg_spec == QSE_NULL) fnc->arg.spec = QSE_NULL;
|
||||
else
|
||||
{
|
||||
bfn->arg.spec = bfn->name.ptr + bfn->name.len + 1;
|
||||
qse_strxcpy (bfn->arg.spec, spec_len+1, arg_spec);
|
||||
fnc->arg.spec = fnc->name.ptr + fnc->name.len + 1;
|
||||
qse_strxcpy (fnc->arg.spec, spec_len+1, arg_spec);
|
||||
}
|
||||
|
||||
bfn->handler = handler;
|
||||
fnc->handler = handler;
|
||||
|
||||
if (qse_map_insert (awk->bfn.user,
|
||||
(qse_char_t*)name, name_len, bfn, 0) == QSE_NULL)
|
||||
if (qse_map_insert (awk->fnc.user,
|
||||
(qse_char_t*)name, name_len, fnc, 0) == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (awk, bfn);
|
||||
QSE_AWK_FREE (awk, fnc);
|
||||
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
return bfn;
|
||||
return fnc;
|
||||
}
|
||||
|
||||
int qse_awk_delfunc (
|
||||
int qse_awk_delfnc (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t name_len)
|
||||
{
|
||||
if (qse_map_delete (awk->bfn.user, name, name_len) == -1)
|
||||
if (qse_map_delete (awk->fnc.user, name, name_len) == -1)
|
||||
{
|
||||
qse_cstr_t errarg;
|
||||
|
||||
@ -138,27 +138,27 @@ int qse_awk_delfunc (
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qse_awk_clrbfn (qse_awk_t* awk)
|
||||
void qse_awk_clrfnc (qse_awk_t* awk)
|
||||
{
|
||||
qse_map_clear (awk->bfn.user);
|
||||
qse_map_clear (awk->fnc.user);
|
||||
}
|
||||
|
||||
qse_awk_bfn_t* qse_awk_getbfn (
|
||||
qse_awk_fnc_t* qse_awk_getfnc (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
|
||||
{
|
||||
qse_awk_bfn_t* bfn;
|
||||
qse_awk_fnc_t* fnc;
|
||||
qse_map_pair_t* pair;
|
||||
const qse_char_t* k;
|
||||
qse_size_t l;
|
||||
|
||||
/* search the system function table */
|
||||
for (bfn = sys_bfn; bfn->name.ptr != QSE_NULL; bfn++)
|
||||
for (fnc = sys_fnc; fnc->name.ptr != QSE_NULL; fnc++)
|
||||
{
|
||||
if (bfn->valid != 0 &&
|
||||
(awk->option & bfn->valid) != bfn->valid) continue;
|
||||
if (fnc->valid != 0 &&
|
||||
(awk->option & fnc->valid) != fnc->valid) continue;
|
||||
|
||||
pair = qse_map_search (
|
||||
awk->wtab, bfn->name.ptr, bfn->name.len);
|
||||
awk->wtab, fnc->name.ptr, fnc->name.len);
|
||||
if (pair != QSE_NULL)
|
||||
{
|
||||
/* found in the customized word table */
|
||||
@ -167,11 +167,11 @@ qse_awk_bfn_t* qse_awk_getbfn (
|
||||
}
|
||||
else
|
||||
{
|
||||
k = bfn->name.ptr;
|
||||
l = bfn->name.len;
|
||||
k = fnc->name.ptr;
|
||||
l = fnc->name.len;
|
||||
}
|
||||
|
||||
if (qse_strxncmp (k, l, name, len) == 0) return bfn;
|
||||
if (qse_strxncmp (k, l, name, len) == 0) return fnc;
|
||||
}
|
||||
|
||||
/* NOTE: I suspect this block of code might be very fragile.
|
||||
@ -216,16 +216,16 @@ qse_awk_bfn_t* qse_awk_getbfn (
|
||||
}
|
||||
/* END NOTE */
|
||||
|
||||
pair = qse_map_search (awk->bfn.user, k, l);
|
||||
pair = qse_map_search (awk->fnc.user, k, l);
|
||||
if (pair == QSE_NULL) return QSE_NULL;
|
||||
|
||||
bfn = (qse_awk_bfn_t*)QSE_MAP_VPTR(pair);
|
||||
if (bfn->valid != 0 && (awk->option & bfn->valid) == 0) return QSE_NULL;
|
||||
fnc = (qse_awk_fnc_t*)QSE_MAP_VPTR(pair);
|
||||
if (fnc->valid != 0 && (awk->option & fnc->valid) == 0) return QSE_NULL;
|
||||
|
||||
return bfn;
|
||||
return fnc;
|
||||
}
|
||||
|
||||
static int bfn_close (
|
||||
static int fnc_close (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -249,7 +249,7 @@ static int bfn_close (
|
||||
}
|
||||
else
|
||||
{
|
||||
name = qse_awk_valtostr (
|
||||
name = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (name == QSE_NULL) return -1;
|
||||
}
|
||||
@ -292,10 +292,10 @@ static int bfn_close (
|
||||
skip_close:
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, name);
|
||||
|
||||
v = qse_awk_makeintval (run, (qse_long_t)n);
|
||||
v = qse_awk_rtx_makeintval (run, (qse_long_t)n);
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -333,7 +333,7 @@ static int flush_eio (
|
||||
return n;
|
||||
}
|
||||
|
||||
static int bfn_fflush (
|
||||
static int fnc_fflush (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -363,7 +363,7 @@ static int bfn_fflush (
|
||||
}
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_valtostr (
|
||||
str0 = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
|
||||
@ -403,10 +403,10 @@ static int bfn_fflush (
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str0);
|
||||
}
|
||||
|
||||
a0 = qse_awk_makeintval (run, (qse_long_t)n);
|
||||
a0 = qse_awk_rtx_makeintval (run, (qse_long_t)n);
|
||||
if (a0 == QSE_NULL)
|
||||
{
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -414,7 +414,7 @@ static int bfn_fflush (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_index (
|
||||
static int fnc_index (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -436,7 +436,7 @@ static int bfn_index (
|
||||
}
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_valtostr (
|
||||
str0 = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
}
|
||||
@ -448,7 +448,7 @@ static int bfn_index (
|
||||
}
|
||||
else
|
||||
{
|
||||
str1 = qse_awk_valtostr (
|
||||
str1 = qse_awk_rtx_valtostr (
|
||||
run, a1, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len1);
|
||||
if (str1 == QSE_NULL)
|
||||
{
|
||||
@ -466,10 +466,10 @@ static int bfn_index (
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str0);
|
||||
if (a1->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str1);
|
||||
|
||||
a0 = qse_awk_makeintval (run, idx);
|
||||
a0 = qse_awk_rtx_makeintval (run, idx);
|
||||
if (a0 == QSE_NULL)
|
||||
{
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -477,7 +477,7 @@ static int bfn_index (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_length (
|
||||
static int fnc_length (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -495,16 +495,16 @@ static int bfn_length (
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_valtostr (
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, v, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
QSE_AWK_FREE (run->awk, str);
|
||||
}
|
||||
|
||||
v = qse_awk_makeintval (run, len);
|
||||
v = qse_awk_rtx_makeintval (run, len);
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -512,7 +512,7 @@ static int bfn_length (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_substr (
|
||||
static int fnc_substr (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -537,12 +537,12 @@ static int bfn_substr (
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_valtostr (
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
n = qse_awk_valtonum (run, a1, &lindex, &rindex);
|
||||
n = qse_awk_rtx_valtonum (run, a1, &lindex, &rindex);
|
||||
if (n == -1)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
@ -553,7 +553,7 @@ static int bfn_substr (
|
||||
if (a2 == QSE_NULL) lcount = (qse_long_t)len;
|
||||
else
|
||||
{
|
||||
n = qse_awk_valtonum (run, a2, &lcount, &rcount);
|
||||
n = qse_awk_rtx_valtonum (run, a2, &lcount, &rcount);
|
||||
if (n == -1)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR)
|
||||
@ -573,11 +573,11 @@ static int bfn_substr (
|
||||
lcount = (qse_long_t)len - lindex;
|
||||
}
|
||||
|
||||
r = qse_awk_makestrval (run, &str[lindex], (qse_size_t)lcount);
|
||||
r = qse_awk_rtx_makestrval (run, &str[lindex], (qse_size_t)lcount);
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -586,7 +586,7 @@ static int bfn_substr (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_split (
|
||||
static int fnc_split (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -615,14 +615,14 @@ static int bfn_split (
|
||||
((qse_awk_val_ref_t*)a1)->id <= QSE_AWK_VAL_REF_ARGIDX)
|
||||
{
|
||||
/* an indexed value should not be assigned another map */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EIDXVALASSMAP);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIDXVALASSMAP);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (((qse_awk_val_ref_t*)a1)->id == QSE_AWK_VAL_REF_POS)
|
||||
{
|
||||
/* a positional should not be assigned a map */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EPOSVALASSMAP);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EPOSVALASSMAP);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -631,7 +631,7 @@ static int bfn_split (
|
||||
(*a1_ref)->type != QSE_AWK_VAL_MAP)
|
||||
{
|
||||
/* cannot change a scalar value to a map */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ESCALARTOMAP);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ESCALARTOMAP);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -643,7 +643,7 @@ static int bfn_split (
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_valtostr (
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &str_len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
str_free = str;
|
||||
@ -667,7 +667,7 @@ static int bfn_split (
|
||||
}
|
||||
else
|
||||
{
|
||||
fs_ptr = qse_awk_valtostr (
|
||||
fs_ptr = qse_awk_rtx_valtostr (
|
||||
run, t1, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
if (fs_ptr == QSE_NULL)
|
||||
{
|
||||
@ -694,7 +694,7 @@ static int bfn_split (
|
||||
}
|
||||
else
|
||||
{
|
||||
fs_ptr = qse_awk_valtostr (
|
||||
fs_ptr = qse_awk_rtx_valtostr (
|
||||
run, a2, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
if (fs_ptr == QSE_NULL)
|
||||
{
|
||||
@ -715,14 +715,14 @@ static int bfn_split (
|
||||
QSE_AWK_FREE (run->awk, str_free);
|
||||
if (fs_free != QSE_NULL)
|
||||
QSE_AWK_FREE (run->awk, fs_free);
|
||||
qse_awk_setrunerrnum (run, errnum);
|
||||
qse_awk_rtx_seterrnum (run, errnum);
|
||||
return -1;
|
||||
}
|
||||
fs_rex_free = fs_rex;
|
||||
}
|
||||
}
|
||||
|
||||
t1 = qse_awk_makemapval (run);
|
||||
t1 = qse_awk_rtx_makemapval (run);
|
||||
if (t1 == QSE_NULL)
|
||||
{
|
||||
if (str_free != QSE_NULL)
|
||||
@ -731,13 +731,13 @@ static int bfn_split (
|
||||
QSE_AWK_FREE (run->awk, fs_free);
|
||||
if (fs_rex_free != QSE_NULL)
|
||||
QSE_AWK_FREEREX (run->awk, fs_rex_free);
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refdownval (run, *a1_ref);
|
||||
qse_awk_rtx_refdownval (run, *a1_ref);
|
||||
*a1_ref = t1;
|
||||
qse_awk_refupval (run, *a1_ref);
|
||||
qse_awk_rtx_refupval (run, *a1_ref);
|
||||
|
||||
p = str; str_left = str_len;
|
||||
sta = (qse_awk_getoption(run->awk) & QSE_AWK_BASEONE)? 1: 0;
|
||||
@ -762,7 +762,7 @@ static int bfn_split (
|
||||
QSE_AWK_FREE (run->awk, fs_free);
|
||||
if (fs_rex_free != QSE_NULL)
|
||||
QSE_AWK_FREEREX (run->awk, fs_rex_free);
|
||||
qse_awk_setrunerrnum (run, errnum);
|
||||
qse_awk_rtx_seterrnum (run, errnum);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -777,7 +777,7 @@ static int bfn_split (
|
||||
(tok != QSE_NULL && tok_len > 0) || tok_len == 0);
|
||||
|
||||
/* create the field string */
|
||||
t2 = qse_awk_makestrval (run, tok, tok_len);
|
||||
t2 = qse_awk_rtx_makestrval (run, tok, tok_len);
|
||||
if (t2 == QSE_NULL)
|
||||
{
|
||||
if (str_free != QSE_NULL)
|
||||
@ -786,7 +786,7 @@ static int bfn_split (
|
||||
QSE_AWK_FREE (run->awk, fs_free);
|
||||
if (fs_rex_free != QSE_NULL)
|
||||
QSE_AWK_FREEREX (run->awk, fs_rex_free);
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -799,14 +799,14 @@ static int bfn_split (
|
||||
* handle the assignment-like situation. anyway, it is
|
||||
* incremented in advance as if the assignment was successful.
|
||||
* it is decremented if the assignement fails. */
|
||||
qse_awk_refupval (run, t2);
|
||||
qse_awk_rtx_refupval (run, t2);
|
||||
|
||||
if (qse_map_insert (
|
||||
((qse_awk_val_map_t*)t1)->map,
|
||||
key, key_len, t2, 0) == QSE_NULL)
|
||||
{
|
||||
/* assignment failed. restore the reference counter */
|
||||
qse_awk_refdownval (run, t2);
|
||||
qse_awk_rtx_refdownval (run, t2);
|
||||
|
||||
if (str_free != QSE_NULL)
|
||||
QSE_AWK_FREE (run->awk, str_free);
|
||||
@ -818,7 +818,7 @@ static int bfn_split (
|
||||
/* qse_map_insert() fails if the key exists.
|
||||
* that can't happen here. so set the error code
|
||||
* to ENOMEM */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -832,10 +832,10 @@ static int bfn_split (
|
||||
|
||||
if (sta == 1) num--;
|
||||
|
||||
t1 = qse_awk_makeintval (run, num);
|
||||
t1 = qse_awk_rtx_makeintval (run, num);
|
||||
if (t1 == QSE_NULL)
|
||||
{
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -843,7 +843,7 @@ static int bfn_split (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_tolower (
|
||||
static int fnc_tolower (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -863,18 +863,18 @@ static int bfn_tolower (
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_valtostr (
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++) str[i] = QSE_AWK_TOLOWER (run->awk, str[i]);
|
||||
|
||||
r = qse_awk_makestrval (run, str, len);
|
||||
r = qse_awk_rtx_makestrval (run, str, len);
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -883,7 +883,7 @@ static int bfn_tolower (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_toupper (
|
||||
static int fnc_toupper (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -903,18 +903,18 @@ static int bfn_toupper (
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_valtostr (
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++) str[i] = QSE_AWK_TOUPPER (run->awk, str[i]);
|
||||
|
||||
r = qse_awk_makestrval (run, str, len);
|
||||
r = qse_awk_rtx_makestrval (run, str, len);
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -970,7 +970,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
a0_ptr = qse_awk_valtostr (
|
||||
a0_ptr = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &a0_len);
|
||||
if (a0_ptr == QSE_NULL)
|
||||
{
|
||||
@ -987,7 +987,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
a1_ptr = qse_awk_valtostr (
|
||||
a1_ptr = qse_awk_rtx_valtostr (
|
||||
run, a1, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &a1_len);
|
||||
if (a1_ptr == QSE_NULL)
|
||||
{
|
||||
@ -1032,7 +1032,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
{
|
||||
FREE_A_PTRS (run->awk);
|
||||
/* a map is not allowed as the third parameter */
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_EMAPNOTALLOWED);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EMAPNOTALLOWED);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1043,7 +1043,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
a2_ptr = qse_awk_valtostr (
|
||||
a2_ptr = qse_awk_rtx_valtostr (
|
||||
run, *a2_ref, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &a2_len);
|
||||
if (a2_ptr == QSE_NULL)
|
||||
{
|
||||
@ -1057,7 +1057,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
if (qse_str_init (&new, run->awk->mmgr, a2_len) == QSE_NULL)
|
||||
{
|
||||
FREE_A_PTRS (run->awk);
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1156,7 +1156,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
{
|
||||
if (a2 == QSE_NULL)
|
||||
{
|
||||
if (qse_awk_setrec (run, 0,
|
||||
if (qse_awk_rtx_setrec (run, 0,
|
||||
QSE_STR_PTR(&new), QSE_STR_LEN(&new)) == -1)
|
||||
{
|
||||
qse_str_fini (&new);
|
||||
@ -1168,7 +1168,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
{
|
||||
int n;
|
||||
|
||||
n = qse_awk_setrec (
|
||||
n = qse_awk_rtx_setrec (
|
||||
run, (qse_size_t)((qse_awk_val_ref_t*)a2)->adr,
|
||||
QSE_STR_PTR(&new), QSE_STR_LEN(&new));
|
||||
|
||||
@ -1181,19 +1181,19 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
v = qse_awk_makestrval (run,
|
||||
v = qse_awk_rtx_makestrval (run,
|
||||
QSE_STR_PTR(&new), QSE_STR_LEN(&new));
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
qse_str_fini (&new);
|
||||
FREE_A_PTRS (run->awk);
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refdownval (run, *a2_ref);
|
||||
qse_awk_rtx_refdownval (run, *a2_ref);
|
||||
*a2_ref = v;
|
||||
qse_awk_refupval (run, *a2_ref);
|
||||
qse_awk_rtx_refupval (run, *a2_ref);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1203,10 +1203,10 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
#undef FREE_A0_REX
|
||||
#undef FREE_A_PTRS
|
||||
|
||||
v = qse_awk_makeintval (run, sub_count);
|
||||
v = qse_awk_rtx_makeintval (run, sub_count);
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1214,19 +1214,19 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_gsub (
|
||||
static int fnc_gsub (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return __substitute (run, 0);
|
||||
}
|
||||
|
||||
static int bfn_sub (
|
||||
static int fnc_sub (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return __substitute (run, 1);
|
||||
}
|
||||
|
||||
static int bfn_match (
|
||||
static int fnc_match (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -1252,7 +1252,7 @@ static int bfn_match (
|
||||
}
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_valtostr (
|
||||
str0 = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
}
|
||||
@ -1270,7 +1270,7 @@ static int bfn_match (
|
||||
}
|
||||
else
|
||||
{
|
||||
str1 = qse_awk_valtostr (
|
||||
str1 = qse_awk_rtx_valtostr (
|
||||
run, a1, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len1);
|
||||
if (str1 == QSE_NULL)
|
||||
{
|
||||
@ -1304,48 +1304,48 @@ static int bfn_match (
|
||||
idx = (n == 0)? -1: (qse_long_t)(mat_ptr - str0);
|
||||
if (qse_awk_getoption(run->awk) & QSE_AWK_BASEONE) idx = idx + 1;
|
||||
|
||||
a0 = qse_awk_makeintval (run, idx);
|
||||
a0 = qse_awk_rtx_makeintval (run, idx);
|
||||
if (a0 == QSE_NULL)
|
||||
{
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refupval (run, a0);
|
||||
qse_awk_rtx_refupval (run, a0);
|
||||
|
||||
a1 = qse_awk_makeintval (run,
|
||||
a1 = qse_awk_rtx_makeintval (run,
|
||||
((n == 0)? (qse_long_t)-1: (qse_long_t)mat_len));
|
||||
if (a1 == QSE_NULL)
|
||||
{
|
||||
qse_awk_refdownval (run, a0);
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
qse_awk_rtx_refdownval (run, a0);
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refupval (run, a1);
|
||||
qse_awk_rtx_refupval (run, a1);
|
||||
|
||||
if (qse_awk_rtx_setglobal (run, QSE_AWK_GLOBAL_RSTART, a0) == -1)
|
||||
{
|
||||
qse_awk_refdownval (run, a1);
|
||||
qse_awk_refdownval (run, a0);
|
||||
qse_awk_rtx_refdownval (run, a1);
|
||||
qse_awk_rtx_refdownval (run, a0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qse_awk_rtx_setglobal (run, QSE_AWK_GLOBAL_RLENGTH, a1) == -1)
|
||||
{
|
||||
qse_awk_refdownval (run, a1);
|
||||
qse_awk_refdownval (run, a0);
|
||||
qse_awk_rtx_refdownval (run, a1);
|
||||
qse_awk_rtx_refdownval (run, a0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_rtx_setretval (run, a0);
|
||||
|
||||
qse_awk_refdownval (run, a1);
|
||||
qse_awk_refdownval (run, a0);
|
||||
qse_awk_rtx_refdownval (run, a1);
|
||||
qse_awk_rtx_refdownval (run, a0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_sprintf (
|
||||
static int fnc_sprintf (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -1359,13 +1359,13 @@ static int bfn_sprintf (
|
||||
|
||||
if (qse_str_init (&out, run->awk->mmgr, 256) == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
if (qse_str_init (&fbu, run->awk->mmgr, 256) == QSE_NULL)
|
||||
{
|
||||
qse_str_fini (&out);
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1377,7 +1377,7 @@ static int bfn_sprintf (
|
||||
}
|
||||
else
|
||||
{
|
||||
cs0.ptr = qse_awk_valtostr (
|
||||
cs0.ptr = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &cs0.len);
|
||||
if (cs0.ptr == QSE_NULL)
|
||||
{
|
||||
@ -1397,13 +1397,13 @@ static int bfn_sprintf (
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*a0 = qse_awk_makestrval_nodup (run, x.ptr, x.len);*/
|
||||
a0 = qse_awk_makestrval (run, x.ptr, x.len);
|
||||
/*a0 = qse_awk_rtx_makestrval_nodup (run, x.ptr, x.len);*/
|
||||
a0 = qse_awk_rtx_makestrval (run, x.ptr, x.len);
|
||||
if (a0 == QSE_NULL)
|
||||
{
|
||||
qse_str_fini (&fbu);
|
||||
qse_str_fini (&out);
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
@ -16,12 +16,12 @@
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef _QSE_LIB_AWK_FUNC_H_
|
||||
#define _QSE_LIB_AWK_FUNC_H_
|
||||
#ifndef _QSE_LIB_AWK_FNC_H_
|
||||
#define _QSE_LIB_AWK_FNC_H_
|
||||
|
||||
typedef struct qse_awk_bfn_t qse_awk_bfn_t;
|
||||
typedef struct qse_awk_fnc_t qse_awk_fnc_t;
|
||||
|
||||
struct qse_awk_bfn_t
|
||||
struct qse_awk_fnc_t
|
||||
{
|
||||
struct
|
||||
{
|
||||
@ -40,14 +40,14 @@ struct qse_awk_bfn_t
|
||||
|
||||
int (*handler) (qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
|
||||
/*qse_awk_bfn_t* next;*/
|
||||
/*qse_awk_fnc_t* next;*/
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
qse_awk_bfn_t* qse_awk_getbfn (
|
||||
qse_awk_fnc_t* qse_awk_getfnc (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t len);
|
||||
|
||||
#ifdef __cplusplus
|
@ -205,7 +205,7 @@ static qse_awk_nde_t* parse_hashidx (
|
||||
qse_size_t line);
|
||||
static qse_awk_nde_t* parse_fncall (
|
||||
qse_awk_t* awk, qse_char_t* name, qse_size_t name_len,
|
||||
qse_awk_bfn_t* bfn, qse_size_t line);
|
||||
qse_awk_fnc_t* fnc, qse_size_t line);
|
||||
static qse_awk_nde_t* parse_if (qse_awk_t* awk, qse_size_t line);
|
||||
static qse_awk_nde_t* parse_while (qse_awk_t* awk, qse_size_t line);
|
||||
static qse_awk_nde_t* parse_for (qse_awk_t* awk, qse_size_t line);
|
||||
@ -560,10 +560,10 @@ static int parse (qse_awk_t* awk)
|
||||
qse_map_pair_t* p;
|
||||
qse_size_t buckno;
|
||||
|
||||
p = qse_map_getfirstpair (awk->parse.afns, &buckno);
|
||||
p = qse_map_getfirstpair (awk->parse.funs, &buckno);
|
||||
while (p != QSE_NULL)
|
||||
{
|
||||
if (qse_map_search (awk->tree.afns,
|
||||
if (qse_map_search (awk->tree.funs,
|
||||
QSE_MAP_KPTR(p), QSE_MAP_KLEN(p)) == QSE_NULL)
|
||||
{
|
||||
/* TODO: set better error no & line */
|
||||
@ -574,7 +574,7 @@ static int parse (qse_awk_t* awk)
|
||||
EXIT_PARSE(-1);
|
||||
}
|
||||
|
||||
p = qse_map_getnextpair (awk->parse.afns, p, &buckno);
|
||||
p = qse_map_getnextpair (awk->parse.funs, p, &buckno);
|
||||
}
|
||||
|
||||
}
|
||||
@ -834,7 +834,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
qse_char_t* name_dup;
|
||||
qse_size_t name_len;
|
||||
qse_awk_nde_t* body;
|
||||
qse_awk_afn_t* afn;
|
||||
qse_awk_fun_t* fun;
|
||||
qse_size_t nargs, g;
|
||||
qse_map_pair_t* pair;
|
||||
|
||||
@ -854,13 +854,13 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
name_len = QSE_STR_LEN(awk->token.name);
|
||||
|
||||
/* check if it is a builtin function */
|
||||
if (qse_awk_getbfn (awk, name, name_len) != QSE_NULL)
|
||||
if (qse_awk_getfnc (awk, name, name_len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (awk, QSE_AWK_EBFNRED, awk->token.line, name, name_len);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
if (qse_map_search (awk->tree.afns, name, name_len) != QSE_NULL)
|
||||
if (qse_map_search (awk->tree.funs, name, name_len) != QSE_NULL)
|
||||
{
|
||||
/* the function is defined previously */
|
||||
SETERRARG (
|
||||
@ -1052,15 +1052,15 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
|
||||
/* remember the current function name so that the body parser
|
||||
* can know the name of the current function being parsed */
|
||||
awk->tree.cur_afn.ptr = name_dup;
|
||||
awk->tree.cur_afn.len = name_len;
|
||||
awk->tree.cur_fun.ptr = name_dup;
|
||||
awk->tree.cur_fun.len = name_len;
|
||||
|
||||
/* actual function body */
|
||||
body = awk->parse.parse_block (awk, awk->token.prev.line, QSE_TRUE);
|
||||
|
||||
/* clear the current function name remembered */
|
||||
awk->tree.cur_afn.ptr = QSE_NULL;
|
||||
awk->tree.cur_afn.len = 0;
|
||||
awk->tree.cur_fun.ptr = QSE_NULL;
|
||||
awk->tree.cur_fun.len = 0;
|
||||
|
||||
if (body == QSE_NULL)
|
||||
{
|
||||
@ -1075,8 +1075,8 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
/* parameter names are not required anymore. clear them */
|
||||
qse_lda_clear (awk->parse.params);
|
||||
|
||||
afn = (qse_awk_afn_t*) QSE_AWK_ALLOC (awk, QSE_SIZEOF(qse_awk_afn_t));
|
||||
if (afn == QSE_NULL)
|
||||
fun = (qse_awk_fun_t*) QSE_AWK_ALLOC (awk, QSE_SIZEOF(qse_awk_fun_t));
|
||||
if (fun == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (awk, name_dup);
|
||||
qse_awk_clrpt (awk, body);
|
||||
@ -1085,12 +1085,12 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
afn->name.ptr = QSE_NULL; /* function name is set below */
|
||||
afn->name.len = 0;
|
||||
afn->nargs = nargs;
|
||||
afn->body = body;
|
||||
fun->name.ptr = QSE_NULL; /* function name is set below */
|
||||
fun->name.len = 0;
|
||||
fun->nargs = nargs;
|
||||
fun->body = body;
|
||||
|
||||
pair = qse_map_insert (awk->tree.afns, name_dup, name_len, afn, 0);
|
||||
pair = qse_map_insert (awk->tree.funs, name_dup, name_len, fun, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
/* if qse_map_insert() fails for other reasons than memory
|
||||
@ -1098,7 +1098,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
* functions are detected earlier in this function */
|
||||
QSE_AWK_FREE (awk, name_dup);
|
||||
qse_awk_clrpt (awk, body);
|
||||
QSE_AWK_FREE (awk, afn);
|
||||
QSE_AWK_FREE (awk, fun);
|
||||
|
||||
SETERRLIN (awk, QSE_AWK_ENOMEM, awk->token.line);
|
||||
return QSE_NULL;
|
||||
@ -1106,12 +1106,12 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
|
||||
/* do some trick to save a string. make it back-point at the key part
|
||||
* of the pair */
|
||||
afn->name.ptr = QSE_MAP_KPTR(pair);
|
||||
afn->name.len = QSE_MAP_KLEN(pair);
|
||||
fun->name.ptr = QSE_MAP_KPTR(pair);
|
||||
fun->name.len = QSE_MAP_KLEN(pair);
|
||||
QSE_AWK_FREE (awk, name_dup);
|
||||
|
||||
/* remove an undefined function call entry from the parse.afn table */
|
||||
qse_map_delete (awk->parse.afns, afn->name.ptr, name_len);
|
||||
/* remove an undefined function call entry from the parse.fun table */
|
||||
qse_map_delete (awk->parse.funs, fun->name.ptr, name_len);
|
||||
return body;
|
||||
}
|
||||
|
||||
@ -1517,7 +1517,7 @@ static int add_global (
|
||||
{
|
||||
#endif
|
||||
/* check if it conflict with a builtin function name */
|
||||
if (qse_awk_getbfn (awk, name, len) != QSE_NULL)
|
||||
if (qse_awk_getfnc (awk, name, len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, QSE_AWK_EBFNRED, awk->token.line,
|
||||
@ -1526,7 +1526,7 @@ static int add_global (
|
||||
}
|
||||
|
||||
/* check if it conflict with a function name */
|
||||
if (qse_map_search (awk->tree.afns, name, len) != QSE_NULL)
|
||||
if (qse_map_search (awk->tree.funs, name, len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, QSE_AWK_EAFNRED, line,
|
||||
@ -1536,7 +1536,7 @@ static int add_global (
|
||||
|
||||
/* check if it conflict with a function name
|
||||
* caught in the function call table */
|
||||
if (qse_map_search (awk->parse.afns, name, len) != QSE_NULL)
|
||||
if (qse_map_search (awk->parse.funs, name, len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, QSE_AWK_EAFNRED, line,
|
||||
@ -1706,7 +1706,7 @@ static qse_awk_t* collect_locals (
|
||||
|
||||
/* check if it conflict with a builtin function name
|
||||
* function f() { local length; } */
|
||||
if (qse_awk_getbfn (awk, local.ptr, local.len) != QSE_NULL)
|
||||
if (qse_awk_getfnc (awk, local.ptr, local.len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, QSE_AWK_EBFNRED, awk->token.line,
|
||||
@ -1716,14 +1716,14 @@ static qse_awk_t* collect_locals (
|
||||
|
||||
#if 0
|
||||
/* check if it conflict with a function name */
|
||||
if (awk->tree.cur_afn.ptr != QSE_NULL)
|
||||
if (awk->tree.cur_fun.ptr != QSE_NULL)
|
||||
{
|
||||
iscur = (qse_strxncmp (
|
||||
awk->tree.cur_afn.ptr, awk->tree.cur_afn.len,
|
||||
awk->tree.cur_fun.ptr, awk->tree.cur_fun.len,
|
||||
local.ptr, local.len) == 0);
|
||||
}
|
||||
|
||||
if (iscur || qse_map_search (awk->tree.afns, local.ptr, local.len) != QSE_NULL)
|
||||
if (iscur || qse_map_search (awk->tree.funs, local.ptr, local.len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, QSE_AWK_EAFNRED, awk->token.line,
|
||||
@ -1733,7 +1733,7 @@ static qse_awk_t* collect_locals (
|
||||
|
||||
/* check if it conflict with a function name
|
||||
* caught in the function call table */
|
||||
if (qse_map_search (awk->parse.afns,
|
||||
if (qse_map_search (awk->parse.funs,
|
||||
local.ptr, local.len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
@ -3247,7 +3247,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line)
|
||||
{
|
||||
qse_char_t* name_dup;
|
||||
qse_size_t name_len;
|
||||
qse_awk_bfn_t* bfn;
|
||||
qse_awk_fnc_t* fnc;
|
||||
qse_size_t idxa;
|
||||
|
||||
QSE_ASSERT (MATCH(awk,TOKEN_IDENT));
|
||||
@ -3269,8 +3269,8 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line)
|
||||
}
|
||||
|
||||
/* check if name_dup is an intrinsic function name */
|
||||
bfn = qse_awk_getbfn (awk, name_dup, name_len);
|
||||
if (bfn != QSE_NULL)
|
||||
fnc = qse_awk_getfnc (awk, name_dup, name_len);
|
||||
if (fnc != QSE_NULL)
|
||||
{
|
||||
qse_awk_nde_t* nde;
|
||||
|
||||
@ -3283,7 +3283,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line)
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
nde = parse_fncall (awk, name_dup, name_len, bfn, line);
|
||||
nde = parse_fncall (awk, name_dup, name_len, fnc, line);
|
||||
if (nde == QSE_NULL) QSE_AWK_FREE (awk, name_dup);
|
||||
return (qse_awk_nde_t*)nde;
|
||||
}
|
||||
@ -3443,28 +3443,28 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line)
|
||||
|
||||
/* the name should not conflict with a function name */
|
||||
/* check if it is a builtin function */
|
||||
if (qse_awk_getbfn (awk, name_dup, name_len) != QSE_NULL)
|
||||
if (qse_awk_getfnc (awk, name_dup, name_len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (awk, QSE_AWK_EBFNRED, line, name_dup, name_len);
|
||||
goto exit_func;
|
||||
}
|
||||
|
||||
/* check if it is an AWK function */
|
||||
if (awk->tree.cur_afn.ptr != QSE_NULL)
|
||||
if (awk->tree.cur_fun.ptr != QSE_NULL)
|
||||
{
|
||||
iscur = (qse_strxncmp (
|
||||
awk->tree.cur_afn.ptr, awk->tree.cur_afn.len,
|
||||
awk->tree.cur_fun.ptr, awk->tree.cur_fun.len,
|
||||
name_dup, name_len) == 0);
|
||||
}
|
||||
|
||||
if (iscur || qse_map_search (awk->tree.afns, name_dup, name_len) != QSE_NULL)
|
||||
if (iscur || qse_map_search (awk->tree.funs, name_dup, name_len) != QSE_NULL)
|
||||
{
|
||||
/* the function is defined previously */
|
||||
SETERRARG (awk, QSE_AWK_EAFNRED, line, name_dup, name_len);
|
||||
goto exit_func;
|
||||
}
|
||||
|
||||
if (qse_map_search (awk->parse.afns,
|
||||
if (qse_map_search (awk->parse.funs,
|
||||
name_dup, name_len) != QSE_NULL)
|
||||
{
|
||||
/* is it one of the function calls found so far? */
|
||||
@ -3626,21 +3626,21 @@ static qse_awk_nde_t* parse_hashidx (
|
||||
qse_bool_t iscur = QSE_FALSE;
|
||||
|
||||
/* check if it is a builtin function */
|
||||
if (qse_awk_getbfn (awk, name, name_len) != QSE_NULL)
|
||||
if (qse_awk_getfnc (awk, name, name_len) != QSE_NULL)
|
||||
{
|
||||
SETERRARG (awk, QSE_AWK_EBFNRED, line, name, name_len);
|
||||
goto exit_func;
|
||||
}
|
||||
|
||||
/* check if it is an AWK function */
|
||||
if (awk->tree.cur_afn.ptr != QSE_NULL)
|
||||
if (awk->tree.cur_fun.ptr != QSE_NULL)
|
||||
{
|
||||
iscur = (qse_strxncmp (
|
||||
awk->tree.cur_afn.ptr, awk->tree.cur_afn.len,
|
||||
awk->tree.cur_fun.ptr, awk->tree.cur_fun.len,
|
||||
name, name_len) == 0);
|
||||
}
|
||||
|
||||
if (iscur || qse_map_search (awk->tree.afns, name, name_len) != QSE_NULL)
|
||||
if (iscur || qse_map_search (awk->tree.funs, name, name_len) != QSE_NULL)
|
||||
{
|
||||
/* the function is defined previously */
|
||||
SETERRARG (awk, QSE_AWK_EAFNRED, line, name, name_len);
|
||||
@ -3648,7 +3648,7 @@ static qse_awk_nde_t* parse_hashidx (
|
||||
}
|
||||
|
||||
if (qse_map_search (
|
||||
awk->parse.afns, name, name_len) != QSE_NULL)
|
||||
awk->parse.funs, name, name_len) != QSE_NULL)
|
||||
{
|
||||
/* is it one of the function calls found so far? */
|
||||
SETERRARG (awk, QSE_AWK_EAFNRED, line, name, name_len);
|
||||
@ -3682,7 +3682,7 @@ exit_func:
|
||||
|
||||
static qse_awk_nde_t* parse_fncall (
|
||||
qse_awk_t* awk, qse_char_t* name, qse_size_t name_len,
|
||||
qse_awk_bfn_t* bfn, qse_size_t line)
|
||||
qse_awk_fnc_t* fnc, qse_size_t line)
|
||||
{
|
||||
qse_awk_nde_t* head, * curr, * nde;
|
||||
qse_awk_nde_call_t* call;
|
||||
@ -3755,28 +3755,28 @@ static qse_awk_nde_t* parse_fncall (
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
if (bfn != QSE_NULL)
|
||||
if (fnc != QSE_NULL)
|
||||
{
|
||||
call->type = QSE_AWK_NDE_BFN;
|
||||
call->line = line;
|
||||
call->next = QSE_NULL;
|
||||
|
||||
/*call->what.bfn = bfn; */
|
||||
call->what.bfn.name.ptr = name;
|
||||
call->what.bfn.name.len = name_len;
|
||||
/*call->what.fnc = fnc; */
|
||||
call->what.fnc.name.ptr = name;
|
||||
call->what.fnc.name.len = name_len;
|
||||
|
||||
/* NOTE: oname is the original as in the bfn table.
|
||||
/* NOTE: oname is the original as in the fnc table.
|
||||
* it would not duplicated here and not freed in
|
||||
* qse_awk_clrpt either. so qse_awk_delfunc between
|
||||
* qse_awk_clrpt either. so qse_awk_delfnc between
|
||||
* qse_awk_parse and qse_awk_run may cause the program
|
||||
* to fail. */
|
||||
call->what.bfn.oname.ptr = bfn->name.ptr;
|
||||
call->what.bfn.oname.len = bfn->name.len;
|
||||
call->what.fnc.oname.ptr = fnc->name.ptr;
|
||||
call->what.fnc.oname.len = fnc->name.len;
|
||||
|
||||
call->what.bfn.arg.min = bfn->arg.min;
|
||||
call->what.bfn.arg.max = bfn->arg.max;
|
||||
call->what.bfn.arg.spec = bfn->arg.spec;
|
||||
call->what.bfn.handler = bfn->handler;
|
||||
call->what.fnc.arg.min = fnc->arg.min;
|
||||
call->what.fnc.arg.max = fnc->arg.max;
|
||||
call->what.fnc.arg.spec = fnc->arg.spec;
|
||||
call->what.fnc.handler = fnc->handler;
|
||||
|
||||
call->args = head;
|
||||
call->nargs = nargs;
|
||||
@ -3786,8 +3786,8 @@ static qse_awk_nde_t* parse_fncall (
|
||||
call->type = QSE_AWK_NDE_AFN;
|
||||
call->line = line;
|
||||
call->next = QSE_NULL;
|
||||
call->what.afn.name.ptr = name;
|
||||
call->what.afn.name.len = name_len;
|
||||
call->what.fun.name.ptr = name;
|
||||
call->what.fun.name.len = name_len;
|
||||
call->args = head;
|
||||
call->nargs = nargs;
|
||||
|
||||
@ -3798,9 +3798,9 @@ static qse_awk_nde_t* parse_fncall (
|
||||
{
|
||||
#endif
|
||||
|
||||
/* store a non-builtin function call into the parse.afns table */
|
||||
/* store a non-builtin function call into the parse.funs table */
|
||||
if (qse_map_upsert (
|
||||
awk->parse.afns, name, name_len,
|
||||
awk->parse.funs, name, name_len,
|
||||
&line, QSE_SIZEOF(line)) == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (awk, call);
|
||||
@ -5753,7 +5753,7 @@ static int deparse (qse_awk_t* awk)
|
||||
df.tmp_len = QSE_COUNTOF(tmp);
|
||||
df.ret = 0;
|
||||
|
||||
qse_map_walk (awk->tree.afns, deparse_func, &df);
|
||||
qse_map_walk (awk->tree.funs, deparse_func, &df);
|
||||
if (df.ret == -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
@ -5864,11 +5864,11 @@ static qse_map_walk_t deparse_func (qse_map_t* map, qse_map_pair_t* pair, void*
|
||||
{
|
||||
struct deparse_func_t* df = (struct deparse_func_t*)arg;
|
||||
/* CHECK: */
|
||||
qse_awk_afn_t* afn = (qse_awk_afn_t*)QSE_MAP_VPTR(pair);
|
||||
qse_awk_fun_t* fun = (qse_awk_fun_t*)QSE_MAP_VPTR(pair);
|
||||
qse_size_t i, n;
|
||||
qse_cstr_t kw;
|
||||
|
||||
QSE_ASSERT (qse_strxncmp (QSE_MAP_KPTR(pair), QSE_MAP_KLEN(pair), afn->name.ptr, afn->name.len) == 0);
|
||||
QSE_ASSERT (qse_strxncmp (QSE_MAP_KPTR(pair), QSE_MAP_KLEN(pair), fun->name.ptr, fun->name.len) == 0);
|
||||
|
||||
#define PUT_C(x,c) \
|
||||
if (put_char(x->awk,c)==-1) { \
|
||||
@ -5889,17 +5889,17 @@ static qse_map_walk_t deparse_func (qse_map_t* map, qse_map_pair_t* pair, void*
|
||||
PUT_SX (df, kw.ptr, kw.len);
|
||||
|
||||
PUT_C (df, QSE_T(' '));
|
||||
PUT_SX (df, afn->name.ptr, afn->name.len);
|
||||
PUT_SX (df, fun->name.ptr, fun->name.len);
|
||||
PUT_S (df, QSE_T(" ("));
|
||||
|
||||
for (i = 0; i < afn->nargs; )
|
||||
for (i = 0; i < fun->nargs; )
|
||||
{
|
||||
n = qse_awk_longtostr (i++, 10,
|
||||
QSE_T("__p"), df->tmp, df->tmp_len);
|
||||
QSE_ASSERT (n != (qse_size_t)-1);
|
||||
PUT_SX (df, df->tmp, n);
|
||||
|
||||
if (i >= afn->nargs) break;
|
||||
if (i >= fun->nargs) break;
|
||||
PUT_S (df, QSE_T(", "));
|
||||
}
|
||||
|
||||
@ -5908,7 +5908,7 @@ static qse_map_walk_t deparse_func (qse_map_t* map, qse_map_pair_t* pair, void*
|
||||
|
||||
PUT_C (df, QSE_T('\n'));
|
||||
|
||||
if (qse_awk_prnpt (df->awk, afn->body) == -1) return -1;
|
||||
if (qse_awk_prnpt (df->awk, fun->body) == -1) return -1;
|
||||
if (df->awk->option & QSE_AWK_CRLF)
|
||||
{
|
||||
PUT_C (df, QSE_T('\r'));
|
||||
|
@ -23,7 +23,7 @@ static int recomp_record_fields (
|
||||
qse_awk_rtx_t* run, qse_size_t lv,
|
||||
const qse_char_t* str, qse_size_t len);
|
||||
|
||||
int qse_awk_setrec (
|
||||
int qse_awk_rtx_setrec (
|
||||
qse_awk_rtx_t* run, qse_size_t idx,
|
||||
const qse_char_t* str, qse_size_t len)
|
||||
{
|
||||
@ -34,37 +34,37 @@ int qse_awk_setrec (
|
||||
if (str == QSE_STR_PTR(&run->inrec.line) &&
|
||||
len == QSE_STR_LEN(&run->inrec.line))
|
||||
{
|
||||
if (qse_awk_clrrec (run, QSE_TRUE) == -1) return -1;
|
||||
if (qse_awk_rtx_clrrec (run, QSE_TRUE) == -1) return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (qse_awk_clrrec (run, QSE_FALSE) == -1) return -1;
|
||||
if (qse_awk_rtx_clrrec (run, QSE_FALSE) == -1) return -1;
|
||||
|
||||
if (qse_str_ncpy (&run->inrec.line, str, len) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_clrrec (run, QSE_FALSE);
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_clrrec (run, QSE_FALSE);
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
v = qse_awk_makestrval (run, str, len);
|
||||
v = qse_awk_rtx_makestrval (run, str, len);
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
qse_awk_clrrec (run, QSE_FALSE);
|
||||
qse_awk_rtx_clrrec (run, QSE_FALSE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
QSE_ASSERT (run->inrec.d0->type == QSE_AWK_VAL_NIL);
|
||||
/* d0 should be cleared before the next line is reached
|
||||
* as it doesn't call qse_awk_refdownval on run->inrec.d0 */
|
||||
* as it doesn't call qse_awk_rtx_refdownval on run->inrec.d0 */
|
||||
run->inrec.d0 = v;
|
||||
qse_awk_refupval (run, v);
|
||||
qse_awk_rtx_refupval (run, v);
|
||||
|
||||
if (split_record (run) == -1)
|
||||
{
|
||||
qse_awk_clrrec (run, QSE_FALSE);
|
||||
qse_awk_rtx_clrrec (run, QSE_FALSE);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -72,23 +72,23 @@ int qse_awk_setrec (
|
||||
{
|
||||
if (recomp_record_fields (run, idx, str, len) == -1)
|
||||
{
|
||||
qse_awk_clrrec (run, QSE_FALSE);
|
||||
qse_awk_rtx_clrrec (run, QSE_FALSE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* recompose $0 */
|
||||
v = qse_awk_makestrval (run,
|
||||
v = qse_awk_rtx_makestrval (run,
|
||||
QSE_STR_PTR(&run->inrec.line),
|
||||
QSE_STR_LEN(&run->inrec.line));
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
qse_awk_clrrec (run, QSE_FALSE);
|
||||
qse_awk_rtx_clrrec (run, QSE_FALSE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refdownval (run, run->inrec.d0);
|
||||
qse_awk_rtx_refdownval (run, run->inrec.d0);
|
||||
run->inrec.d0 = v;
|
||||
qse_awk_refupval (run, v);
|
||||
qse_awk_rtx_refupval (run, v);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -122,7 +122,7 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
}
|
||||
else
|
||||
{
|
||||
fs_ptr = qse_awk_valtostr (
|
||||
fs_ptr = qse_awk_rtx_valtostr (
|
||||
run, fs, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
if (fs_ptr == QSE_NULL) return -1;
|
||||
fs_free = fs_ptr;
|
||||
@ -148,7 +148,7 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
{
|
||||
if (fs_free != QSE_NULL)
|
||||
QSE_AWK_FREE (run->awk, fs_free);
|
||||
qse_awk_setrunerror (run, errnum, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, errnum, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -156,7 +156,7 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
if (nflds == 0 && p == QSE_NULL && tok_len == 0)
|
||||
{
|
||||
/* there are no fields. it can just return here
|
||||
* as qse_awk_clrrec has been called before this */
|
||||
* as qse_awk_rtx_clrrec has been called before this */
|
||||
if (fs_free != QSE_NULL) QSE_AWK_FREE (run->awk, fs_free);
|
||||
return 0;
|
||||
}
|
||||
@ -176,7 +176,7 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
if (fs_free != QSE_NULL) QSE_AWK_FREE (run->awk, fs_free);
|
||||
qse_awk_setrunerror (run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -205,7 +205,7 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
{
|
||||
if (fs_free != QSE_NULL)
|
||||
QSE_AWK_FREE (run->awk, fs_free);
|
||||
qse_awk_setrunerror (run, errnum, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, errnum, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -215,7 +215,7 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
run->inrec.flds[run->inrec.nflds].ptr = tok;
|
||||
run->inrec.flds[run->inrec.nflds].len = tok_len;
|
||||
run->inrec.flds[run->inrec.nflds].val =
|
||||
qse_awk_makestrval (run, tok, tok_len);
|
||||
qse_awk_rtx_makestrval (run, tok, tok_len);
|
||||
|
||||
if (run->inrec.flds[run->inrec.nflds].val == QSE_NULL)
|
||||
{
|
||||
@ -223,7 +223,7 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refupval (run, run->inrec.flds[run->inrec.nflds].val);
|
||||
qse_awk_rtx_refupval (run, run->inrec.flds[run->inrec.nflds].val);
|
||||
run->inrec.nflds++;
|
||||
|
||||
len = QSE_STR_LEN(&run->inrec.line) -
|
||||
@ -233,29 +233,29 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
if (fs_free != QSE_NULL) QSE_AWK_FREE (run->awk, fs_free);
|
||||
|
||||
/* set the number of fields */
|
||||
v = qse_awk_makeintval (run, (qse_long_t)nflds);
|
||||
v = qse_awk_rtx_makeintval (run, (qse_long_t)nflds);
|
||||
if (v == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (run, v);
|
||||
qse_awk_rtx_refupval (run, v);
|
||||
if (qse_awk_rtx_setglobal (run, QSE_AWK_GLOBAL_NF, v) == -1)
|
||||
{
|
||||
qse_awk_refdownval (run, v);
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_refdownval (run, v);
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
QSE_ASSERT (nflds == run->inrec.nflds);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qse_awk_clrrec (qse_awk_rtx_t* run, qse_bool_t skip_inrec_line)
|
||||
int qse_awk_rtx_clrrec (qse_awk_rtx_t* run, qse_bool_t skip_inrec_line)
|
||||
{
|
||||
qse_size_t i;
|
||||
int n = 0;
|
||||
|
||||
if (run->inrec.d0 != qse_awk_val_nil)
|
||||
{
|
||||
qse_awk_refdownval (run, run->inrec.d0);
|
||||
qse_awk_rtx_refdownval (run, run->inrec.d0);
|
||||
run->inrec.d0 = qse_awk_val_nil;
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ int qse_awk_clrrec (qse_awk_rtx_t* run, qse_bool_t skip_inrec_line)
|
||||
for (i = 0; i < run->inrec.nflds; i++)
|
||||
{
|
||||
QSE_ASSERT (run->inrec.flds[i].val != QSE_NULL);
|
||||
qse_awk_refdownval (run, run->inrec.flds[i].val);
|
||||
qse_awk_rtx_refdownval (run, run->inrec.flds[i].val);
|
||||
}
|
||||
run->inrec.nflds = 0;
|
||||
|
||||
@ -315,7 +315,7 @@ static int recomp_record_fields (
|
||||
QSE_SIZEOF(*run->inrec.flds) * max);
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@ -326,7 +326,7 @@ static int recomp_record_fields (
|
||||
run->awk, QSE_SIZEOF(*run->inrec.flds) * max);
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@ -355,7 +355,7 @@ static int recomp_record_fields (
|
||||
run->global.ofs.ptr,
|
||||
run->global.ofs.len) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@ -373,20 +373,20 @@ static int recomp_record_fields (
|
||||
if (qse_str_ncat (
|
||||
&run->inrec.line, str, len) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
tmp = qse_awk_makestrval (run, str,len);
|
||||
tmp = qse_awk_rtx_makestrval (run, str,len);
|
||||
if (tmp == QSE_NULL) return -1;
|
||||
|
||||
if (i < nflds)
|
||||
qse_awk_refdownval (run, run->inrec.flds[i].val);
|
||||
qse_awk_rtx_refdownval (run, run->inrec.flds[i].val);
|
||||
else run->inrec.nflds++;
|
||||
|
||||
run->inrec.flds[i].val = tmp;
|
||||
qse_awk_refupval (run, tmp);
|
||||
qse_awk_rtx_refupval (run, tmp);
|
||||
}
|
||||
else if (i >= nflds)
|
||||
{
|
||||
@ -398,17 +398,17 @@ static int recomp_record_fields (
|
||||
if (qse_str_cat (
|
||||
&run->inrec.line, QSE_T("")) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* qse_awk_refdownval should not be called over
|
||||
/* qse_awk_rtx_refdownval should not be called over
|
||||
* run->inrec.flds[i].val as it is not initialized
|
||||
* to any valid values */
|
||||
/*qse_awk_refdownval (run, run->inrec.flds[i].val);*/
|
||||
/*qse_awk_rtx_refdownval (run, run->inrec.flds[i].val);*/
|
||||
run->inrec.flds[i].val = qse_awk_val_zls;
|
||||
qse_awk_refupval (run, qse_awk_val_zls);
|
||||
qse_awk_rtx_refupval (run, qse_awk_val_zls);
|
||||
run->inrec.nflds++;
|
||||
}
|
||||
else
|
||||
@ -425,7 +425,7 @@ static int recomp_record_fields (
|
||||
if (qse_str_ncat (&run->inrec.line,
|
||||
tmp->ptr, tmp->len) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@ -437,16 +437,16 @@ static int recomp_record_fields (
|
||||
|
||||
if (((qse_awk_val_int_t*)v)->val != max)
|
||||
{
|
||||
v = qse_awk_makeintval (run, (qse_long_t)max);
|
||||
v = qse_awk_rtx_makeintval (run, (qse_long_t)max);
|
||||
if (v == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_refupval (run, v);
|
||||
qse_awk_rtx_refupval (run, v);
|
||||
if (qse_awk_rtx_setglobal (run, QSE_AWK_GLOBAL_NF, v) == -1)
|
||||
{
|
||||
qse_awk_refdownval (run, v);
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
return -1;
|
||||
}
|
||||
qse_awk_refdownval (run, v);
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
1330
qse/lib/awk/run.c
1330
qse/lib/awk/run.c
File diff suppressed because it is too large
Load Diff
@ -369,7 +369,7 @@ static qse_ssize_t awk_eio_pipe (
|
||||
/*dprint (QSE_T("opening %s of type %d (pipe)\n"), epa->name, epa->type);*/
|
||||
|
||||
handle = qse_pio_open (
|
||||
qse_awk_rtx_getmmgr(epa->run),
|
||||
qse_awk_rtx_getmmgr(epa->rtx),
|
||||
0,
|
||||
epa->name,
|
||||
flags|QSE_PIO_SHELL|QSE_PIO_TEXT
|
||||
@ -454,7 +454,7 @@ static qse_ssize_t awk_eio_file (
|
||||
|
||||
/*dprint (QSE_T("opening %s of type %d (file)\n"), epa->name, epa->type);*/
|
||||
handle = qse_fio_open (
|
||||
qse_awk_rtx_getmmgr(epa->run),
|
||||
qse_awk_rtx_getmmgr(epa->rtx),
|
||||
0,
|
||||
epa->name,
|
||||
flags | QSE_FIO_TEXT,
|
||||
@ -468,7 +468,7 @@ static qse_ssize_t awk_eio_file (
|
||||
errarg.ptr = epa->name;
|
||||
errarg.len = qse_strlen(epa->name);
|
||||
|
||||
qse_awk_setrunerror (epa->run, QSE_AWK_EOPEN, 0, &errarg, 1);
|
||||
qse_awk_rtx_seterror (epa->rtx, QSE_AWK_EOPEN, 0, &errarg, 1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -544,7 +544,7 @@ static int open_eio_console (qse_awk_eio_t* epa)
|
||||
qse_sio_t* fp;
|
||||
|
||||
fp = qse_sio_open (
|
||||
qse_awk_rtx_getmmgr(epa->run),
|
||||
qse_awk_rtx_getmmgr(epa->rtx),
|
||||
0,
|
||||
rd->ic.files[rd->ic.index],
|
||||
QSE_SIO_READ
|
||||
@ -556,13 +556,13 @@ static int open_eio_console (qse_awk_eio_t* epa)
|
||||
errarg.ptr = rd->ic.files[rd->ic.index];
|
||||
errarg.len = qse_strlen(rd->ic.files[rd->ic.index]);
|
||||
|
||||
qse_awk_setrunerror (epa->run, QSE_AWK_EOPEN, 0, &errarg, 1);
|
||||
qse_awk_rtx_seterror (epa->rtx, QSE_AWK_EOPEN, 0, &errarg, 1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*dprint (QSE_T(" console(r) - %s\n"), rd->ic.files[rd->ic.index]);*/
|
||||
if (qse_awk_rtx_setfilename (
|
||||
epa->run, rd->ic.files[rd->ic.index],
|
||||
epa->rtx, rd->ic.files[rd->ic.index],
|
||||
qse_strlen(rd->ic.files[rd->ic.index])) == -1)
|
||||
{
|
||||
qse_sio_close (fp);
|
||||
@ -579,7 +579,7 @@ static int open_eio_console (qse_awk_eio_t* epa)
|
||||
{
|
||||
/*dprint (QSE_T(" console(w) - <standard output>\n"));*/
|
||||
|
||||
if (qse_awk_rtx_setofilename (epa->run, QSE_T(""), 0) == -1)
|
||||
if (qse_awk_rtx_setofilename (epa->rtx, QSE_T(""), 0) == -1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
@ -646,7 +646,7 @@ static qse_ssize_t awk_eio_console (
|
||||
qse_sio_t* fp;
|
||||
|
||||
fp = qse_sio_open (
|
||||
qse_awk_rtx_getmmgr(epa->run),
|
||||
qse_awk_rtx_getmmgr(epa->rtx),
|
||||
0,
|
||||
rd->ic.files[rd->ic.index],
|
||||
QSE_SIO_READ
|
||||
@ -659,12 +659,12 @@ static qse_ssize_t awk_eio_console (
|
||||
errarg.ptr = rd->ic.files[rd->ic.index];
|
||||
errarg.len = qse_strlen(rd->ic.files[rd->ic.index]);
|
||||
|
||||
qse_awk_setrunerror (epa->run, QSE_AWK_EOPEN, 0, &errarg, 1);
|
||||
qse_awk_rtx_seterror (epa->rtx, QSE_AWK_EOPEN, 0, &errarg, 1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qse_awk_rtx_setfilename (
|
||||
epa->run, rd->ic.files[rd->ic.index],
|
||||
epa->rtx, rd->ic.files[rd->ic.index],
|
||||
qse_strlen(rd->ic.files[rd->ic.index])) == -1)
|
||||
{
|
||||
qse_sio_close (fp);
|
||||
@ -672,7 +672,7 @@ static qse_ssize_t awk_eio_console (
|
||||
}
|
||||
|
||||
if (qse_awk_rtx_setglobal (
|
||||
epa->run, QSE_AWK_GLOBAL_FNR, qse_awk_val_zero) == -1)
|
||||
epa->rtx, QSE_AWK_GLOBAL_FNR, qse_awk_val_zero) == -1)
|
||||
{
|
||||
/* need to reset FNR */
|
||||
qse_sio_close (fp);
|
||||
@ -776,7 +776,7 @@ enum
|
||||
BFN_MATH_F
|
||||
};
|
||||
|
||||
static int bfn_math_1 (
|
||||
static int fnc_math_1 (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl, int type, void* f)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -791,7 +791,7 @@ static int bfn_math_1 (
|
||||
|
||||
a0 = qse_awk_rtx_getarg (run, 0);
|
||||
|
||||
n = qse_awk_valtonum (run, a0, &lv, &rv);
|
||||
n = qse_awk_rtx_valtonum (run, a0, &lv, &rv);
|
||||
if (n == -1) return -1;
|
||||
if (n == 0) rv = (qse_real_t)lv;
|
||||
|
||||
@ -799,23 +799,23 @@ static int bfn_math_1 (
|
||||
{
|
||||
long double (*rf) (long double) =
|
||||
(long double(*)(long double))f;
|
||||
r = qse_awk_makerealval (run, rf(rv));
|
||||
r = qse_awk_rtx_makerealval (run, rf(rv));
|
||||
}
|
||||
else if (type == BFN_MATH_D)
|
||||
{
|
||||
double (*rf) (double) = (double(*)(double))f;
|
||||
r = qse_awk_makerealval (run, rf(rv));
|
||||
r = qse_awk_rtx_makerealval (run, rf(rv));
|
||||
}
|
||||
else
|
||||
{
|
||||
QSE_ASSERT (type == BFN_MATH_F);
|
||||
float (*rf) (float) = (float(*)(float))f;
|
||||
r = qse_awk_makerealval (run, rf(rv));
|
||||
r = qse_awk_rtx_makerealval (run, rf(rv));
|
||||
}
|
||||
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -823,7 +823,7 @@ static int bfn_math_1 (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_math_2 (
|
||||
static int fnc_math_2 (
|
||||
qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl, int type, void* f)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
@ -839,11 +839,11 @@ static int bfn_math_2 (
|
||||
a0 = qse_awk_rtx_getarg (run, 0);
|
||||
a1 = qse_awk_rtx_getarg (run, 1);
|
||||
|
||||
n = qse_awk_valtonum (run, a0, &lv0, &rv0);
|
||||
n = qse_awk_rtx_valtonum (run, a0, &lv0, &rv0);
|
||||
if (n == -1) return -1;
|
||||
if (n == 0) rv0 = (qse_real_t)lv0;
|
||||
|
||||
n = qse_awk_valtonum (run, a1, &lv1, &rv1);
|
||||
n = qse_awk_rtx_valtonum (run, a1, &lv1, &rv1);
|
||||
if (n == -1) return -1;
|
||||
if (n == 0) rv1 = (qse_real_t)lv1;
|
||||
|
||||
@ -851,23 +851,23 @@ static int bfn_math_2 (
|
||||
{
|
||||
long double (*rf) (long double,long double) =
|
||||
(long double(*)(long double,long double))f;
|
||||
r = qse_awk_makerealval (run, rf(rv0,rv1));
|
||||
r = qse_awk_rtx_makerealval (run, rf(rv0,rv1));
|
||||
}
|
||||
else if (type == BFN_MATH_D)
|
||||
{
|
||||
double (*rf) (double,double) = (double(*)(double,double))f;
|
||||
r = qse_awk_makerealval (run, rf(rv0,rv1));
|
||||
r = qse_awk_rtx_makerealval (run, rf(rv0,rv1));
|
||||
}
|
||||
else
|
||||
{
|
||||
QSE_ASSERT (type == BFN_MATH_F);
|
||||
float (*rf) (float,float) = (float(*)(float,float))f;
|
||||
r = qse_awk_makerealval (run, rf(rv0,rv1));
|
||||
r = qse_awk_rtx_makerealval (run, rf(rv0,rv1));
|
||||
}
|
||||
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -875,9 +875,9 @@ static int bfn_math_2 (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_sin (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_sin (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return bfn_math_1 (
|
||||
return fnc_math_1 (
|
||||
run, fnm, fnl,
|
||||
#if defined(HAVE_SINL)
|
||||
BFN_MATH_LD, (void*)sinl
|
||||
@ -891,9 +891,9 @@ static int bfn_sin (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
);
|
||||
}
|
||||
|
||||
static int bfn_cos (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_cos (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return bfn_math_1 (
|
||||
return fnc_math_1 (
|
||||
run, fnm, fnl,
|
||||
#if defined(HAVE_COSL)
|
||||
BFN_MATH_LD, (void*)cosl
|
||||
@ -907,9 +907,9 @@ static int bfn_cos (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
);
|
||||
}
|
||||
|
||||
static int bfn_tan (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_tan (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return bfn_math_1 (
|
||||
return fnc_math_1 (
|
||||
run, fnm, fnl,
|
||||
#if defined(HAVE_TANL)
|
||||
BFN_MATH_LD, (void*)tanl
|
||||
@ -923,9 +923,9 @@ static int bfn_tan (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
);
|
||||
}
|
||||
|
||||
static int bfn_atan (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_atan (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return bfn_math_1 (
|
||||
return fnc_math_1 (
|
||||
run, fnm, fnl,
|
||||
#if defined(HAVE_ATANL)
|
||||
BFN_MATH_LD, (void*)atanl
|
||||
@ -939,9 +939,9 @@ static int bfn_atan (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
);
|
||||
}
|
||||
|
||||
static int bfn_atan2 (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_atan2 (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return bfn_math_2 (
|
||||
return fnc_math_2 (
|
||||
run, fnm, fnl,
|
||||
#if defined(HAVE_ATAN2L)
|
||||
BFN_MATH_LD, (void*)atan2l
|
||||
@ -955,9 +955,9 @@ static int bfn_atan2 (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
);
|
||||
}
|
||||
|
||||
static int bfn_log (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_log (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return bfn_math_1 (
|
||||
return fnc_math_1 (
|
||||
run, fnm, fnl,
|
||||
#if defined(HAVE_LOGL)
|
||||
BFN_MATH_LD, (void*)logl
|
||||
@ -971,9 +971,9 @@ static int bfn_log (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
);
|
||||
}
|
||||
|
||||
static int bfn_exp (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_exp (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return bfn_math_1 (
|
||||
return fnc_math_1 (
|
||||
run, fnm, fnl,
|
||||
#if defined(HAVE_EXPL)
|
||||
BFN_MATH_LD, (void*)expl
|
||||
@ -987,9 +987,9 @@ static int bfn_exp (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
);
|
||||
}
|
||||
|
||||
static int bfn_sqrt (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_sqrt (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
return bfn_math_1 (
|
||||
return fnc_math_1 (
|
||||
run, fnm, fnl,
|
||||
#if defined(HAVE_SQRTL)
|
||||
BFN_MATH_LD, (void*)sqrtl
|
||||
@ -1003,7 +1003,7 @@ static int bfn_sqrt (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
);
|
||||
}
|
||||
|
||||
static int bfn_int (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_int (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
qse_awk_val_t* a0;
|
||||
@ -1017,14 +1017,14 @@ static int bfn_int (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
|
||||
a0 = qse_awk_rtx_getarg (run, 0);
|
||||
|
||||
n = qse_awk_valtonum (run, a0, &lv, &rv);
|
||||
n = qse_awk_rtx_valtonum (run, a0, &lv, &rv);
|
||||
if (n == -1) return -1;
|
||||
if (n == 1) lv = (qse_long_t)rv;
|
||||
|
||||
r = qse_awk_makeintval (run, lv);
|
||||
r = qse_awk_rtx_makeintval (run, lv);
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1032,14 +1032,14 @@ static int bfn_int (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_rand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_rand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_awk_val_t* r;
|
||||
|
||||
r = qse_awk_makeintval (run, rand());
|
||||
r = qse_awk_rtx_makeintval (run, rand());
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1047,7 +1047,7 @@ static int bfn_rand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_srand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_srand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
qse_awk_val_t* a0;
|
||||
@ -1068,7 +1068,7 @@ static int bfn_srand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
a0 = qse_awk_rtx_getarg (run, 0);
|
||||
|
||||
n = qse_awk_valtonum (run, a0, &lv, &rv);
|
||||
n = qse_awk_rtx_valtonum (run, a0, &lv, &rv);
|
||||
if (n == -1) return -1;
|
||||
if (n == 1) lv = (qse_long_t)rv;
|
||||
|
||||
@ -1084,10 +1084,10 @@ static int bfn_srand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
|
||||
srand (rxtn->seed);
|
||||
|
||||
r = qse_awk_makeintval (run, prev);
|
||||
r = qse_awk_rtx_makeintval (run, prev);
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1095,7 +1095,7 @@ static int bfn_srand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bfn_system (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
static int fnc_system (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
qse_awk_val_t* v;
|
||||
@ -1114,7 +1114,7 @@ static int bfn_system (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_valtostr (
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, v, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
@ -1173,10 +1173,10 @@ static int bfn_system (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl
|
||||
skip_system:
|
||||
if (v->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
|
||||
v = qse_awk_makeintval (run, (qse_long_t)n);
|
||||
v = qse_awk_rtx_makeintval (run, (qse_long_t)n);
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
/*qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);*/
|
||||
/*qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1184,24 +1184,24 @@ skip_system:
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define ADD_FUNC(awk,name,min,max,bfn) \
|
||||
if (qse_awk_addfunc (\
|
||||
#define ADD_FUNC(awk,name,min,max,fnc) \
|
||||
if (qse_awk_addfnc (\
|
||||
(awk), (name), qse_strlen(name), \
|
||||
0, (min), (max), QSE_NULL, (bfn)) == QSE_NULL) return -1;
|
||||
0, (min), (max), QSE_NULL, (fnc)) == QSE_NULL) return -1;
|
||||
|
||||
static int add_functions (qse_awk_t* awk)
|
||||
{
|
||||
ADD_FUNC (awk, QSE_T("sin"), 1, 1, bfn_sin);
|
||||
ADD_FUNC (awk, QSE_T("cos"), 1, 1, bfn_cos);
|
||||
ADD_FUNC (awk, QSE_T("tan"), 1, 1, bfn_tan);
|
||||
ADD_FUNC (awk, QSE_T("atan"), 1, 1, bfn_atan);
|
||||
ADD_FUNC (awk, QSE_T("atan2"), 2, 2, bfn_atan2);
|
||||
ADD_FUNC (awk, QSE_T("log"), 1, 1, bfn_log);
|
||||
ADD_FUNC (awk, QSE_T("exp"), 1, 1, bfn_exp);
|
||||
ADD_FUNC (awk, QSE_T("sqrt"), 1, 1, bfn_sqrt);
|
||||
ADD_FUNC (awk, QSE_T("int"), 1, 1, bfn_int);
|
||||
ADD_FUNC (awk, QSE_T("rand"), 0, 0, bfn_rand);
|
||||
ADD_FUNC (awk, QSE_T("srand"), 0, 1, bfn_srand);
|
||||
ADD_FUNC (awk, QSE_T("system"), 1, 1, bfn_system);
|
||||
ADD_FUNC (awk, QSE_T("sin"), 1, 1, fnc_sin);
|
||||
ADD_FUNC (awk, QSE_T("cos"), 1, 1, fnc_cos);
|
||||
ADD_FUNC (awk, QSE_T("tan"), 1, 1, fnc_tan);
|
||||
ADD_FUNC (awk, QSE_T("atan"), 1, 1, fnc_atan);
|
||||
ADD_FUNC (awk, QSE_T("atan2"), 2, 2, fnc_atan2);
|
||||
ADD_FUNC (awk, QSE_T("log"), 1, 1, fnc_log);
|
||||
ADD_FUNC (awk, QSE_T("exp"), 1, 1, fnc_exp);
|
||||
ADD_FUNC (awk, QSE_T("sqrt"), 1, 1, fnc_sqrt);
|
||||
ADD_FUNC (awk, QSE_T("int"), 1, 1, fnc_int);
|
||||
ADD_FUNC (awk, QSE_T("rand"), 0, 0, fnc_rand);
|
||||
ADD_FUNC (awk, QSE_T("srand"), 0, 1, fnc_srand);
|
||||
ADD_FUNC (awk, QSE_T("system"), 1, 1, fnc_system);
|
||||
return 0;
|
||||
}
|
||||
|
@ -539,7 +539,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
||||
{
|
||||
qse_awk_nde_call_t* px = (qse_awk_nde_call_t*)nde;
|
||||
PUT_SRCSTRX (awk,
|
||||
px->what.bfn.name.ptr, px->what.bfn.name.len);
|
||||
px->what.fnc.name.ptr, px->what.fnc.name.len);
|
||||
PUT_SRCSTR (awk, QSE_T(" ("));
|
||||
PRINT_EXPRESSION_LIST (awk, px->args);
|
||||
PUT_SRCSTR (awk, QSE_T(")"));
|
||||
@ -550,7 +550,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
||||
{
|
||||
qse_awk_nde_call_t* px = (qse_awk_nde_call_t*)nde;
|
||||
PUT_SRCSTRX (awk,
|
||||
px->what.afn.name.ptr, px->what.afn.name.len);
|
||||
px->what.fun.name.ptr, px->what.fun.name.len);
|
||||
PUT_SRCSTR (awk, QSE_T(" ("));
|
||||
PRINT_EXPRESSION_LIST (awk, px->args);
|
||||
PUT_SRCSTR (awk, QSE_T(")"));
|
||||
@ -1259,8 +1259,8 @@ void qse_awk_clrpt (qse_awk_t* awk, qse_awk_nde_t* tree)
|
||||
case QSE_AWK_NDE_BFN:
|
||||
{
|
||||
qse_awk_nde_call_t* px = (qse_awk_nde_call_t*)p;
|
||||
/* QSE_AWK_FREE (awk, px->what.bfn); */
|
||||
QSE_AWK_FREE (awk, px->what.bfn.name.ptr);
|
||||
/* QSE_AWK_FREE (awk, px->what.fnc); */
|
||||
QSE_AWK_FREE (awk, px->what.fnc.name.ptr);
|
||||
qse_awk_clrpt (awk, px->args);
|
||||
QSE_AWK_FREE (awk, p);
|
||||
break;
|
||||
@ -1269,7 +1269,7 @@ void qse_awk_clrpt (qse_awk_t* awk, qse_awk_nde_t* tree)
|
||||
case QSE_AWK_NDE_AFN:
|
||||
{
|
||||
qse_awk_nde_call_t* px = (qse_awk_nde_call_t*)p;
|
||||
QSE_AWK_FREE (awk, px->what.afn.name.ptr);
|
||||
QSE_AWK_FREE (awk, px->what.fun.name.ptr);
|
||||
qse_awk_clrpt (awk, px->args);
|
||||
QSE_AWK_FREE (awk, p);
|
||||
break;
|
||||
|
@ -99,8 +99,10 @@ enum qse_awk_out_type_t
|
||||
QSE_AWK_OUT_CONSOLE
|
||||
};
|
||||
|
||||
/* afn (awk function defined with the keyword function) */
|
||||
typedef struct qse_awk_afn_t qse_awk_afn_t;
|
||||
/* AWK function defined with the keyword function.
|
||||
* note it is different from qse_awk_fnc_t */
|
||||
typedef struct qse_awk_fun_t qse_awk_fun_t;
|
||||
|
||||
typedef struct qse_awk_nde_t qse_awk_nde_t;
|
||||
typedef struct qse_awk_nde_blk_t qse_awk_nde_blk_t;
|
||||
typedef struct qse_awk_nde_grp_t qse_awk_nde_grp_t;
|
||||
@ -139,10 +141,10 @@ typedef struct qse_awk_nde_delete_t qse_awk_nde_delete_t;
|
||||
typedef struct qse_awk_nde_reset_t qse_awk_nde_reset_t;
|
||||
typedef struct qse_awk_nde_print_t qse_awk_nde_print_t;
|
||||
|
||||
struct qse_awk_afn_t
|
||||
struct qse_awk_fun_t
|
||||
{
|
||||
qse_xstr_t name;
|
||||
qse_size_t nargs;
|
||||
qse_xstr_t name;
|
||||
qse_size_t nargs;
|
||||
qse_awk_nde_t* body;
|
||||
};
|
||||
|
||||
@ -265,7 +267,7 @@ struct qse_awk_nde_call_t
|
||||
struct
|
||||
{
|
||||
qse_xstr_t name;
|
||||
} afn;
|
||||
} fun;
|
||||
|
||||
/* minimum information of a intrinsic function
|
||||
* needed during run-time. */
|
||||
@ -286,7 +288,7 @@ struct qse_awk_nde_call_t
|
||||
|
||||
int (*handler) (
|
||||
qse_awk_rtx_t*, const qse_char_t*, qse_size_t);
|
||||
} bfn;
|
||||
} fnc;
|
||||
} what;
|
||||
qse_awk_nde_t* args;
|
||||
qse_size_t nargs;
|
||||
|
@ -98,7 +98,7 @@ qse_awk_val_t* qse_awk_val_negone = (qse_awk_val_t*)&awk_int[0];
|
||||
qse_awk_val_t* qse_awk_val_zero = (qse_awk_val_t*)&awk_int[1];
|
||||
qse_awk_val_t* qse_awk_val_one = (qse_awk_val_t*)&awk_int[2];
|
||||
|
||||
qse_awk_val_t* qse_awk_makeintval (qse_awk_rtx_t* run, qse_long_t v)
|
||||
qse_awk_val_t* qse_awk_rtx_makeintval (qse_awk_rtx_t* run, qse_long_t v)
|
||||
{
|
||||
qse_awk_val_int_t* val;
|
||||
|
||||
@ -119,7 +119,7 @@ qse_awk_val_t* qse_awk_makeintval (qse_awk_rtx_t* run, qse_long_t v)
|
||||
run->awk, QSE_SIZEOF(qse_awk_val_int_t));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
}
|
||||
@ -142,7 +142,7 @@ qse_awk_val_t* qse_awk_makeintval (qse_awk_rtx_t* run, qse_long_t v)
|
||||
c = QSE_AWK_ALLOC (run->awk, QSE_SIZEOF(qse_awk_val_ichunk_t));
|
||||
if (c == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
@ -179,7 +179,7 @@ qse_awk_val_t* qse_awk_makeintval (qse_awk_rtx_t* run, qse_long_t v)
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_makerealval (qse_awk_rtx_t* run, qse_real_t v)
|
||||
qse_awk_val_t* qse_awk_rtx_makerealval (qse_awk_rtx_t* run, qse_real_t v)
|
||||
{
|
||||
qse_awk_val_real_t* val;
|
||||
|
||||
@ -194,7 +194,7 @@ qse_awk_val_t* qse_awk_makerealval (qse_awk_rtx_t* run, qse_real_t v)
|
||||
run->awk, QSE_SIZEOF(qse_awk_val_real_t));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
}
|
||||
@ -212,7 +212,7 @@ qse_awk_val_t* qse_awk_makerealval (qse_awk_rtx_t* run, qse_real_t v)
|
||||
c = QSE_AWK_ALLOC (run->awk, QSE_SIZEOF(qse_awk_val_rchunk_t));
|
||||
if (c == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
@ -250,12 +250,12 @@ qse_awk_val_t* qse_awk_makerealval (qse_awk_rtx_t* run, qse_real_t v)
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_makestrval0 (qse_awk_rtx_t* run, const qse_char_t* str)
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval0 (qse_awk_rtx_t* run, const qse_char_t* str)
|
||||
{
|
||||
return qse_awk_makestrval (run, str, qse_strlen(str));
|
||||
return qse_awk_rtx_makestrval (run, str, qse_strlen(str));
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_makestrval (
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval (
|
||||
qse_awk_rtx_t* run, const qse_char_t* str, qse_size_t len)
|
||||
{
|
||||
qse_awk_val_str_t* val;
|
||||
@ -286,7 +286,7 @@ qse_awk_val_t* qse_awk_makestrval (
|
||||
(rlen+1)*QSE_SIZEOF(qse_char_t));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
/*
|
||||
@ -305,7 +305,7 @@ init:
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_makestrval_nodup (
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval_nodup (
|
||||
qse_awk_rtx_t* run, qse_char_t* str, qse_size_t len)
|
||||
{
|
||||
qse_awk_val_str_t* val;
|
||||
@ -314,7 +314,7 @@ qse_awk_val_t* qse_awk_makestrval_nodup (
|
||||
run->awk, QSE_SIZEOF(qse_awk_val_str_t));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
@ -325,7 +325,7 @@ qse_awk_val_t* qse_awk_makestrval_nodup (
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_makestrval2 (
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval2 (
|
||||
qse_awk_rtx_t* run,
|
||||
const qse_char_t* str1, qse_size_t len1,
|
||||
const qse_char_t* str2, qse_size_t len2)
|
||||
@ -358,7 +358,7 @@ qse_awk_val_t* qse_awk_makestrval2 (
|
||||
(rlen+1)*QSE_SIZEOF(qse_char_t));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
@ -380,7 +380,7 @@ init:
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_makerexval (
|
||||
qse_awk_val_t* qse_awk_rtx_makerexval (
|
||||
qse_awk_rtx_t* run, const qse_char_t* buf, qse_size_t len, void* code)
|
||||
{
|
||||
qse_awk_val_rex_t* val;
|
||||
@ -398,7 +398,7 @@ qse_awk_val_t* qse_awk_makerexval (
|
||||
if (val->ptr == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}*/
|
||||
val->ptr = (qse_char_t*)(val + 1);
|
||||
@ -410,7 +410,7 @@ qse_awk_val_t* qse_awk_makerexval (
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, val->ptr);
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
*/
|
||||
@ -430,7 +430,7 @@ static void free_mapval (void* run, void* v)
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
|
||||
qse_awk_refdownval (run, v);
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
}
|
||||
|
||||
static void same_mapval (void* run, void* v)
|
||||
@ -440,7 +440,7 @@ static void same_mapval (void* run, void* v)
|
||||
qse_awk_dprintval (run, v);
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
qse_awk_refdownval_nofree (run, v);
|
||||
qse_awk_rtx_refdownval_nofree (run, v);
|
||||
}
|
||||
*/
|
||||
static void free_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
@ -453,7 +453,7 @@ static void free_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
|
||||
qse_awk_refdownval (run, dptr);
|
||||
qse_awk_rtx_refdownval (run, dptr);
|
||||
}
|
||||
|
||||
static void same_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
@ -464,11 +464,11 @@ static void same_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
qse_awk_dprintval (run, dptr);
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
qse_awk_refdownval_nofree (run, dptr);
|
||||
qse_awk_rtx_refdownval_nofree (run, dptr);
|
||||
}
|
||||
/* END CHECK */
|
||||
|
||||
qse_awk_val_t* qse_awk_makemapval (qse_awk_rtx_t* run)
|
||||
qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* run)
|
||||
{
|
||||
qse_awk_val_map_t* val;
|
||||
|
||||
@ -478,7 +478,7 @@ qse_awk_val_t* qse_awk_makemapval (qse_awk_rtx_t* run)
|
||||
run->awk, QSE_SIZEOF(qse_awk_val_map_t) );
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
@ -489,7 +489,7 @@ qse_awk_val_t* qse_awk_makemapval (qse_awk_rtx_t* run)
|
||||
if (val->map == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
*/
|
||||
@ -501,7 +501,7 @@ qse_awk_val_t* qse_awk_makemapval (qse_awk_rtx_t* run)
|
||||
QSE_SIZEOF(run));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
@ -513,7 +513,7 @@ qse_awk_val_t* qse_awk_makemapval (qse_awk_rtx_t* run)
|
||||
if (val->map == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
*(qse_awk_rtx_t**)QSE_MAP_XTN(val->map) = run;
|
||||
@ -533,7 +533,7 @@ qse_awk_val_t* qse_awk_makemapval (qse_awk_rtx_t* run)
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_makerefval (qse_awk_rtx_t* run, int id, qse_awk_val_t** adr)
|
||||
qse_awk_val_t* qse_awk_rtx_makerefval (qse_awk_rtx_t* run, int id, qse_awk_val_t** adr)
|
||||
{
|
||||
qse_awk_val_ref_t* val;
|
||||
|
||||
@ -547,7 +547,7 @@ qse_awk_val_t* qse_awk_makerefval (qse_awk_rtx_t* run, int id, qse_awk_val_t** a
|
||||
run->awk, QSE_SIZEOF(qse_awk_val_ref_t));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerrnum (run, QSE_AWK_ENOMEM);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
}
|
||||
@ -569,51 +569,51 @@ qse_awk_val_t* qse_awk_makerefval (qse_awk_rtx_t* run, int id, qse_awk_val_t** a
|
||||
((val) >= (qse_awk_val_t*)&awk_int[0] && \
|
||||
(val) <= (qse_awk_val_t*)&awk_int[QSE_COUNTOF(awk_int)-1]))
|
||||
|
||||
qse_bool_t qse_awk_isstaticval (qse_awk_val_t* val)
|
||||
qse_bool_t qse_awk_isstaticval (qse_awk_rtx_t* rtx, qse_awk_val_t* val)
|
||||
{
|
||||
return IS_STATICVAL(val);
|
||||
}
|
||||
|
||||
void qse_awk_freeval (qse_awk_rtx_t* run, qse_awk_val_t* val, qse_bool_t cache)
|
||||
void qse_awk_rtx_freeval (qse_awk_rtx_t* rtx, qse_awk_val_t* val, qse_bool_t cache)
|
||||
{
|
||||
if (IS_STATICVAL(val)) return;
|
||||
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (QSE_T("freeing [cache=%d] ... "), cache);
|
||||
qse_awk_dprintval (run, val);
|
||||
qse_awk_dprintval (rtx, val);
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
|
||||
if (val->type == QSE_AWK_VAL_NIL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
QSE_AWK_FREE (rtx->awk, val);
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_INT)
|
||||
{
|
||||
/*
|
||||
if (cache && run->icache_count < QSE_COUNTOF(run->icache))
|
||||
if (cache && rtx->icache_count < QSE_COUNTOF(rtx->icache))
|
||||
{
|
||||
run->icache[run->icache_count++] =
|
||||
rtx->icache[rtx->icache_count++] =
|
||||
(qse_awk_val_int_t*)val;
|
||||
}
|
||||
else QSE_AWK_FREE (run->awk, val);
|
||||
else QSE_AWK_FREE (rtx->awk, val);
|
||||
*/
|
||||
|
||||
((qse_awk_val_int_t*)val)->nde = (qse_awk_nde_int_t*)run->vmgr.ifree;
|
||||
run->vmgr.ifree = (qse_awk_val_int_t*)val;
|
||||
((qse_awk_val_int_t*)val)->nde = (qse_awk_nde_int_t*)rtx->vmgr.ifree;
|
||||
rtx->vmgr.ifree = (qse_awk_val_int_t*)val;
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_REAL)
|
||||
{
|
||||
/*
|
||||
if (cache && run->rcache_count < QSE_COUNTOF(run->rcache))
|
||||
if (cache && rtx->rcache_count < QSE_COUNTOF(rtx->rcache))
|
||||
{
|
||||
run->rcache[run->rcache_count++] =
|
||||
rtx->rcache[rtx->rcache_count++] =
|
||||
(qse_awk_val_real_t*)val;
|
||||
}
|
||||
else QSE_AWK_FREE (run->awk, val);
|
||||
else QSE_AWK_FREE (rtx->awk, val);
|
||||
*/
|
||||
((qse_awk_val_real_t*)val)->nde = (qse_awk_nde_real_t*)run->vmgr.rfree;
|
||||
run->vmgr.rfree = (qse_awk_val_real_t*)val;
|
||||
((qse_awk_val_real_t*)val)->nde = (qse_awk_nde_real_t*)rtx->vmgr.rfree;
|
||||
rtx->vmgr.rfree = (qse_awk_val_real_t*)val;
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_STR)
|
||||
{
|
||||
@ -622,26 +622,26 @@ void qse_awk_freeval (qse_awk_rtx_t* run, qse_awk_val_t* val, qse_bool_t cache)
|
||||
{
|
||||
qse_awk_val_str_t* v = (qse_awk_val_str_t*)val;
|
||||
if (v->len <= 32 &&
|
||||
run->scache32_count<QSE_COUNTOF(run->scache32))
|
||||
rtx->scache32_count<QSE_COUNTOF(rtx->scache32))
|
||||
{
|
||||
run->scache32[run->scache32_count++] = v;
|
||||
rtx->scache32[rtx->scache32_count++] = v;
|
||||
}
|
||||
else if (v->len <= 64 &&
|
||||
run->scache64_count<QSE_COUNTOF(run->scache64))
|
||||
rtx->scache64_count<QSE_COUNTOF(rtx->scache64))
|
||||
{
|
||||
run->scache64[run->scache64_count++] = v;
|
||||
rtx->scache64[rtx->scache64_count++] = v;
|
||||
}
|
||||
else QSE_AWK_FREE (run->awk, val);
|
||||
else QSE_AWK_FREE (rtx->awk, val);
|
||||
}
|
||||
else*/ QSE_AWK_FREE (run->awk, val);
|
||||
else*/ QSE_AWK_FREE (rtx->awk, val);
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_REX)
|
||||
{
|
||||
/*
|
||||
QSE_AWK_FREE (run->awk, ((qse_awk_val_rex_t*)val)->ptr);
|
||||
QSE_AWK_FREEREX (run->awk, ((qse_awk_val_rex_t*)val)->code);
|
||||
QSE_AWK_FREE (rtx->awk, ((qse_awk_val_rex_t*)val)->ptr);
|
||||
QSE_AWK_FREEREX (rtx->awk, ((qse_awk_val_rex_t*)val)->code);
|
||||
*/
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
QSE_AWK_FREE (rtx->awk, val);
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_MAP)
|
||||
{
|
||||
@ -649,16 +649,16 @@ void qse_awk_freeval (qse_awk_rtx_t* run, qse_awk_val_t* val, qse_bool_t cache)
|
||||
/* qse_map_close (((qse_awk_val_map_t*)val)->map);*/
|
||||
qse_map_fini (((qse_awk_val_map_t*)val)->map);
|
||||
/* END CHECK */
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
QSE_AWK_FREE (rtx->awk, val);
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_REF)
|
||||
{
|
||||
if (cache && run->fcache_count < QSE_COUNTOF(run->fcache))
|
||||
if (cache && rtx->fcache_count < QSE_COUNTOF(rtx->fcache))
|
||||
{
|
||||
run->fcache[run->fcache_count++] =
|
||||
rtx->fcache[rtx->fcache_count++] =
|
||||
(qse_awk_val_ref_t*)val;
|
||||
}
|
||||
else QSE_AWK_FREE (run->awk, val);
|
||||
else QSE_AWK_FREE (rtx->awk, val);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -668,26 +668,26 @@ void qse_awk_freeval (qse_awk_rtx_t* run, qse_awk_val_t* val, qse_bool_t cache)
|
||||
}
|
||||
}
|
||||
|
||||
void qse_awk_refupval (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
void qse_awk_rtx_refupval (qse_awk_rtx_t* rtx, qse_awk_val_t* val)
|
||||
{
|
||||
if (IS_STATICVAL(val)) return;
|
||||
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (QSE_T("ref up [ptr=%p] [count=%d] "), val, (int)val->ref);
|
||||
qse_awk_dprintval (run, val);
|
||||
qse_awk_dprintval (rtx, val);
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
|
||||
val->ref++;
|
||||
}
|
||||
|
||||
void qse_awk_refdownval (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
void qse_awk_rtx_refdownval (qse_awk_rtx_t* rtx, qse_awk_val_t* val)
|
||||
{
|
||||
if (IS_STATICVAL(val)) return;
|
||||
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (QSE_T("ref down [ptr=%p] [count=%d]\n"), val, (int)val->ref);
|
||||
qse_awk_dprintval (run, val);
|
||||
qse_awk_dprintval (rtx, val);
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
|
||||
@ -697,11 +697,11 @@ void qse_awk_refdownval (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
val->ref--;
|
||||
if (val->ref <= 0)
|
||||
{
|
||||
qse_awk_freeval(run, val, QSE_TRUE);
|
||||
qse_awk_rtx_freeval(rtx, val, QSE_TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void qse_awk_refdownval_nofree (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
void qse_awk_rtx_refdownval_nofree (qse_awk_rtx_t* rtx, qse_awk_val_t* val)
|
||||
{
|
||||
if (IS_STATICVAL(val)) return;
|
||||
|
||||
@ -710,17 +710,17 @@ void qse_awk_refdownval_nofree (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
val->ref--;
|
||||
}
|
||||
|
||||
void qse_awk_freevalchunk (qse_awk_rtx_t* run, qse_awk_val_chunk_t* chunk)
|
||||
void qse_awk_rtx_freevalchunk (qse_awk_rtx_t* rtx, qse_awk_val_chunk_t* chunk)
|
||||
{
|
||||
while (chunk != QSE_NULL)
|
||||
{
|
||||
qse_awk_val_chunk_t* next = chunk->next;
|
||||
QSE_AWK_FREE (run->awk, chunk);
|
||||
QSE_AWK_FREE (rtx->awk, chunk);
|
||||
chunk = next;
|
||||
}
|
||||
}
|
||||
|
||||
qse_bool_t qse_awk_valtobool (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
qse_bool_t qse_awk_rtx_valtobool (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
{
|
||||
if (val == QSE_NULL) return QSE_FALSE;
|
||||
|
||||
@ -748,7 +748,7 @@ qse_bool_t qse_awk_valtobool (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
return QSE_FALSE;
|
||||
}
|
||||
|
||||
qse_char_t* qse_awk_valtostr (
|
||||
qse_char_t* qse_awk_rtx_valtostr (
|
||||
qse_awk_rtx_t* run, qse_awk_val_t* v,
|
||||
int opt, qse_str_t* buf, qse_size_t* len)
|
||||
{
|
||||
@ -801,11 +801,11 @@ qse_char_t* qse_awk_valtostr (
|
||||
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (
|
||||
QSE_T("ERROR: WRONG VALUE TYPE [%d] in qse_awk_valtostr\n"),
|
||||
QSE_T("ERROR: WRONG VALUE TYPE [%d] in qse_awk_rtx_valtostr\n"),
|
||||
v->type);
|
||||
#endif
|
||||
|
||||
qse_awk_setrunerror (run, QSE_AWK_EVALTYPE, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_EVALTYPE, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
@ -819,7 +819,7 @@ static qse_char_t* str_to_str (
|
||||
tmp = QSE_AWK_STRXDUP (run->awk, str, str_len);
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
@ -833,7 +833,7 @@ static qse_char_t* str_to_str (
|
||||
|
||||
if (str_len >= *len)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_EINVAL, 0, QSE_NULL, 0);
|
||||
*len = str_len + 1;
|
||||
return QSE_NULL;
|
||||
@ -850,7 +850,7 @@ static qse_char_t* str_to_str (
|
||||
n = qse_str_ncat (buf, str, str_len);
|
||||
if (n == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
@ -878,7 +878,7 @@ static qse_char_t* val_int_to_str (
|
||||
run->awk, 2 * QSE_SIZEOF(qse_char_t));
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
@ -894,7 +894,7 @@ static qse_char_t* val_int_to_str (
|
||||
|
||||
if (1 >= *len)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_EINVAL, 0, QSE_NULL, 0);
|
||||
*len = 2; /* buffer size required */
|
||||
return QSE_NULL;
|
||||
@ -911,7 +911,7 @@ static qse_char_t* val_int_to_str (
|
||||
if (opt & QSE_AWK_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
if (qse_str_cat (buf, QSE_T("0")) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
@ -931,7 +931,7 @@ static qse_char_t* val_int_to_str (
|
||||
run->awk, (rlen + 1) * QSE_SIZEOF(qse_char_t));
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
@ -945,7 +945,7 @@ static qse_char_t* val_int_to_str (
|
||||
|
||||
if (rlen >= *len)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_EINVAL, 0, QSE_NULL, 0);
|
||||
*len = rlen + 1; /* buffer size required */
|
||||
return QSE_NULL;
|
||||
@ -966,7 +966,7 @@ static qse_char_t* val_int_to_str (
|
||||
if (qse_str_nccat (
|
||||
buf, QSE_T(' '), rlen) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
@ -1013,14 +1013,14 @@ static qse_char_t* val_real_to_str (
|
||||
|
||||
if (qse_str_init (&out, run->awk->mmgr, 256) == QSE_NULL)
|
||||
{
|
||||
qse_awk_setrunerror (run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
if (qse_str_init (&fbu, run->awk->mmgr, 256) == QSE_NULL)
|
||||
{
|
||||
qse_str_fini (&out);
|
||||
qse_awk_setrunerror (run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
@ -1048,7 +1048,7 @@ static qse_char_t* val_real_to_str (
|
||||
|
||||
if (tmp_len >= *len)
|
||||
{
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_EINVAL, 0, QSE_NULL, 0);
|
||||
*len = tmp_len + 1; /* buffer size required */
|
||||
qse_str_close (&fbu);
|
||||
@ -1071,7 +1071,7 @@ static qse_char_t* val_real_to_str (
|
||||
{
|
||||
qse_str_fini (&fbu);
|
||||
qse_str_fini (&out);
|
||||
qse_awk_setrunerror (
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_ENOMEM, 0, QSE_NULL, 0);
|
||||
return QSE_NULL;
|
||||
}
|
||||
@ -1086,7 +1086,7 @@ static qse_char_t* val_real_to_str (
|
||||
return tmp;
|
||||
}
|
||||
|
||||
int qse_awk_valtonum (
|
||||
int qse_awk_rtx_valtonum (
|
||||
qse_awk_rtx_t* run, qse_awk_val_t* v, qse_long_t* l, qse_real_t* r)
|
||||
{
|
||||
if (v->type == QSE_AWK_VAL_NIL)
|
||||
@ -1109,22 +1109,22 @@ int qse_awk_valtonum (
|
||||
|
||||
if (v->type == QSE_AWK_VAL_STR)
|
||||
{
|
||||
return qse_awk_strtonum (run,
|
||||
return qse_awk_rtx_strtonum (run,
|
||||
((qse_awk_val_str_t*)v)->ptr,
|
||||
((qse_awk_val_str_t*)v)->len, l, r);
|
||||
}
|
||||
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (
|
||||
QSE_T("ERROR: WRONG VALUE TYPE [%d] in qse_awk_valtonum\n"),
|
||||
QSE_T("ERROR: WRONG VALUE TYPE [%d] in qse_awk_rtx_valtonum\n"),
|
||||
v->type);
|
||||
#endif
|
||||
|
||||
qse_awk_setrunerror (run, QSE_AWK_EVALTYPE, 0, QSE_NULL, 0);
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_EVALTYPE, 0, QSE_NULL, 0);
|
||||
return -1; /* error */
|
||||
}
|
||||
|
||||
int qse_awk_strtonum (
|
||||
int qse_awk_rtx_strtonum (
|
||||
qse_awk_rtx_t* run, const qse_char_t* ptr, qse_size_t len,
|
||||
qse_long_t* l, qse_real_t* r)
|
||||
{
|
||||
|
35
qse/lib/awk/val.h
Normal file
35
qse/lib/awk/val.h
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* $Id: eio.h 363 2008-09-04 10:58:08Z baconevi $
|
||||
*
|
||||
Copyright 2006-2008 Chung, Hyung-Hwan.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef _QSE_LIB_AWK_VAL_H_
|
||||
#define _QSE_LIB_AWK_VAL_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void qse_awk_rtx_freevalchunk (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_chunk_t* chunk
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user