renamed many functions, typedefs, and variables.

This commit is contained in:
hyung-hwan 2009-02-01 03:59:46 +00:00
parent b9c02b48bc
commit 4f968e7f11
20 changed files with 1597 additions and 1433 deletions

View File

@ -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)
{

View File

@ -28,6 +28,6 @@ BEGIN {
print "wide characteter 넓은 문자";
print fflush ("abc");
return "x.awk";
#return "x.awk";
}

View File

@ -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,

View File

@ -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);

View File

@ -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

View File

@ -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@

View File

@ -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)
{

View File

@ -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
{

View File

@ -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??? */
}
}

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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

View File

@ -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'));

View File

@ -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;

File diff suppressed because it is too large Load Diff

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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
View 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