enhanced and fixed a few functions.
- qse_awk_rtx_call() - qse_awk_parsesimple() - qse_awk_parsesimple_in_t - qse_awk_parsesimple_out_t
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: Awk.cpp 496 2008-12-15 09:56:48Z baconevi $
|
||||
* $Id: Awk.cpp 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: StdAwk.cpp 501 2008-12-17 08:39:15Z baconevi $
|
||||
* $Id: StdAwk.cpp 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.c 501 2008-12-17 08:39:15Z baconevi $
|
||||
* $Id: awk.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk_i.h 332 2008-08-18 11:21:48Z baconevi $
|
||||
* $Id: awk.h 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: err.c 337 2008-08-20 09:17:25Z baconevi $
|
||||
* $Id: err.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: func.c 499 2008-12-16 09:42:48Z baconevi $
|
||||
* $Id: fnc.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -250,7 +250,7 @@ static int fnc_close (
|
||||
else
|
||||
{
|
||||
name = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (name == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -364,7 +364,7 @@ static int fnc_fflush (
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
|
||||
}
|
||||
@ -437,7 +437,7 @@ static int fnc_index (
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -449,7 +449,7 @@ static int fnc_index (
|
||||
else
|
||||
{
|
||||
str1 = qse_awk_rtx_valtostr (
|
||||
run, a1, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len1);
|
||||
run, a1, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len1);
|
||||
if (str1 == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR)
|
||||
@ -494,7 +494,7 @@ static int fnc_length (
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, v, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, v, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
QSE_AWK_FREE (run->awk, str);
|
||||
}
|
||||
@ -536,7 +536,7 @@ static int fnc_substr (
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -642,7 +642,7 @@ static int fnc_split (
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &str_len);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &str_len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
str_free = str;
|
||||
}
|
||||
@ -666,7 +666,7 @@ static int fnc_split (
|
||||
else
|
||||
{
|
||||
fs_ptr = qse_awk_rtx_valtostr (
|
||||
run, t1, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
run, t1, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
if (fs_ptr == QSE_NULL)
|
||||
{
|
||||
if (str_free != QSE_NULL)
|
||||
@ -693,7 +693,7 @@ static int fnc_split (
|
||||
else
|
||||
{
|
||||
fs_ptr = qse_awk_rtx_valtostr (
|
||||
run, a2, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
run, a2, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
if (fs_ptr == QSE_NULL)
|
||||
{
|
||||
if (str_free != QSE_NULL)
|
||||
@ -861,7 +861,7 @@ static int fnc_tolower (
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -901,7 +901,7 @@ static int fnc_toupper (
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -968,7 +968,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
else
|
||||
{
|
||||
a0_ptr = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &a0_len);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &a0_len);
|
||||
if (a0_ptr == QSE_NULL)
|
||||
{
|
||||
FREE_A_PTRS (run->awk);
|
||||
@ -985,7 +985,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
else
|
||||
{
|
||||
a1_ptr = qse_awk_rtx_valtostr (
|
||||
run, a1, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &a1_len);
|
||||
run, a1, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &a1_len);
|
||||
if (a1_ptr == QSE_NULL)
|
||||
{
|
||||
FREE_A_PTRS (run->awk);
|
||||
@ -1041,7 +1041,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
else
|
||||
{
|
||||
a2_ptr = qse_awk_rtx_valtostr (
|
||||
run, *a2_ref, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &a2_len);
|
||||
run, *a2_ref, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &a2_len);
|
||||
if (a2_ptr == QSE_NULL)
|
||||
{
|
||||
FREE_A_PTRS (run->awk);
|
||||
@ -1250,7 +1250,7 @@ static int fnc_match (
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -1268,7 +1268,7 @@ static int fnc_match (
|
||||
else
|
||||
{
|
||||
str1 = qse_awk_rtx_valtostr (
|
||||
run, a1, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len1);
|
||||
run, a1, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len1);
|
||||
if (str1 == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR)
|
||||
@ -1374,7 +1374,7 @@ static int fnc_sprintf (
|
||||
else
|
||||
{
|
||||
cs0.ptr = qse_awk_rtx_valtostr (
|
||||
run, a0, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &cs0.len);
|
||||
run, a0, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &cs0.len);
|
||||
if (cs0.ptr == QSE_NULL)
|
||||
{
|
||||
qse_str_fini (&fbu);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: func.h 363 2008-09-04 10:58:08Z baconevi $
|
||||
* $Id: fnc.h 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: misc.c 337 2008-08-20 09:17:25Z baconevi $
|
||||
* $Id: misc.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: misc.h 363 2008-09-04 10:58:08Z baconevi $
|
||||
* $Id: misc.h 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: parse.c 496 2008-12-15 09:56:48Z baconevi $
|
||||
* $Id: parse.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: parse.h 363 2008-09-04 10:58:08Z baconevi $
|
||||
* $Id: parse.h 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: rec.c 372 2008-09-23 09:51:24Z baconevi $
|
||||
* $Id: rec.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -123,7 +123,7 @@ static int split_record (qse_awk_rtx_t* run)
|
||||
else
|
||||
{
|
||||
fs_ptr = qse_awk_rtx_valtostr (
|
||||
run, fs, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
run, fs, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
if (fs_ptr == QSE_NULL) return -1;
|
||||
fs_free = fs_ptr;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: eio.c 466 2008-12-09 09:50:40Z baconevi $
|
||||
* $Id: rio.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -218,7 +218,7 @@ int qse_awk_rtx_readio (
|
||||
else
|
||||
{
|
||||
rs_ptr = qse_awk_rtx_valtostr (
|
||||
run, rs, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &rs_len);
|
||||
run, rs, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &rs_len);
|
||||
if (rs_ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_refdownval (run, rs);
|
||||
@ -426,7 +426,7 @@ int qse_awk_rtx_writeio_val (
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, v,
|
||||
QSE_AWK_VALTOSTR_CLEAR | QSE_AWK_VALTOSTR_PRINT,
|
||||
QSE_AWK_RTX_VALTOSTR_CLEAR | QSE_AWK_RTX_VALTOSTR_PRINT,
|
||||
QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: eio.h 363 2008-09-04 10:58:08Z baconevi $
|
||||
* $Id: rio.h 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: run.c 496 2008-12-15 09:56:48Z baconevi $
|
||||
* $Id: run.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -315,7 +315,7 @@ static int set_global (
|
||||
qse_size_t convfmt_len, i;
|
||||
|
||||
convfmt_ptr = qse_awk_rtx_valtostr (run,
|
||||
val, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &convfmt_len);
|
||||
val, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &convfmt_len);
|
||||
if (convfmt_ptr == QSE_NULL) return -1;
|
||||
|
||||
for (i = 0; i < convfmt_len; i++)
|
||||
@ -362,7 +362,7 @@ static int set_global (
|
||||
QSE_ASSERT (val->type != QSE_AWK_VAL_REX);
|
||||
|
||||
fs_ptr = qse_awk_rtx_valtostr (
|
||||
run, val, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
run, val, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &fs_len);
|
||||
if (fs_ptr == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -443,7 +443,7 @@ static int set_global (
|
||||
qse_size_t ofmt_len, i;
|
||||
|
||||
ofmt_ptr = qse_awk_rtx_valtostr (
|
||||
run, val, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &ofmt_len);
|
||||
run, val, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &ofmt_len);
|
||||
if (ofmt_ptr == QSE_NULL) return -1;
|
||||
|
||||
for (i = 0; i < ofmt_len; i++)
|
||||
@ -467,7 +467,7 @@ static int set_global (
|
||||
qse_size_t ofs_len;
|
||||
|
||||
ofs_ptr = qse_awk_rtx_valtostr (
|
||||
run, val, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &ofs_len);
|
||||
run, val, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &ofs_len);
|
||||
if (ofs_ptr == QSE_NULL) return -1;
|
||||
|
||||
if (run->gbl.ofs.ptr != QSE_NULL)
|
||||
@ -481,7 +481,7 @@ static int set_global (
|
||||
qse_size_t ors_len;
|
||||
|
||||
ors_ptr = qse_awk_rtx_valtostr (
|
||||
run, val, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &ors_len);
|
||||
run, val, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &ors_len);
|
||||
if (ors_ptr == QSE_NULL) return -1;
|
||||
|
||||
if (run->gbl.ors.ptr != QSE_NULL)
|
||||
@ -506,7 +506,7 @@ static int set_global (
|
||||
QSE_ASSERT (val->type != QSE_AWK_VAL_REX);
|
||||
|
||||
rs_ptr = qse_awk_rtx_valtostr (
|
||||
run, val, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &rs_len);
|
||||
run, val, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &rs_len);
|
||||
if (rs_ptr == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -540,7 +540,7 @@ static int set_global (
|
||||
qse_size_t subsep_len;
|
||||
|
||||
subsep_ptr = qse_awk_rtx_valtostr (
|
||||
run, val, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &subsep_len);
|
||||
run, val, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &subsep_len);
|
||||
if (subsep_ptr == QSE_NULL) return -1;
|
||||
|
||||
if (run->gbl.subsep.ptr != QSE_NULL)
|
||||
@ -1271,7 +1271,6 @@ static void capture_retval_on_exit (void* arg)
|
||||
qse_awk_rtx_refupval (data->rtx, data->val);
|
||||
}
|
||||
|
||||
|
||||
static int enter_stack_frame (qse_awk_rtx_t* run)
|
||||
{
|
||||
qse_size_t saved_stack_top;
|
||||
@ -1462,11 +1461,13 @@ int qse_awk_rtx_loop (qse_awk_rtx_t* rtx)
|
||||
}
|
||||
|
||||
/* call an AWK function */
|
||||
int qse_awk_rtx_call (
|
||||
qse_awk_val_t* qse_awk_rtx_call (
|
||||
qse_awk_rtx_t* rtx, const qse_char_t* name,
|
||||
qse_awk_val_t** args, qse_size_t nargs)
|
||||
{
|
||||
#if 0
|
||||
int ret = 0;
|
||||
#endif
|
||||
qse_map_pair_t* pair;
|
||||
qse_awk_fun_t* fun;
|
||||
struct capture_retval_data_t crdata;
|
||||
@ -1479,7 +1480,7 @@ int qse_awk_rtx_call (
|
||||
/* cannot call the function again when exit() is called
|
||||
* in an AWK program or qse_awk_rtx_stop() is invoked */
|
||||
qse_awk_rtx_seterror (rtx, QSE_AWK_ENOPER, 0, QSE_NULL);
|
||||
return -1;
|
||||
return QSE_NULL;
|
||||
}
|
||||
/*rtx->exit_level = EXIT_NONE;*/
|
||||
|
||||
@ -1503,7 +1504,7 @@ int qse_awk_rtx_call (
|
||||
errarg.len = call.what.fun.name.len;
|
||||
|
||||
qse_awk_rtx_seterror (rtx, QSE_AWK_EFUNNONE, 0, &errarg);
|
||||
return -1;
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
fun = (qse_awk_fun_t*)QSE_MAP_VPTR(pair);
|
||||
@ -1515,7 +1516,7 @@ int qse_awk_rtx_call (
|
||||
/* TODO: is this correct? what if i want to
|
||||
* allow arbitarary numbers of arguments? */
|
||||
qse_awk_rtx_seterror (rtx, QSE_AWK_EARGTM, 0, QSE_NULL);
|
||||
return -1;
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
/* now that the function is found and ok, let's execute it */
|
||||
@ -1530,10 +1531,46 @@ int qse_awk_rtx_call (
|
||||
&crdata
|
||||
);
|
||||
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
/* an error occurred. let's check if it is caused by exit().
|
||||
* if so, the return value should have been captured into
|
||||
* crdata.val. */
|
||||
if (crdata.val != QSE_NULL) v = crdata.val; /* yet it is */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* thr return value captured in termination by exit()
|
||||
* is reference-counted up in capture_retval_on_exit().
|
||||
* let's do the same thing for the return value normally
|
||||
* returned. */
|
||||
qse_awk_rtx_refupval (rtx, v);
|
||||
}
|
||||
|
||||
if (rtx->rcb.on_exit != QSE_NULL)
|
||||
{
|
||||
rtx->rcb.on_exit (
|
||||
rtx,
|
||||
((v == QSE_NULL)? qse_awk_val_nil: v),
|
||||
rtx->rcb.data
|
||||
);
|
||||
}
|
||||
|
||||
/* return the return value with its reference count at least 1.
|
||||
* the caller of this function should reference-count it down. */
|
||||
return v;
|
||||
|
||||
|
||||
#if 0
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
/* an error occurred. but this might have been
|
||||
* caused by exit(). so let's check it */
|
||||
|
||||
if (crdata.val == QSE_NULL)
|
||||
{
|
||||
/* no return value has been caputured. this must
|
||||
* be an error */
|
||||
QSE_ASSERT (rtx->errnum != QSE_AWK_ENOERR);
|
||||
v = qse_awk_val_nil; /* defaults to nil */
|
||||
ret = -1;
|
||||
@ -1556,17 +1593,19 @@ int qse_awk_rtx_call (
|
||||
}
|
||||
else
|
||||
{
|
||||
/* the reference count of crdata.val is updated in
|
||||
* capture_retval_on_exit(). update reference count of
|
||||
* v here to balance it */
|
||||
/* the return value captured in termination by exit()
|
||||
* is reference-counted up in capture_retval_on_exit().
|
||||
* let's do the same thing for the return value normally
|
||||
* returned. */
|
||||
qse_awk_rtx_refupval (rtx, v);
|
||||
}
|
||||
|
||||
if (rtx->rcb.on_exit != QSE_NULL)
|
||||
rtx->rcb.on_exit (rtx, v, rtx->rcb.data);
|
||||
qse_awk_rtx_refdownval (rtx, v);
|
||||
|
||||
qse_awk_rtx_refdownval (rtx, v);
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int run_pattern_blocks (qse_awk_rtx_t* run)
|
||||
@ -2534,13 +2573,13 @@ static int run_delete (qse_awk_rtx_t* run, qse_awk_nde_delete_t* nde)
|
||||
/* try with a fixed-size buffer */
|
||||
keylen = QSE_COUNTOF(buf);
|
||||
key = qse_awk_rtx_valtostr (
|
||||
run, idx, QSE_AWK_VALTOSTR_FIXED,
|
||||
run, idx, QSE_AWK_RTX_VALTOSTR_FIXED,
|
||||
(qse_str_t*)buf, &keylen);
|
||||
if (key == QSE_NULL)
|
||||
{
|
||||
/* if it doesn't work, switch to dynamic mode */
|
||||
key = qse_awk_rtx_valtostr (
|
||||
run, idx, QSE_AWK_VALTOSTR_CLEAR,
|
||||
run, idx, QSE_AWK_RTX_VALTOSTR_CLEAR,
|
||||
QSE_NULL, &keylen);
|
||||
}
|
||||
|
||||
@ -2659,13 +2698,13 @@ static int run_delete (qse_awk_rtx_t* run, qse_awk_nde_delete_t* nde)
|
||||
/* try with a fixed-size buffer */
|
||||
keylen = QSE_COUNTOF(buf);
|
||||
key = qse_awk_rtx_valtostr (
|
||||
run, idx, QSE_AWK_VALTOSTR_FIXED,
|
||||
run, idx, QSE_AWK_RTX_VALTOSTR_FIXED,
|
||||
(qse_str_t*)buf, &keylen);
|
||||
if (key == QSE_NULL)
|
||||
{
|
||||
/* if it doesn't work, switch to dynamic mode */
|
||||
key = qse_awk_rtx_valtostr (
|
||||
run, idx, QSE_AWK_VALTOSTR_CLEAR,
|
||||
run, idx, QSE_AWK_RTX_VALTOSTR_CLEAR,
|
||||
QSE_NULL, &keylen);
|
||||
}
|
||||
|
||||
@ -2779,7 +2818,7 @@ static int run_print (qse_awk_rtx_t* run, qse_awk_nde_print_t* nde)
|
||||
|
||||
qse_awk_rtx_refupval (run, v);
|
||||
out = qse_awk_rtx_valtostr (
|
||||
run, v, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, v, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (out == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
@ -2937,7 +2976,7 @@ static int run_printf (qse_awk_rtx_t* run, qse_awk_nde_print_t* nde)
|
||||
|
||||
qse_awk_rtx_refupval (run, v);
|
||||
out = qse_awk_rtx_valtostr (
|
||||
run, v, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, v, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (out == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
@ -3585,7 +3624,7 @@ static qse_awk_val_t* do_assignment_pos (
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, val, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, val, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL)
|
||||
{
|
||||
/* change error line */
|
||||
@ -4038,7 +4077,7 @@ static int __cmp_int_str (
|
||||
}
|
||||
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, left, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, left, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return CMP_ERROR;
|
||||
|
||||
if (run->gbl.ignorecase)
|
||||
@ -4110,7 +4149,7 @@ static int __cmp_real_str (
|
||||
}
|
||||
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, left, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, left, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return CMP_ERROR;
|
||||
|
||||
if (run->gbl.ignorecase)
|
||||
@ -4630,11 +4669,11 @@ static qse_awk_val_t* eval_binop_concat (
|
||||
qse_awk_val_t* res;
|
||||
|
||||
strl = qse_awk_rtx_valtostr (
|
||||
run, left, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &strl_len);
|
||||
run, left, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &strl_len);
|
||||
if (strl == QSE_NULL) return QSE_NULL;
|
||||
|
||||
strr = qse_awk_rtx_valtostr (
|
||||
run, right, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &strr_len);
|
||||
run, right, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &strr_len);
|
||||
if (strr == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, strl);
|
||||
@ -4739,7 +4778,7 @@ static qse_awk_val_t* eval_binop_match0 (
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, right, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, right, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return QSE_NULL;
|
||||
|
||||
rex_code = QSE_AWK_BUILDREX (run->awk, str, len, &errnum);
|
||||
@ -4785,7 +4824,7 @@ static qse_awk_val_t* eval_binop_match0 (
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, left, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, left, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL)
|
||||
{
|
||||
if (right->type != QSE_AWK_VAL_REX)
|
||||
@ -5387,7 +5426,8 @@ static qse_awk_val_t* eval_fnc (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
}
|
||||
|
||||
static qse_awk_val_t* eval_fun_ex (
|
||||
qse_awk_rtx_t* run, qse_awk_nde_t* nde, void(*errhandler)(void*), void* eharg)
|
||||
qse_awk_rtx_t* run, qse_awk_nde_t* nde,
|
||||
void(*errhandler)(void*), void* eharg)
|
||||
{
|
||||
qse_awk_nde_call_t* call = (qse_awk_nde_call_t*)nde;
|
||||
qse_awk_fun_t* fun;
|
||||
@ -5435,8 +5475,7 @@ static qse_awk_val_t* eval_fun (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
while ((nargs) > 0) \
|
||||
{ \
|
||||
--(nargs); \
|
||||
qse_awk_rtx_refdownval ((rtx), \
|
||||
(rtx)->stack[(rtx)->stack_top-1]); \
|
||||
qse_awk_rtx_refdownval ((rtx), (rtx)->stack[(rtx)->stack_top-1]); \
|
||||
__raw_pop (rtx); \
|
||||
} \
|
||||
} while (0)
|
||||
@ -5707,11 +5746,11 @@ static qse_size_t push_arg_from_vals (qse_awk_rtx_t* rtx, qse_awk_nde_call_t* ca
|
||||
{
|
||||
if (__raw_push (rtx, pafv->args[nargs]) == -1)
|
||||
{
|
||||
/* ugly - v needs to be freed if it doesn't have
|
||||
/* ugly - arg needs to be freed if it doesn't have
|
||||
* any reference. but its reference has not been
|
||||
* updated yet as it is carried out after the
|
||||
* successful stack push. so it adds up a reference
|
||||
* and dereferences it */
|
||||
* updated yet as it is carried out after successful
|
||||
* stack push. so it adds up a reference and
|
||||
* dereferences it */
|
||||
qse_awk_rtx_refupval (rtx, pafv->args[nargs]);
|
||||
qse_awk_rtx_refdownval (rtx, pafv->args[nargs]);
|
||||
|
||||
@ -5720,6 +5759,8 @@ static qse_size_t push_arg_from_vals (qse_awk_rtx_t* rtx, qse_awk_nde_call_t* ca
|
||||
rtx, QSE_AWK_ENOMEM, call->line, QSE_NULL);
|
||||
return (qse_size_t)-1;
|
||||
}
|
||||
|
||||
qse_awk_rtx_refupval (rtx, pafv->args[nargs]);
|
||||
}
|
||||
|
||||
return nargs;
|
||||
@ -6255,7 +6296,7 @@ static qse_awk_val_t* eval_getline (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
* should not be called immediately below */
|
||||
qse_awk_rtx_refupval (run, v);
|
||||
in = qse_awk_rtx_valtostr (
|
||||
run, v, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, v, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (in == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
@ -6450,7 +6491,7 @@ static int shorten_record (qse_awk_rtx_t* run, qse_size_t nflds)
|
||||
else
|
||||
{
|
||||
ofs = qse_awk_rtx_valtostr (
|
||||
run, v, QSE_AWK_VALTOSTR_CLEAR,
|
||||
run, v, QSE_AWK_RTX_VALTOSTR_CLEAR,
|
||||
QSE_NULL, &ofs_len);
|
||||
if (ofs == QSE_NULL) return -1;
|
||||
|
||||
@ -6534,14 +6575,14 @@ static qse_char_t* idxnde_to_str (
|
||||
{
|
||||
/* try with a fixed-size buffer */
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, idx, QSE_AWK_VALTOSTR_FIXED, (qse_str_t*)buf, len);
|
||||
run, idx, QSE_AWK_RTX_VALTOSTR_FIXED, (qse_str_t*)buf, len);
|
||||
}
|
||||
|
||||
if (str == QSE_NULL)
|
||||
{
|
||||
/* if it doen't work, switch to the dynamic mode */
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, idx, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, len);
|
||||
run, idx, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, len);
|
||||
|
||||
if (str == QSE_NULL)
|
||||
{
|
||||
@ -7250,8 +7291,11 @@ qse_char_t* qse_awk_rtx_format (
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
str = qse_awk_rtx_valtostr (run, v,
|
||||
QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &str_len);
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, v,
|
||||
QSE_AWK_RTX_VALTOSTR_CLEAR,
|
||||
QSE_NULL, &str_len
|
||||
);
|
||||
if (str == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: run.h 363 2008-09-04 10:58:08Z baconevi $
|
||||
* $Id: run.h 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id$
|
||||
* $Id: std.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include "awk.h"
|
||||
#include <qse/awk/std.h>
|
||||
#include <qse/cmn/sio.h>
|
||||
#include <qse/cmn/pio.h>
|
||||
#include <qse/cmn/str.h>
|
||||
@ -33,33 +34,33 @@ typedef struct xtn_t
|
||||
{
|
||||
struct
|
||||
{
|
||||
qse_awk_parsesimple_type_t type;
|
||||
qse_awk_parsestd_type_t type;
|
||||
union
|
||||
{
|
||||
const qse_char_t* file;
|
||||
const qse_char_t* str;
|
||||
const qse_char_t* cp;
|
||||
struct
|
||||
{
|
||||
const qse_char_t* ptr;
|
||||
const qse_char_t* end;
|
||||
} strl;
|
||||
} cpl;
|
||||
} u;
|
||||
qse_sio_t* handle; /* the handle to an open file */
|
||||
} in;
|
||||
|
||||
struct
|
||||
{
|
||||
qse_awk_parsesimple_type_t type;
|
||||
qse_awk_parsestd_type_t type;
|
||||
union
|
||||
{
|
||||
const qse_char_t* file;
|
||||
qse_char_t* str;
|
||||
qse_char_t* cp;
|
||||
struct
|
||||
{
|
||||
qse_xstr_t* osp;
|
||||
qse_char_t* ptr;
|
||||
qse_char_t* end;
|
||||
} strl;
|
||||
} cpl;
|
||||
} u;
|
||||
qse_sio_t* handle;
|
||||
} out;
|
||||
@ -88,7 +89,7 @@ typedef struct rxtn_t
|
||||
|
||||
} rxtn_t;
|
||||
|
||||
const qse_char_t* qse_awk_rtx_opensimple_stdio[] =
|
||||
const qse_char_t* qse_awk_rtx_openstd_stdio[] =
|
||||
{
|
||||
QSE_T(""),
|
||||
QSE_NULL
|
||||
@ -137,7 +138,7 @@ static qse_cint_t custom_awk_toccls (
|
||||
|
||||
static int add_functions (qse_awk_t* awk);
|
||||
|
||||
qse_awk_t* qse_awk_opensimple (void)
|
||||
qse_awk_t* qse_awk_openstd (void)
|
||||
{
|
||||
qse_awk_t* awk;
|
||||
qse_awk_prm_t prm;
|
||||
@ -156,9 +157,6 @@ qse_awk_t* qse_awk_opensimple (void)
|
||||
xtn = (xtn_t*) QSE_XTN (awk);
|
||||
QSE_MEMSET (xtn, 0, QSE_SIZEOF(xtn_t));
|
||||
|
||||
/* set default options */
|
||||
qse_awk_setoption (awk, QSE_AWK_CLASSIC);
|
||||
|
||||
/* add intrinsic functions */
|
||||
if (add_functions (awk) == -1)
|
||||
{
|
||||
@ -169,7 +167,7 @@ qse_awk_t* qse_awk_opensimple (void)
|
||||
return awk;
|
||||
}
|
||||
|
||||
/*** PARSESIMPLE ***/
|
||||
/*** PARSESTD ***/
|
||||
|
||||
static qse_ssize_t sf_in (
|
||||
qse_awk_t* awk, qse_awk_sio_cmd_t cmd,
|
||||
@ -181,7 +179,7 @@ static qse_ssize_t sf_in (
|
||||
{
|
||||
switch (xtn->s.in.type)
|
||||
{
|
||||
case QSE_AWK_PARSESIMPLE_FILE:
|
||||
case QSE_AWK_PARSESTD_FILE:
|
||||
if (xtn->s.in.u.file == QSE_NULL) return -1;
|
||||
|
||||
xtn->s.in.handle = qse_sio_open (
|
||||
@ -193,12 +191,12 @@ static qse_ssize_t sf_in (
|
||||
if (xtn->s.in.handle == QSE_NULL) return -1;
|
||||
return 1;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STDIO:
|
||||
case QSE_AWK_PARSESTD_STDIO:
|
||||
xtn->s.in.handle = qse_sio_in;
|
||||
return 1;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STR:
|
||||
case QSE_AWK_PARSESIMPLE_STRL:
|
||||
case QSE_AWK_PARSESTD_CP:
|
||||
case QSE_AWK_PARSESTD_CPL:
|
||||
xtn->s.in.handle = QSE_NULL;
|
||||
return 1;
|
||||
}
|
||||
@ -219,27 +217,27 @@ static qse_ssize_t sf_in (
|
||||
{
|
||||
switch (xtn->s.in.type)
|
||||
{
|
||||
case QSE_AWK_PARSESIMPLE_FILE:
|
||||
case QSE_AWK_PARSESIMPLE_STDIO:
|
||||
case QSE_AWK_PARSESTD_FILE:
|
||||
case QSE_AWK_PARSESTD_STDIO:
|
||||
QSE_ASSERT (xtn->s.in.handle != QSE_NULL);
|
||||
return qse_sio_getsn (xtn->s.in.handle, data, size);
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STR:
|
||||
case QSE_AWK_PARSESTD_CP:
|
||||
{
|
||||
qse_size_t n = 0;
|
||||
while (n < size && *xtn->s.in.u.str != QSE_T('\0'))
|
||||
while (n < size && *xtn->s.in.u.cp != QSE_T('\0'))
|
||||
{
|
||||
data[n++] = *xtn->s.in.u.str++;
|
||||
data[n++] = *xtn->s.in.u.cp++;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STRL:
|
||||
case QSE_AWK_PARSESTD_CPL:
|
||||
{
|
||||
qse_size_t n = 0;
|
||||
while (n < size && xtn->s.in.u.strl.ptr < xtn->s.in.u.strl.end)
|
||||
while (n < size && xtn->s.in.u.cpl.ptr < xtn->s.in.u.cpl.end)
|
||||
{
|
||||
data[n++] = *xtn->s.in.u.strl.ptr++;
|
||||
data[n++] = *xtn->s.in.u.cpl.ptr++;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
@ -260,7 +258,7 @@ static qse_ssize_t sf_out (
|
||||
{
|
||||
switch (xtn->s.out.type)
|
||||
{
|
||||
case QSE_AWK_PARSESIMPLE_FILE:
|
||||
case QSE_AWK_PARSESTD_FILE:
|
||||
if (xtn->s.out.u.file == QSE_NULL) return -1;
|
||||
|
||||
xtn->s.out.handle = qse_sio_open (
|
||||
@ -274,12 +272,12 @@ static qse_ssize_t sf_out (
|
||||
if (xtn->s.out.handle == QSE_NULL) return -1;
|
||||
return 1;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STDIO:
|
||||
case QSE_AWK_PARSESTD_STDIO:
|
||||
xtn->s.out.handle = qse_sio_out;
|
||||
return 1;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STR:
|
||||
case QSE_AWK_PARSESIMPLE_STRL:
|
||||
case QSE_AWK_PARSESTD_CP:
|
||||
case QSE_AWK_PARSESTD_CPL:
|
||||
xtn->s.out.handle = QSE_NULL;
|
||||
return 1;
|
||||
}
|
||||
@ -288,8 +286,8 @@ static qse_ssize_t sf_out (
|
||||
{
|
||||
switch (xtn->s.out.type)
|
||||
{
|
||||
case QSE_AWK_PARSESIMPLE_FILE:
|
||||
case QSE_AWK_PARSESIMPLE_STDIO:
|
||||
case QSE_AWK_PARSESTD_FILE:
|
||||
case QSE_AWK_PARSESTD_STDIO:
|
||||
|
||||
qse_sio_flush (xtn->s.out.handle);
|
||||
if (xtn->s.out.handle != qse_sio_in &&
|
||||
@ -300,14 +298,14 @@ static qse_ssize_t sf_out (
|
||||
}
|
||||
return 0;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STR:
|
||||
*xtn->s.out.u.str = QSE_T('\0');
|
||||
case QSE_AWK_PARSESTD_CP:
|
||||
*xtn->s.out.u.cp = QSE_T('\0');
|
||||
return 0;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STRL:
|
||||
xtn->s.out.u.strl.osp->len =
|
||||
xtn->s.out.u.strl.ptr -
|
||||
xtn->s.out.u.strl.osp->ptr;
|
||||
case QSE_AWK_PARSESTD_CPL:
|
||||
xtn->s.out.u.cpl.osp->len =
|
||||
xtn->s.out.u.cpl.ptr -
|
||||
xtn->s.out.u.cpl.osp->ptr;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -315,27 +313,27 @@ static qse_ssize_t sf_out (
|
||||
{
|
||||
switch (xtn->s.out.type)
|
||||
{
|
||||
case QSE_AWK_PARSESIMPLE_FILE:
|
||||
case QSE_AWK_PARSESIMPLE_STDIO:
|
||||
case QSE_AWK_PARSESTD_FILE:
|
||||
case QSE_AWK_PARSESTD_STDIO:
|
||||
QSE_ASSERT (xtn->s.out.handle != QSE_NULL);
|
||||
return qse_sio_putsn (xtn->s.out.handle, data, size);
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STR:
|
||||
case QSE_AWK_PARSESTD_CP:
|
||||
{
|
||||
qse_size_t n = 0;
|
||||
while (n < size && *xtn->s.out.u.str != QSE_T('\0'))
|
||||
while (n < size && *xtn->s.out.u.cp != QSE_T('\0'))
|
||||
{
|
||||
*xtn->s.out.u.str++ = data[n++];
|
||||
*xtn->s.out.u.cp++ = data[n++];
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STRL:
|
||||
case QSE_AWK_PARSESTD_CPL:
|
||||
{
|
||||
qse_size_t n = 0;
|
||||
while (n < size && xtn->s.out.u.strl.ptr < xtn->s.out.u.strl.end)
|
||||
while (n < size && xtn->s.out.u.cpl.ptr < xtn->s.out.u.cpl.end)
|
||||
{
|
||||
*xtn->s.out.u.strl.ptr++ = data[n++];
|
||||
*xtn->s.out.u.cpl.ptr++ = data[n++];
|
||||
}
|
||||
return n;
|
||||
}
|
||||
@ -345,10 +343,10 @@ static qse_ssize_t sf_out (
|
||||
return -1;
|
||||
}
|
||||
|
||||
int qse_awk_parsesimple (
|
||||
int qse_awk_parsestd (
|
||||
qse_awk_t* awk,
|
||||
const qse_awk_parsesimple_in_t* in,
|
||||
qse_awk_parsesimple_out_t* out)
|
||||
const qse_awk_parsestd_in_t* in,
|
||||
qse_awk_parsestd_out_t* out)
|
||||
{
|
||||
qse_awk_sio_t sio;
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
@ -362,20 +360,20 @@ int qse_awk_parsesimple (
|
||||
|
||||
switch (in->type)
|
||||
{
|
||||
case QSE_AWK_PARSESIMPLE_FILE:
|
||||
case QSE_AWK_PARSESTD_FILE:
|
||||
xtn->s.in.u.file = in->u.file;
|
||||
break;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STR:
|
||||
xtn->s.in.u.str = in->u.str;
|
||||
case QSE_AWK_PARSESTD_CP:
|
||||
xtn->s.in.u.cp = in->u.cp;
|
||||
break;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STRL:
|
||||
xtn->s.in.u.strl.ptr = in->u.strl.ptr;
|
||||
xtn->s.in.u.strl.end = in->u.strl.ptr + in->u.strl.len;
|
||||
case QSE_AWK_PARSESTD_CPL:
|
||||
xtn->s.in.u.cpl.ptr = in->u.cpl.ptr;
|
||||
xtn->s.in.u.cpl.end = in->u.cpl.ptr + in->u.cpl.len;
|
||||
break;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STDIO:
|
||||
case QSE_AWK_PARSESTD_STDIO:
|
||||
/* nothing to do */
|
||||
break;
|
||||
|
||||
@ -392,21 +390,21 @@ int qse_awk_parsesimple (
|
||||
{
|
||||
switch (out->type)
|
||||
{
|
||||
case QSE_AWK_PARSESIMPLE_FILE:
|
||||
case QSE_AWK_PARSESTD_FILE:
|
||||
xtn->s.out.u.file = out->u.file;
|
||||
break;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STR:
|
||||
xtn->s.out.u.str = out->u.str;
|
||||
case QSE_AWK_PARSESTD_CP:
|
||||
xtn->s.out.u.cp = out->u.cp;
|
||||
break;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STRL:
|
||||
xtn->s.out.u.strl.osp = &out->u.strl;
|
||||
xtn->s.out.u.strl.ptr = out->u.strl.ptr;
|
||||
xtn->s.out.u.strl.end = out->u.strl.ptr + out->u.strl.len;
|
||||
case QSE_AWK_PARSESTD_CPL:
|
||||
xtn->s.out.u.cpl.osp = &out->u.cpl;
|
||||
xtn->s.out.u.cpl.ptr = out->u.cpl.ptr;
|
||||
xtn->s.out.u.cpl.end = out->u.cpl.ptr + out->u.cpl.len;
|
||||
break;
|
||||
|
||||
case QSE_AWK_PARSESIMPLE_STDIO:
|
||||
case QSE_AWK_PARSESTD_STDIO:
|
||||
/* nothing to do */
|
||||
break;
|
||||
|
||||
@ -422,8 +420,7 @@ int qse_awk_parsesimple (
|
||||
return qse_awk_parse (awk, &sio);
|
||||
}
|
||||
|
||||
/*** RUNSIMPLE ***/
|
||||
|
||||
/*** RTX_OPENSTD ***/
|
||||
static qse_ssize_t awk_rio_pipe (
|
||||
qse_awk_rtx_t* rtx, qse_awk_rio_cmd_t cmd, qse_awk_riod_t* riod,
|
||||
qse_char_t* data, qse_size_t size)
|
||||
@ -876,7 +873,7 @@ static qse_ssize_t awk_rio_console (
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_rtx_t* qse_awk_rtx_opensimple (
|
||||
qse_awk_rtx_t* qse_awk_rtx_openstd (
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t*const* icf,
|
||||
const qse_char_t*const* ocf)
|
||||
@ -1260,7 +1257,7 @@ static int fnc_system (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtostr (
|
||||
run, v, QSE_AWK_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
run, v, QSE_AWK_RTX_VALTOSTR_CLEAR, QSE_NULL, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: tree.c 466 2008-12-09 09:50:40Z baconevi $
|
||||
* $Id: tree.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: tree.h 381 2008-09-24 11:07:24Z baconevi $
|
||||
* $Id: tree.h 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: val.c 496 2008-12-15 09:56:48Z baconevi $
|
||||
* $Id: val.c 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -617,10 +617,7 @@ void qse_awk_rtx_freeval (qse_awk_rtx_t* rtx, qse_awk_val_t* val, qse_bool_t cac
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_MAP)
|
||||
{
|
||||
/* CHECK */
|
||||
/* 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 (rtx->awk, val);
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_REF)
|
||||
@ -798,7 +795,7 @@ static qse_char_t* str_to_str (
|
||||
if (len != QSE_NULL) *len = str_len;
|
||||
return tmp;
|
||||
}
|
||||
else if (opt & QSE_AWK_VALTOSTR_FIXED)
|
||||
else if (opt & QSE_AWK_RTX_VALTOSTR_FIXED)
|
||||
{
|
||||
QSE_ASSERT (buf != QSE_NULL && len != QSE_NULL);
|
||||
|
||||
@ -816,7 +813,7 @@ static qse_char_t* str_to_str (
|
||||
{
|
||||
qse_size_t n;
|
||||
|
||||
if (opt & QSE_AWK_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
if (opt & QSE_AWK_RTX_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
n = qse_str_ncat (buf, str, str_len);
|
||||
if (n == (qse_size_t)-1)
|
||||
{
|
||||
@ -857,7 +854,7 @@ static qse_char_t* val_int_to_str (
|
||||
if (len != QSE_NULL) *len = 1;
|
||||
return tmp;
|
||||
}
|
||||
else if (opt & QSE_AWK_VALTOSTR_FIXED)
|
||||
else if (opt & QSE_AWK_RTX_VALTOSTR_FIXED)
|
||||
{
|
||||
QSE_ASSERT (buf != QSE_NULL && len != QSE_NULL);
|
||||
|
||||
@ -877,7 +874,7 @@ static qse_char_t* val_int_to_str (
|
||||
}
|
||||
else
|
||||
{
|
||||
if (opt & QSE_AWK_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
if (opt & QSE_AWK_RTX_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
if (qse_str_cat (buf, QSE_T("0")) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_rtx_seterror (
|
||||
@ -907,7 +904,7 @@ static qse_char_t* val_int_to_str (
|
||||
tmp[rlen] = QSE_T('\0');
|
||||
if (len != QSE_NULL) *len = rlen;
|
||||
}
|
||||
else if (opt & QSE_AWK_VALTOSTR_FIXED)
|
||||
else if (opt & QSE_AWK_RTX_VALTOSTR_FIXED)
|
||||
{
|
||||
QSE_ASSERT (buf != QSE_NULL && len != QSE_NULL);
|
||||
|
||||
@ -925,7 +922,7 @@ static qse_char_t* val_int_to_str (
|
||||
else
|
||||
{
|
||||
/* clear the buffer */
|
||||
if (opt & QSE_AWK_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
if (opt & QSE_AWK_RTX_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
|
||||
tmp = QSE_STR_PTR(buf) + QSE_STR_LEN(buf);
|
||||
|
||||
@ -950,7 +947,7 @@ static qse_char_t* val_int_to_str (
|
||||
|
||||
if (v->val < 0) tmp[--rlen] = QSE_T('-');
|
||||
|
||||
if (buf != QSE_NULL && !(opt & QSE_AWK_VALTOSTR_FIXED))
|
||||
if (buf != QSE_NULL && !(opt & QSE_AWK_RTX_VALTOSTR_FIXED))
|
||||
{
|
||||
tmp = QSE_STR_PTR(buf);
|
||||
if (len != QSE_NULL) *len = QSE_STR_LEN(buf);
|
||||
@ -967,7 +964,7 @@ static qse_char_t* val_real_to_str (
|
||||
qse_size_t tmp_len;
|
||||
qse_str_t out, fbu;
|
||||
|
||||
if (opt & QSE_AWK_VALTOSTR_PRINT)
|
||||
if (opt & QSE_AWK_RTX_VALTOSTR_PRINT)
|
||||
{
|
||||
tmp = run->gbl.ofmt.ptr;
|
||||
tmp_len = run->gbl.ofmt.len;
|
||||
@ -1009,7 +1006,7 @@ static qse_char_t* val_real_to_str (
|
||||
|
||||
if (len != QSE_NULL) *len = tmp_len;
|
||||
}
|
||||
else if (opt & QSE_AWK_VALTOSTR_FIXED)
|
||||
else if (opt & QSE_AWK_RTX_VALTOSTR_FIXED)
|
||||
{
|
||||
QSE_ASSERT (buf != QSE_NULL && len != QSE_NULL);
|
||||
|
||||
@ -1032,7 +1029,7 @@ static qse_char_t* val_real_to_str (
|
||||
}
|
||||
else
|
||||
{
|
||||
if (opt & QSE_AWK_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
if (opt & QSE_AWK_RTX_VALTOSTR_CLEAR) qse_str_clear (buf);
|
||||
|
||||
if (qse_str_ncat (buf, tmp, tmp_len) == (qse_size_t)-1)
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: eio.h 363 2008-09-04 10:58:08Z baconevi $
|
||||
* $Id: val.h 75 2009-02-22 14:10:34Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -23,6 +23,12 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void qse_awk_rtx_freeval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* val,
|
||||
qse_bool_t cache
|
||||
);
|
||||
|
||||
void qse_awk_rtx_freevalchunk (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_chunk_t* chunk
|
||||
|
Reference in New Issue
Block a user