added qse_awk_rtx_makemapvalwithdata().
enhancced qse_awk_rtx_makestrval() and related functions. enhanced the uci module
This commit is contained in:
@ -593,7 +593,7 @@ int Awk::Value::setStr (const char_t* str)
|
||||
int Awk::Value::setStr (Run* r, const char_t* str)
|
||||
{
|
||||
val_t* tmp;
|
||||
tmp = qse_awk_rtx_makestrval0 (r->rtx, str);
|
||||
tmp = qse_awk_rtx_makestrvalwithstr (r->rtx, str);
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
r->awk->retrieveError (r);
|
||||
@ -751,7 +751,7 @@ int Awk::Value::setIndexedStr (const Index& idx, const char_t* str)
|
||||
int Awk::Value::setIndexedStr (Run* r, const Index& idx, const char_t* str)
|
||||
{
|
||||
val_t* tmp;
|
||||
tmp = qse_awk_rtx_makestrval0 (r->rtx, str);
|
||||
tmp = qse_awk_rtx_makestrvalwithstr (r->rtx, str);
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
r->awk->retrieveError (r);
|
||||
|
@ -244,8 +244,8 @@ struct qse_awk_rtx_t
|
||||
qse_size_t stack_limit;
|
||||
int exit_level;
|
||||
|
||||
qse_awk_val_ref_t* fcache[128];
|
||||
qse_size_t fcache_count;
|
||||
qse_awk_val_ref_t* rcache[128];
|
||||
qse_size_t rcache_count;
|
||||
|
||||
#ifdef ENABLE_FEATURE_SCACHE
|
||||
qse_awk_val_str_t* scache
|
||||
|
@ -774,7 +774,7 @@ static int fnc_split (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
QSE_ASSERT ((tok.ptr != QSE_NULL && tok.len > 0) || tok.len == 0);
|
||||
|
||||
/* create the field string */
|
||||
t2 = qse_awk_rtx_makestrval (run, tok.ptr, tok.len);
|
||||
t2 = qse_awk_rtx_makestrvalwithcstr (run, &tok);
|
||||
if (t2 == QSE_NULL) goto oops;
|
||||
|
||||
/* put it into the map */
|
||||
@ -815,9 +815,9 @@ oops:
|
||||
static int fnc_tolower (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
qse_char_t* str;
|
||||
qse_size_t len, i;
|
||||
qse_size_t i;
|
||||
qse_awk_val_t* a0, * r;
|
||||
qse_xstr_t str;
|
||||
|
||||
nargs = qse_awk_rtx_getnargs (run);
|
||||
QSE_ASSERT (nargs == 1);
|
||||
@ -826,25 +826,25 @@ static int fnc_tolower (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
|
||||
if (a0->type == QSE_AWK_VAL_STR)
|
||||
{
|
||||
str = ((qse_awk_val_str_t*)a0)->val.ptr;
|
||||
len = ((qse_awk_val_str_t*)a0)->val.len;
|
||||
str.ptr = ((qse_awk_val_str_t*)a0)->val.ptr;
|
||||
str.len = ((qse_awk_val_str_t*)a0)->val.len;
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtocpldup (run, a0, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
str.ptr = qse_awk_rtx_valtocpldup (run, a0, &str.len);
|
||||
if (str.ptr == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++) str[i] = QSE_AWK_TOLOWER (run->awk, str[i]);
|
||||
for (i = 0; i < str.len; i++) str.ptr[i] = QSE_AWK_TOLOWER (run->awk, str.ptr[i]);
|
||||
|
||||
r = qse_awk_rtx_makestrval (run, str, len);
|
||||
r = qse_awk_rtx_makestrvalwithcstr (run, &str);
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str.ptr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str.ptr);
|
||||
qse_awk_rtx_setretval (run, r);
|
||||
return 0;
|
||||
}
|
||||
@ -852,9 +852,9 @@ static int fnc_tolower (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
static int fnc_toupper (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
qse_size_t nargs;
|
||||
qse_char_t* str;
|
||||
qse_size_t len, i;
|
||||
qse_size_t i;
|
||||
qse_awk_val_t* a0, * r;
|
||||
qse_xstr_t str;
|
||||
|
||||
nargs = qse_awk_rtx_getnargs (run);
|
||||
QSE_ASSERT (nargs == 1);
|
||||
@ -863,25 +863,25 @@ static int fnc_toupper (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
|
||||
if (a0->type == QSE_AWK_VAL_STR)
|
||||
{
|
||||
str = ((qse_awk_val_str_t*)a0)->val.ptr;
|
||||
len = ((qse_awk_val_str_t*)a0)->val.len;
|
||||
str.ptr = ((qse_awk_val_str_t*)a0)->val.ptr;
|
||||
str.len = ((qse_awk_val_str_t*)a0)->val.len;
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtocpldup (run, a0, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
str.ptr = qse_awk_rtx_valtocpldup (run, a0, &str.len);
|
||||
if (str.ptr == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++) str[i] = QSE_AWK_TOUPPER (run->awk, str[i]);
|
||||
for (i = 0; i < str.len; i++) str.ptr[i] = QSE_AWK_TOUPPER (run->awk, str.ptr[i]);
|
||||
|
||||
r = qse_awk_rtx_makestrval (run, str, len);
|
||||
r = qse_awk_rtx_makestrvalwithcstr (run, &str);
|
||||
if (r == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str.ptr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str);
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str.ptr);
|
||||
qse_awk_rtx_setretval (run, r);
|
||||
return 0;
|
||||
}
|
||||
@ -1136,8 +1136,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
if (a2 == QSE_NULL)
|
||||
{
|
||||
int n;
|
||||
n = qse_awk_rtx_setrec (run, 0,
|
||||
QSE_STR_PTR(&new), QSE_STR_LEN(&new));
|
||||
n = qse_awk_rtx_setrec (run, 0, QSE_STR_CSTR(&new));
|
||||
if (n <= -1) goto oops;
|
||||
}
|
||||
else if (((qse_awk_val_ref_t*)a2)->id == QSE_AWK_VAL_REF_POS)
|
||||
@ -1146,14 +1145,13 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
|
||||
n = qse_awk_rtx_setrec (
|
||||
run, (qse_size_t)((qse_awk_val_ref_t*)a2)->adr,
|
||||
QSE_STR_PTR(&new), QSE_STR_LEN(&new));
|
||||
QSE_STR_CSTR(&new));
|
||||
|
||||
if (n <= -1) goto oops;
|
||||
}
|
||||
else
|
||||
{
|
||||
v = qse_awk_rtx_makestrval (run,
|
||||
QSE_STR_PTR(&new), QSE_STR_LEN(&new));
|
||||
v = qse_awk_rtx_makestrvalwithcstr (run, QSE_STR_CSTR(&new));
|
||||
if (v == QSE_NULL) goto oops;
|
||||
|
||||
qse_awk_rtx_refdownval (run, *a2_ref);
|
||||
@ -1390,12 +1388,10 @@ static int fnc_sprintf (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, cs0.ptr);
|
||||
if (x.ptr == QSE_NULL) goto oops;
|
||||
|
||||
/*a0 = qse_awk_rtx_makestrval_nodup (run, x.ptr, x.len);*/
|
||||
a0 = qse_awk_rtx_makestrval (run, x.ptr, x.len);
|
||||
a0 = qse_awk_rtx_makestrvalwithcstr (run, &x);
|
||||
if (a0 == QSE_NULL) goto oops;
|
||||
|
||||
qse_str_fini (&fbu);
|
||||
/*qse_str_yield (&out, QSE_NULL, 0);*/
|
||||
qse_str_fini (&out);
|
||||
qse_awk_rtx_setretval (run, a0);
|
||||
return 0;
|
||||
|
@ -137,35 +137,17 @@ qse_awk_rtx_t* qse_awk_rtx_openmpi (
|
||||
case 0: /* MPI_HOST */
|
||||
{
|
||||
char buf[MPI_MAX_PROCESSOR_NAME];
|
||||
int len;
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
/* nothing */
|
||||
#else
|
||||
qse_mmgr_t* mmgr;
|
||||
qse_char_t* tmp;
|
||||
#endif
|
||||
if (MPI_Get_processor_name(buf, &len) != MPI_SUCCESS)
|
||||
qse_mcstr_t mcstr;
|
||||
|
||||
if (MPI_Get_processor_name(buf, &mcstr.len) != MPI_SUCCESS)
|
||||
{
|
||||
qse_awk_rtx_close (rtx);
|
||||
qse_awk_seterrnum (awk, QSE_AWK_ESYSERR, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
v_tmp = qse_awk_rtx_makestrval (rtx, buf, len);
|
||||
#else
|
||||
|
||||
mmgr = qse_awk_getmmgr(awk);
|
||||
tmp = qse_mbstowcsdup (buf, QSE_NULL, mmgr);
|
||||
if (tmp == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_close (rtx);
|
||||
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v_tmp = qse_awk_rtx_makestrval0 (rtx, tmp);
|
||||
QSE_MMGR_FREE (mmgr, tmp);
|
||||
#endif
|
||||
|
||||
mcstr.ptr = buf;
|
||||
v_tmp = qse_awk_rtx_makestrvalwithmcstr (rtx, &mcstr);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -22,19 +22,17 @@
|
||||
|
||||
static int split_record (qse_awk_rtx_t* run);
|
||||
static int recomp_record_fields (
|
||||
qse_awk_rtx_t* run, qse_size_t lv,
|
||||
const qse_char_t* str, qse_size_t len);
|
||||
qse_awk_rtx_t* run, qse_size_t lv, const qse_cstr_t* str);
|
||||
|
||||
int qse_awk_rtx_setrec (
|
||||
qse_awk_rtx_t* run, qse_size_t idx,
|
||||
const qse_char_t* str, qse_size_t len)
|
||||
qse_awk_rtx_t* run, qse_size_t idx, const qse_cstr_t* str)
|
||||
{
|
||||
qse_awk_val_t* v;
|
||||
|
||||
if (idx == 0)
|
||||
{
|
||||
if (str == QSE_STR_PTR(&run->inrec.line) &&
|
||||
len == QSE_STR_LEN(&run->inrec.line))
|
||||
if (str->ptr == QSE_STR_PTR(&run->inrec.line) &&
|
||||
str->len == QSE_STR_LEN(&run->inrec.line))
|
||||
{
|
||||
if (qse_awk_rtx_clrrec (run, 1) == -1) return -1;
|
||||
}
|
||||
@ -42,7 +40,7 @@ int qse_awk_rtx_setrec (
|
||||
{
|
||||
if (qse_awk_rtx_clrrec (run, 0) == -1) return -1;
|
||||
|
||||
if (qse_str_ncpy (&run->inrec.line, str, len) == (qse_size_t)-1)
|
||||
if (qse_str_ncpy (&run->inrec.line, str->ptr, str->len) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_rtx_clrrec (run, 0);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
@ -50,7 +48,7 @@ int qse_awk_rtx_setrec (
|
||||
}
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makenstrval (run, str, len);
|
||||
v = qse_awk_rtx_makenstrvalwithcstr (run, str);
|
||||
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
@ -72,16 +70,14 @@ int qse_awk_rtx_setrec (
|
||||
}
|
||||
else
|
||||
{
|
||||
if (recomp_record_fields (run, idx, str, len) == -1)
|
||||
if (recomp_record_fields (run, idx, str) <= -1)
|
||||
{
|
||||
qse_awk_rtx_clrrec (run, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* recompose $0 */
|
||||
v = qse_awk_rtx_makestrval (run,
|
||||
QSE_STR_PTR(&run->inrec.line),
|
||||
QSE_STR_LEN(&run->inrec.line));
|
||||
v = qse_awk_rtx_makestrvalwithcstr (run, QSE_STR_CSTR(&run->inrec.line));
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_clrrec (run, 0);
|
||||
@ -328,14 +324,11 @@ static int split_record (qse_awk_rtx_t* rtx)
|
||||
|
||||
rtx->inrec.flds[rtx->inrec.nflds].ptr = tok.ptr;
|
||||
rtx->inrec.flds[rtx->inrec.nflds].len = tok.len;
|
||||
|
||||
rtx->inrec.flds[rtx->inrec.nflds].val =
|
||||
qse_awk_rtx_makenstrval (rtx, tok.ptr, tok.len);
|
||||
rtx->inrec.flds[rtx->inrec.nflds].val = qse_awk_rtx_makenstrvalwithcstr (rtx, &tok);
|
||||
|
||||
if (rtx->inrec.flds[rtx->inrec.nflds].val == QSE_NULL)
|
||||
{
|
||||
if (fs_free != QSE_NULL)
|
||||
QSE_AWK_FREE (rtx->awk, fs_free);
|
||||
if (fs_free) QSE_AWK_FREE (rtx->awk, fs_free);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -402,8 +395,7 @@ int qse_awk_rtx_clrrec (qse_awk_rtx_t* run, int skip_inrec_line)
|
||||
}
|
||||
|
||||
static int recomp_record_fields (
|
||||
qse_awk_rtx_t* run, qse_size_t lv,
|
||||
const qse_char_t* str, qse_size_t len)
|
||||
qse_awk_rtx_t* run, qse_size_t lv, const qse_cstr_t* str)
|
||||
{
|
||||
qse_awk_val_t* v;
|
||||
qse_size_t max, i, nflds;
|
||||
@ -444,10 +436,7 @@ static int recomp_record_fields (
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
if (qse_str_ncat (
|
||||
&run->inrec.line,
|
||||
run->gbl.ofs.ptr,
|
||||
run->gbl.ofs.len) == (qse_size_t)-1)
|
||||
if (qse_str_ncat (&run->inrec.line, run->gbl.ofs.ptr, run->gbl.ofs.len) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return -1;
|
||||
@ -461,16 +450,15 @@ static int recomp_record_fields (
|
||||
run->inrec.flds[i].ptr =
|
||||
QSE_STR_PTR(&run->inrec.line) +
|
||||
QSE_STR_LEN(&run->inrec.line);
|
||||
run->inrec.flds[i].len = len;
|
||||
run->inrec.flds[i].len = str->len;
|
||||
|
||||
if (qse_str_ncat (
|
||||
&run->inrec.line, str, len) == (qse_size_t)-1)
|
||||
if (qse_str_ncat (&run->inrec.line, str->ptr, str->len) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
tmp = qse_awk_rtx_makestrval (run, str,len);
|
||||
tmp = qse_awk_rtx_makestrvalwithcstr (run, str);
|
||||
if (tmp == QSE_NULL) return -1;
|
||||
|
||||
if (i < nflds)
|
||||
@ -487,8 +475,7 @@ static int recomp_record_fields (
|
||||
QSE_STR_LEN(&run->inrec.line);
|
||||
run->inrec.flds[i].len = 0;
|
||||
|
||||
if (qse_str_cat (
|
||||
&run->inrec.line, QSE_T("")) == (qse_size_t)-1)
|
||||
if (qse_str_cat (&run->inrec.line, QSE_T("")) == (qse_size_t)-1)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return -1;
|
||||
|
@ -1093,9 +1093,9 @@ static void fini_rtx (qse_awk_rtx_t* rtx, int fini_globals)
|
||||
qse_htb_close (rtx->named);
|
||||
|
||||
/* destroy values in free list */
|
||||
while (rtx->fcache_count > 0)
|
||||
while (rtx->rcache_count > 0)
|
||||
{
|
||||
qse_awk_val_ref_t* tmp = rtx->fcache[--rtx->fcache_count];
|
||||
qse_awk_val_ref_t* tmp = rtx->rcache[--rtx->rcache_count];
|
||||
qse_awk_rtx_freeval (rtx, (qse_awk_val_t*)tmp, 0);
|
||||
}
|
||||
|
||||
@ -1240,7 +1240,7 @@ static int defaultify_globals (qse_awk_rtx_t* rtx)
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = qse_awk_rtx_makestrval0 (rtx, gtab[i].str);
|
||||
tmp = qse_awk_rtx_makestrvalwithstr (rtx, gtab[i].str);
|
||||
if (tmp == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -1600,7 +1600,7 @@ qse_awk_val_t* qse_awk_rtx_callwithstrs (
|
||||
|
||||
for (i = 0; i < nargs; i++)
|
||||
{
|
||||
v[i] = qse_awk_rtx_makestrval0 (rtx, args[i]);
|
||||
v[i] = qse_awk_rtx_makestrvalwithstr (rtx, args[i]);
|
||||
if (v[i] == QSE_NULL)
|
||||
{
|
||||
ret = QSE_NULL;
|
||||
@ -3695,7 +3695,7 @@ static qse_awk_val_t* do_assignment_pos (
|
||||
str = out.u.cpldup;
|
||||
}
|
||||
|
||||
n = qse_awk_rtx_setrec (run, (qse_size_t)lv, str.ptr, str.len);
|
||||
n = qse_awk_rtx_setrec (run, (qse_size_t)lv, &str);
|
||||
|
||||
if (val->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str.ptr);
|
||||
|
||||
@ -6456,14 +6456,14 @@ read_console_again:
|
||||
if (p->var == QSE_NULL)
|
||||
{
|
||||
/* set $0 with the input value */
|
||||
x = qse_awk_rtx_setrec (rtx, 0, QSE_STR_PTR(buf), QSE_STR_LEN(buf));
|
||||
x = qse_awk_rtx_setrec (rtx, 0, QSE_STR_CSTR(buf));
|
||||
if (x <= -1) return QSE_NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_awk_val_t* v;
|
||||
|
||||
v = qse_awk_rtx_makestrval (rtx, QSE_STR_PTR(buf), QSE_STR_LEN(buf));
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, QSE_STR_CSTR(buf));
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
ADJERR_LOC (rtx, &nde->loc);
|
||||
@ -6562,7 +6562,7 @@ read_again:
|
||||
}
|
||||
}
|
||||
|
||||
if (qse_awk_rtx_setrec (rtx, 0, QSE_STR_PTR(buf), QSE_STR_LEN(buf)) <= -1 ||
|
||||
if (qse_awk_rtx_setrec (rtx, 0, QSE_STR_CSTR(buf)) <= -1 ||
|
||||
update_fnr (rtx, rtx->gbl.fnr + 1, rtx->gbl.nr + 1) <= -1) return -1;
|
||||
|
||||
return 1;
|
||||
@ -6644,8 +6644,7 @@ static int shorten_record (qse_awk_rtx_t* run, qse_size_t nflds)
|
||||
if (ofs_free != QSE_NULL) QSE_AWK_FREE (run->awk, ofs_free);
|
||||
if (nflds > 1) qse_awk_rtx_refdownval (run, v);
|
||||
|
||||
v = (qse_awk_val_t*) qse_awk_rtx_makestrval (
|
||||
run, QSE_STR_PTR(&tmp), QSE_STR_LEN(&tmp));
|
||||
v = (qse_awk_val_t*) qse_awk_rtx_makestrvalwithcstr (run, QSE_STR_CSTR(&tmp));
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
qse_str_fini (&tmp);
|
||||
|
@ -1620,7 +1620,7 @@ static int build_argcv (
|
||||
qse_awk_rtx_refupval (rtx, v_argv);
|
||||
|
||||
/* make ARGV[0] */
|
||||
v_tmp = qse_awk_rtx_makestrval0 (rtx, id);
|
||||
v_tmp = qse_awk_rtx_makestrvalwithstr (rtx, id);
|
||||
if (v_tmp == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_refdownval (rtx, v_argv);
|
||||
@ -1652,7 +1652,7 @@ static int build_argcv (
|
||||
{
|
||||
for (argc = 1, p = icf; *p; p++, argc++)
|
||||
{
|
||||
v_tmp = qse_awk_rtx_makestrval0 (rtx, *p);
|
||||
v_tmp = qse_awk_rtx_makestrvalwithstr (rtx, *p);
|
||||
if (v_tmp == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_refdownval (rtx, v_argv);
|
||||
@ -1779,7 +1779,7 @@ static int __build_environ (
|
||||
*eq = QSE_WT('=');
|
||||
#endif
|
||||
|
||||
v_tmp = qse_awk_rtx_makestrval0 (rtx, vptr);
|
||||
v_tmp = qse_awk_rtx_makestrvalwithstr (rtx, vptr);
|
||||
if (v_tmp == QSE_NULL)
|
||||
{
|
||||
#if ((defined(QSE_ENV_CHAR_IS_MCHAR) && defined(QSE_CHAR_IS_MCHAR)) || \
|
||||
@ -2461,7 +2461,7 @@ static int fnc_getioattr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
#if defined(QSE_CHAR_IS_WCHAR)
|
||||
else if (qse_strcasecmp (ptr[1], QSE_T("codepage")) == 0)
|
||||
{
|
||||
rv = qse_awk_rtx_makestrval0 (rtx, ioattr->cmgr_name);
|
||||
rv = qse_awk_rtx_makestrvalwithstr (rtx, ioattr->cmgr_name);
|
||||
if (rv == QSE_NULL)
|
||||
{
|
||||
ret = -1;
|
||||
|
@ -19,6 +19,7 @@
|
||||
*/
|
||||
|
||||
#include "awk.h"
|
||||
#include <qse/cmn/mbwc.h>
|
||||
|
||||
#ifdef DEBUG_VAL
|
||||
#include <qse/cmn/stdio.h>
|
||||
@ -64,7 +65,7 @@ qse_awk_val_t* qse_awk_val_one = (qse_awk_val_t*)&awk_int[2];
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makenilval (qse_awk_rtx_t* rtx)
|
||||
{
|
||||
return &awk_nil;
|
||||
return (qse_awk_val_t*)&awk_nil;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makeintval (qse_awk_rtx_t* rtx, qse_long_t v)
|
||||
@ -187,17 +188,109 @@ qse_awk_val_t* qse_awk_rtx_makefltval (qse_awk_rtx_t* rtx, qse_flt_t v)
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval0 (
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithmbs (
|
||||
qse_awk_rtx_t* rtx, const qse_mchar_t* mbs)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
return qse_awk_rtx_makestrval (rtx, mbs, qse_mbslen(mbs));
|
||||
#else
|
||||
qse_awk_val_t* v;
|
||||
qse_wxstr_t tmp;
|
||||
|
||||
tmp.ptr = qse_mbstowcsdup (mbs, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithwcs (
|
||||
qse_awk_rtx_t* rtx, const qse_wchar_t* wcs)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_val_t* v;
|
||||
qse_mxstr_t tmp;
|
||||
|
||||
tmp.ptr = qse_wcstombsdup (wcs, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#else
|
||||
return qse_awk_rtx_makestrval (rtx, wcs, qse_wcslen(wcs));
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithstr (
|
||||
qse_awk_rtx_t* rtx, const qse_char_t* str)
|
||||
{
|
||||
return qse_awk_rtx_makestrval (rtx, str, qse_strlen(str));
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval (
|
||||
qse_awk_rtx_t* rtx, const qse_char_t* str, qse_size_t len)
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithmcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_mcstr_t* mcstr)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
return qse_awk_rtx_makestrvalwithcstr (rtx, mcstr);
|
||||
#else
|
||||
qse_awk_val_t* v;
|
||||
qse_wcstr_t tmp;
|
||||
qse_size_t mbslen;
|
||||
|
||||
mbslen = mcstr->len;
|
||||
tmp.ptr = qse_mbsntowcsdup (mcstr->ptr, &mbslen, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithwcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_wcstr_t* wcstr)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_val_t* v;
|
||||
qse_mcstr_t tmp;
|
||||
qse_size_t wcslen;
|
||||
|
||||
wcslen = wcstr->len;
|
||||
tmp.ptr = qse_wcsntombsdup (wcstr->ptr, &wcslen, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#else
|
||||
return qse_awk_rtx_makestrvalwithcstr (rtx, wcstr);
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_cstr_t* str)
|
||||
{
|
||||
qse_awk_val_str_t* val = QSE_NULL;
|
||||
qse_size_t rlen = len;
|
||||
qse_size_t rlen = str->len;
|
||||
|
||||
#ifdef ENABLE_FEATURE_SCACHE
|
||||
qse_size_t i;
|
||||
@ -217,7 +310,7 @@ qse_awk_val_t* qse_awk_rtx_makestrval (
|
||||
val = (qse_awk_val_str_t*) QSE_AWK_ALLOC (
|
||||
rtx->awk,
|
||||
QSE_SIZEOF(qse_awk_val_str_t) +
|
||||
(rlen+1)*QSE_SIZEOF(qse_char_t));
|
||||
(rlen + 1) * QSE_SIZEOF(qse_char_t));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
@ -230,9 +323,9 @@ init:
|
||||
val->type = QSE_AWK_VAL_STR;
|
||||
val->ref = 0;
|
||||
val->nstr = 0;
|
||||
val->val.len = len;
|
||||
val->val.len = str->len;
|
||||
val->val.ptr = (qse_char_t*)(val + 1);
|
||||
qse_strncpy (val->val.ptr, str, len);
|
||||
qse_strncpy (val->val.ptr, str->ptr, str->len);
|
||||
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (QSE_T("makestrval => %p\n"), val);
|
||||
@ -240,25 +333,13 @@ init:
|
||||
return (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)
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval (
|
||||
qse_awk_rtx_t* rtx, const qse_char_t* str, qse_size_t len)
|
||||
{
|
||||
qse_awk_val_str_t* val;
|
||||
|
||||
val = (qse_awk_val_str_t*) QSE_AWK_ALLOC (
|
||||
rtx->awk, QSE_SIZEOF(qse_awk_val_str_t));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
val->type = QSE_AWK_VAL_STR;
|
||||
val->ref = 0;
|
||||
val->nstr = 0;
|
||||
val->val.len = len;
|
||||
val->val.ptr = str;
|
||||
return (qse_awk_val_t*)val;
|
||||
qse_cstr_t cstr;
|
||||
cstr.ptr = str;
|
||||
cstr.len = len;
|
||||
return qse_awk_rtx_makestrvalwithcstr (rtx, &cstr);
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval2 (
|
||||
@ -311,16 +392,15 @@ init:
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makenstrval (
|
||||
qse_awk_rtx_t* rtx, const qse_char_t* str, qse_size_t len)
|
||||
qse_awk_val_t* qse_awk_rtx_makenstrvalwithcstr (qse_awk_rtx_t* rtx, const qse_cstr_t* str)
|
||||
{
|
||||
int x;
|
||||
qse_awk_val_t* v;
|
||||
qse_long_t l;
|
||||
qse_flt_t r;
|
||||
|
||||
x = qse_awk_rtx_strtonum (rtx, 1, str, len, &l, &r);
|
||||
v = qse_awk_rtx_makestrval (rtx, str, len);
|
||||
x = qse_awk_rtx_strtonum (rtx, 1, str->ptr, str->len, &l, &r);
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, str);
|
||||
|
||||
if (v == QSE_NULL) return QSE_NULL;
|
||||
|
||||
@ -468,6 +548,70 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makemapvalwithdata (qse_awk_rtx_t* rtx, qse_awk_val_map_data_t data[])
|
||||
{
|
||||
qse_awk_val_t* map, * tmp;
|
||||
qse_awk_val_map_data_t* p;
|
||||
|
||||
map = qse_awk_rtx_makemapval (rtx);
|
||||
if (map == QSE_NULL) return QSE_NULL;
|
||||
|
||||
for (p = data; p->key.ptr; p++)
|
||||
{
|
||||
switch (p->type)
|
||||
{
|
||||
case QSE_AWK_VAL_MAP_DATA_INT:
|
||||
tmp = qse_awk_rtx_makeintval (rtx, *(qse_long_t*)p->vptr);
|
||||
break;
|
||||
|
||||
case QSE_AWK_VAL_MAP_DATA_FLT:
|
||||
tmp = qse_awk_rtx_makefltval (rtx, *(qse_flt_t*)p->vptr);
|
||||
break;
|
||||
|
||||
case QSE_AWK_VAL_MAP_DATA_STR:
|
||||
tmp = qse_awk_rtx_makestrvalwithstr (rtx, (qse_char_t*)p->vptr);
|
||||
break;
|
||||
|
||||
case QSE_AWK_VAL_MAP_DATA_MBS:
|
||||
tmp = qse_awk_rtx_makestrvalwithmbs (rtx, (qse_mchar_t*)p->vptr);
|
||||
break;
|
||||
|
||||
case QSE_AWK_VAL_MAP_DATA_WCS:
|
||||
tmp = qse_awk_rtx_makestrvalwithwcs (rtx, (qse_wchar_t*)p->vptr);
|
||||
break;
|
||||
|
||||
case QSE_AWK_VAL_MAP_DATA_XSTR:
|
||||
case QSE_AWK_VAL_MAP_DATA_CSTR:
|
||||
tmp = qse_awk_rtx_makestrvalwithcstr (rtx, (qse_cstr_t*)p->vptr);
|
||||
break;
|
||||
|
||||
case QSE_AWK_VAL_MAP_DATA_MXSTR:
|
||||
case QSE_AWK_VAL_MAP_DATA_MCSTR:
|
||||
tmp = qse_awk_rtx_makestrvalwithmcstr (rtx, (qse_mcstr_t*)p->vptr);
|
||||
break;
|
||||
|
||||
case QSE_AWK_VAL_MAP_DATA_WXSTR:
|
||||
case QSE_AWK_VAL_MAP_DATA_WCSTR:
|
||||
tmp = qse_awk_rtx_makestrvalwithwcstr (rtx, (qse_wcstr_t*)p->vptr);
|
||||
break;
|
||||
|
||||
default:
|
||||
tmp = QSE_NULL;
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_EINVAL, QSE_NULL);
|
||||
break;
|
||||
}
|
||||
|
||||
if (tmp == QSE_NULL || qse_awk_rtx_setmapvalfld (rtx, map, p->key.ptr, p->key.len, tmp) == QSE_NULL)
|
||||
{
|
||||
if (tmp) qse_awk_rtx_freeval (rtx, tmp, 1);
|
||||
qse_awk_rtx_freeval (rtx, map, 1);
|
||||
return QSE_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_setmapvalfld (
|
||||
qse_awk_rtx_t* rtx, qse_awk_val_t* map,
|
||||
const qse_char_t* kptr, qse_size_t klen, qse_awk_val_t* v)
|
||||
@ -554,9 +698,9 @@ qse_awk_val_t* qse_awk_rtx_makerefval (
|
||||
{
|
||||
qse_awk_val_ref_t* val;
|
||||
|
||||
if (rtx->fcache_count > 0)
|
||||
if (rtx->rcache_count > 0)
|
||||
{
|
||||
val = rtx->fcache[--rtx->fcache_count];
|
||||
val = rtx->rcache[--rtx->rcache_count];
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -675,9 +819,9 @@ void qse_awk_rtx_freeval (
|
||||
|
||||
case QSE_AWK_VAL_REF:
|
||||
{
|
||||
if (cache && rtx->fcache_count < QSE_COUNTOF(rtx->fcache))
|
||||
if (cache && rtx->rcache_count < QSE_COUNTOF(rtx->rcache))
|
||||
{
|
||||
rtx->fcache[rtx->fcache_count++] = (qse_awk_val_ref_t*)val;
|
||||
rtx->rcache[rtx->rcache_count++] = (qse_awk_val_ref_t*)val;
|
||||
}
|
||||
else QSE_AWK_FREE (rtx->awk, val);
|
||||
break;
|
||||
|
@ -245,6 +245,40 @@ int qse_mbsntowcsnuptowithcmgr (
|
||||
return ret;
|
||||
}
|
||||
|
||||
static qse_wchar_t* mbsn_to_wcs_dup_with_cmgr (
|
||||
const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen,
|
||||
qse_mmgr_t* mmgr, qse_cmgr_t* cmgr, int all)
|
||||
{
|
||||
qse_size_t ml, wl;
|
||||
qse_wchar_t* wcs;
|
||||
|
||||
ml = *mbslen;
|
||||
if (mbsn_to_wcsn_with_cmgr (
|
||||
mbs, &ml, QSE_NULL, &wl, cmgr, all) <= -1) return QSE_NULL;
|
||||
|
||||
wl++; /* for terminating null */
|
||||
wcs = QSE_MMGR_ALLOC (mmgr, wl * QSE_SIZEOF(*wcs));
|
||||
if (wcs == QSE_NULL) return QSE_NULL;
|
||||
|
||||
mbsn_to_wcsn_with_cmgr (mbs, mbslen, wcs, &wl, cmgr, all);
|
||||
wcs[wl] = QSE_WT('\0');
|
||||
|
||||
if (wcslen) *wcslen = wl;
|
||||
return wcs;
|
||||
}
|
||||
|
||||
qse_wchar_t* qse_mbsntowcsdupwithcmgr (
|
||||
const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr)
|
||||
{
|
||||
return mbsn_to_wcs_dup_with_cmgr (mbs, mbslen, wcslen, mmgr, cmgr, 0);
|
||||
}
|
||||
|
||||
qse_wchar_t* qse_mbsntowcsalldupwithcmgr (
|
||||
const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr)
|
||||
{
|
||||
return mbsn_to_wcs_dup_with_cmgr (mbs, mbslen, wcslen, mmgr, cmgr, 1);
|
||||
}
|
||||
|
||||
static qse_wchar_t* mbs_to_wcs_dup_with_cmgr (
|
||||
const qse_mchar_t* mbs, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr, int all)
|
||||
{
|
||||
|
@ -183,6 +183,18 @@ qse_wchar_t* qse_mbstowcsalldup (
|
||||
return qse_mbstowcsalldupwithcmgr (mbs, wcslen, mmgr, dfl_cmgr);
|
||||
}
|
||||
|
||||
qse_wchar_t* qse_mbsntowcsdup (
|
||||
const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen, qse_mmgr_t* mmgr)
|
||||
{
|
||||
return qse_mbsntowcsdupwithcmgr (mbs, mbslen, wcslen, mmgr, dfl_cmgr);
|
||||
}
|
||||
|
||||
qse_wchar_t* qse_mbsntowcsalldup (
|
||||
const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen, qse_mmgr_t* mmgr)
|
||||
{
|
||||
return qse_mbsntowcsalldupwithcmgr (mbs, mbslen, wcslen, mmgr, dfl_cmgr);
|
||||
}
|
||||
|
||||
qse_wchar_t* qse_mbsatowcsdup (
|
||||
const qse_mchar_t* mbs[], qse_size_t* wcslen, qse_mmgr_t* mmgr)
|
||||
{
|
||||
|
Reference in New Issue
Block a user