* renamed map to htb
* added qse_awk_findgbl() * added Awk::findGlobal() * began working on red-black tree
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: Awk.cpp 318 2009-12-18 12:34:42Z hyunghwan.chung $
|
||||
* $Id: Awk.cpp 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -605,7 +605,7 @@ int Awk::Value::setIndexedVal (Run* r, const Index& idx, val_t* v)
|
||||
qse_awk_rtx_refupval (r->rtx, v);
|
||||
|
||||
/* update the map with a given value */
|
||||
pair_t* pair = qse_map_upsert (
|
||||
pair_t* pair = qse_htb_upsert (
|
||||
((qse_awk_val_map_t*)map)->map,
|
||||
(char_t*)idx.ptr, idx.len, v, 0);
|
||||
if (pair == QSE_NULL)
|
||||
@ -640,7 +640,7 @@ int Awk::Value::setIndexedVal (Run* r, const Index& idx, val_t* v)
|
||||
|
||||
qse_awk_rtx_refupval (r->rtx, v);
|
||||
|
||||
pair_t* pair = qse_map_upsert (
|
||||
pair_t* pair = qse_htb_upsert (
|
||||
((qse_awk_val_map_t*)val)->map,
|
||||
(char_t*)idx.ptr, idx.len, v, 0);
|
||||
if (pair == QSE_NULL)
|
||||
@ -768,7 +768,7 @@ int Awk::Value::getIndexed (const Index& idx, Value* v) const
|
||||
|
||||
// get the value from the map.
|
||||
qse_awk_val_map_t* m = (qse_awk_val_map_t*)val;
|
||||
pair_t* pair = qse_map_search (m->map, idx.ptr, idx.len);
|
||||
pair_t* pair = qse_htb_search (m->map, idx.ptr, idx.len);
|
||||
|
||||
// the key is not found. it is not an error. v is just nil
|
||||
if (pair == QSE_NULL)
|
||||
@ -778,7 +778,7 @@ int Awk::Value::getIndexed (const Index& idx, Value* v) const
|
||||
}
|
||||
|
||||
// if v.set fails, it should return an error
|
||||
return v->setVal (run, (val_t*)QSE_MAP_VPTR(pair));
|
||||
return v->setVal (run, (val_t*)QSE_HTB_VPTR(pair));
|
||||
}
|
||||
|
||||
Awk::Value::IndexIterator Awk::Value::getFirstIndex (Index* idx) const
|
||||
@ -789,11 +789,11 @@ Awk::Value::IndexIterator Awk::Value::getFirstIndex (Index* idx) const
|
||||
|
||||
size_t buckno;
|
||||
qse_awk_val_map_t* m = (qse_awk_val_map_t*)val;
|
||||
pair_t* pair = qse_map_getfirstpair (m->map, &buckno);
|
||||
pair_t* pair = qse_htb_getfirstpair (m->map, &buckno);
|
||||
if (pair == QSE_NULL) return IndexIterator::END; // no more key
|
||||
|
||||
idx->ptr = (const char_t*)QSE_MAP_KPTR(pair);
|
||||
idx->len = QSE_MAP_KLEN(pair);
|
||||
idx->ptr = (const char_t*)QSE_HTB_KPTR(pair);
|
||||
idx->len = QSE_HTB_KLEN(pair);
|
||||
|
||||
return IndexIterator (pair, buckno);
|
||||
}
|
||||
@ -810,11 +810,11 @@ Awk::Value::IndexIterator Awk::Value::getNextIndex (
|
||||
pair_t* pair = (pair_t*)iter.pair;
|
||||
size_t buckno = iter.buckno;
|
||||
|
||||
pair = qse_map_getnextpair (m->map, pair, &buckno);
|
||||
pair = qse_htb_getnextpair (m->map, pair, &buckno);
|
||||
if (pair == QSE_NULL) return IndexIterator::END;
|
||||
|
||||
idx->ptr = (const char_t*)QSE_MAP_KPTR(pair);
|
||||
idx->len = QSE_MAP_KLEN(pair);
|
||||
idx->ptr = (const char_t*)QSE_HTB_KPTR(pair);
|
||||
idx->len = QSE_HTB_KLEN(pair);
|
||||
|
||||
return IndexIterator (pair, buckno);
|
||||
}
|
||||
@ -829,12 +829,12 @@ int Awk::Argument::getFirstIndex (Awk::Argument& val) const
|
||||
|
||||
qse_size_t buckno;
|
||||
qse_awk_val_map_t* m = (qse_awk_val_map_t*)this->val;
|
||||
pair_t* pair = qse_map_getfirstpair (m->map, &buckno);
|
||||
pair_t* pair = qse_htb_getfirstpair (m->map, &buckno);
|
||||
if (pair == QSE_NULL) return 0; // no more key
|
||||
|
||||
if (val.init (
|
||||
(qse_char_t*)QSE_MAP_KPTR(pair),
|
||||
QSE_MAP_KLEN(pair)) == -1) return -1;
|
||||
(qse_char_t*)QSE_HTB_KPTR(pair),
|
||||
QSE_HTB_KLEN(pair)) == -1) return -1;
|
||||
|
||||
// reuse the string field as an interator.
|
||||
this->str.ptr = (char_t*)pair;
|
||||
@ -855,12 +855,12 @@ int Awk::Argument::getNextIndex (Awk::Argument& val) const
|
||||
pair_t* pair = (pair_t*)this->str.ptr;
|
||||
qse_size_t buckno = this->str.len;
|
||||
|
||||
pair = qse_map_getnextpair (m->map, pair, &buckno);
|
||||
pair = qse_htb_getnextpair (m->map, pair, &buckno);
|
||||
if (pair == QSE_NULL) return 0;
|
||||
|
||||
if (val.init (
|
||||
(qse_char_t*)QSE_MAP_KPTR(pair),
|
||||
QSE_MAP_KLEN(pair)) == -1) return -1;
|
||||
(qse_char_t*)QSE_HTB_KPTR(pair),
|
||||
QSE_HTB_KLEN(pair)) == -1) return -1;
|
||||
|
||||
// reuse the string field as an interator.
|
||||
this->str.ptr = (char_t*)pair;
|
||||
@ -1099,7 +1099,7 @@ void Awk::retrieveError (Run* run)
|
||||
}
|
||||
|
||||
static void free_function_map_value (
|
||||
Awk::map_t* map, void* dptr, Awk::size_t dlen)
|
||||
Awk::htb_t* map, void* dptr, Awk::size_t dlen)
|
||||
{
|
||||
Awk* awk = *(Awk**) QSE_XTN (map);
|
||||
qse_awk_free ((Awk::awk_t*)*awk, dptr);
|
||||
@ -1127,7 +1127,7 @@ int Awk::open ()
|
||||
dflerrstr = qse_awk_geterrstr (awk);
|
||||
qse_awk_seterrstr (awk, xerrstr);
|
||||
|
||||
functionMap = qse_map_open (
|
||||
functionMap = qse_htb_open (
|
||||
qse_awk_getmmgr(awk), QSE_SIZEOF(this), 512, 70);
|
||||
if (functionMap == QSE_NULL)
|
||||
{
|
||||
@ -1139,9 +1139,9 @@ int Awk::open ()
|
||||
}
|
||||
|
||||
*(Awk**)QSE_XTN(functionMap) = this;
|
||||
qse_map_setcopier (functionMap, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (functionMap, QSE_MAP_VAL, free_function_map_value);
|
||||
qse_map_setscale (functionMap, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setcopier (functionMap, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setfreeer (functionMap, QSE_HTB_VAL, free_function_map_value);
|
||||
qse_htb_setscale (functionMap, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1153,7 +1153,7 @@ void Awk::close ()
|
||||
|
||||
if (functionMap != QSE_NULL)
|
||||
{
|
||||
qse_map_close (functionMap);
|
||||
qse_htb_close (functionMap);
|
||||
functionMap = QSE_NULL;
|
||||
}
|
||||
|
||||
@ -1327,7 +1327,7 @@ int Awk::dispatch_function (Run* run, const cstr_t* name)
|
||||
{
|
||||
pair_t* pair;
|
||||
|
||||
pair = qse_map_search (functionMap, name->ptr, name->len);
|
||||
pair = qse_htb_search (functionMap, name->ptr, name->len);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
run->setError (QSE_AWK_EFUNNF, name);
|
||||
@ -1335,7 +1335,7 @@ int Awk::dispatch_function (Run* run, const cstr_t* name)
|
||||
}
|
||||
|
||||
FunctionHandler handler;
|
||||
handler = *(FunctionHandler*)QSE_MAP_VPTR(pair);
|
||||
handler = *(FunctionHandler*)QSE_HTB_VPTR(pair);
|
||||
|
||||
size_t i, nargs = qse_awk_rtx_getnargs(run->rtx);
|
||||
|
||||
@ -1491,6 +1491,14 @@ int Awk::deleteGlobal (const char_t* name)
|
||||
return n;
|
||||
}
|
||||
|
||||
int Awk::findGlobal (const char_t* name)
|
||||
{
|
||||
QSE_ASSERT (awk != QSE_NULL);
|
||||
int n = qse_awk_findgbl (awk, name, qse_strlen(name));
|
||||
if (n <= -1) retrieveError ();
|
||||
return n;
|
||||
}
|
||||
|
||||
int Awk::setGlobal (int id, const Value& v)
|
||||
{
|
||||
QSE_ASSERT (awk != QSE_NULL);
|
||||
@ -1552,7 +1560,7 @@ int Awk::addFunction (
|
||||
return -1;
|
||||
}
|
||||
|
||||
pair_t* pair = qse_map_upsert (
|
||||
pair_t* pair = qse_htb_upsert (
|
||||
functionMap, (char_t*)name, nameLen, tmp, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
@ -1573,7 +1581,7 @@ int Awk::deleteFunction (const char_t* name)
|
||||
size_t nameLen = qse_strlen(name);
|
||||
|
||||
int n = qse_awk_delfnc (awk, name, nameLen);
|
||||
if (n == 0) qse_map_delete (functionMap, name, nameLen);
|
||||
if (n == 0) qse_htb_delete (functionMap, name, nameLen);
|
||||
else retrieveError ();
|
||||
|
||||
return n;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: StdAwk.cpp 318 2009-12-18 12:34:42Z hyunghwan.chung $
|
||||
* $Id: StdAwk.cpp 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -450,8 +450,8 @@ int StdAwk::open_console_in (Console& io)
|
||||
qse_sio_t* sio;
|
||||
const qse_char_t* file;
|
||||
qse_awk_val_t* argv;
|
||||
qse_map_t* map;
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_t* map;
|
||||
qse_htb_pair_t* pair;
|
||||
qse_char_t ibuf[128];
|
||||
qse_size_t ibuflen;
|
||||
qse_awk_val_t* v;
|
||||
@ -512,10 +512,10 @@ int StdAwk::open_console_in (Console& io)
|
||||
ibuf, QSE_COUNTOF(ibuf)
|
||||
);
|
||||
|
||||
pair = qse_map_search (map, ibuf, ibuflen);
|
||||
pair = qse_htb_search (map, ibuf, ibuflen);
|
||||
QSE_ASSERT (pair != QSE_NULL);
|
||||
|
||||
v = (qse_awk_val_t*)QSE_MAP_VPTR(pair);
|
||||
v = (qse_awk_val_t*)QSE_HTB_VPTR(pair);
|
||||
QSE_ASSERT (v != QSE_NULL);
|
||||
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.c 287 2009-09-15 10:01:02Z hyunghwan.chung $
|
||||
* $Id: awk.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -22,7 +22,7 @@
|
||||
|
||||
QSE_IMPLEMENT_COMMON_FUNCTIONS (awk)
|
||||
|
||||
static void free_fun (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
static void free_fun (qse_htb_t* map, void* vptr, qse_size_t vlen)
|
||||
{
|
||||
qse_awk_t* awk = *(qse_awk_t**)QSE_XTN(map);
|
||||
qse_awk_fun_t* f = (qse_awk_fun_t*)vptr;
|
||||
@ -34,7 +34,7 @@ static void free_fun (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
QSE_AWK_FREE (awk, f);
|
||||
}
|
||||
|
||||
static void free_fnc (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
static void free_fnc (qse_htb_t* map, void* vptr, qse_size_t vlen)
|
||||
{
|
||||
qse_awk_t* awk = *(qse_awk_t**)QSE_XTN(map);
|
||||
qse_awk_fnc_t* f = (qse_awk_fnc_t*)vptr;
|
||||
@ -113,50 +113,50 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_awk_prm_t* prm)
|
||||
if (init_token (mmgr, &awk->tok) == -1) goto oops;
|
||||
if (init_token (mmgr, &awk->ntok) == -1) goto oops;
|
||||
|
||||
awk->wtab = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
awk->wtab = qse_htb_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->wtab == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_XTN(awk->wtab) = awk;
|
||||
qse_map_setcopier (awk->wtab, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setcopier (awk->wtab, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->wtab, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_map_setscale (awk->wtab, QSE_MAP_VAL, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setcopier (awk->wtab, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setcopier (awk->wtab, QSE_HTB_VAL, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setscale (awk->wtab, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setscale (awk->wtab, QSE_HTB_VAL, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->rwtab = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
awk->rwtab = qse_htb_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->rwtab == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_XTN(awk->rwtab) = awk;
|
||||
qse_map_setcopier (awk->rwtab, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setcopier (awk->rwtab, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->rwtab, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_map_setscale (awk->rwtab, QSE_MAP_VAL, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setcopier (awk->rwtab, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setcopier (awk->rwtab, QSE_HTB_VAL, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setscale (awk->rwtab, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setscale (awk->rwtab, QSE_HTB_VAL, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->sio.names = qse_map_open (mmgr, QSE_SIZEOF(awk), 128, 70);
|
||||
awk->sio.names = qse_htb_open (mmgr, QSE_SIZEOF(awk), 128, 70);
|
||||
if (awk->sio.names == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_XTN(awk->sio.names) = awk;
|
||||
qse_map_setcopier (awk->sio.names, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->sio.names, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setcopier (awk->sio.names, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setscale (awk->sio.names, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
awk->sio.inp = &awk->sio.arg;
|
||||
|
||||
/* TODO: initial map size?? */
|
||||
awk->tree.funs = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
awk->tree.funs = qse_htb_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->tree.funs == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_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));
|
||||
qse_htb_setcopier (awk->tree.funs, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setfreeer (awk->tree.funs, QSE_HTB_VAL, free_fun);
|
||||
qse_htb_setscale (awk->tree.funs, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->parse.funs = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
awk->parse.funs = qse_htb_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
if (awk->parse.funs == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_XTN(awk->parse.funs) = awk;
|
||||
qse_map_setcopier (awk->parse.funs, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->parse.funs, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setcopier (awk->parse.funs, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setscale (awk->parse.funs, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->parse.named = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
awk->parse.named = qse_htb_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
if (awk->parse.named == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_XTN(awk->parse.named) = awk;
|
||||
qse_map_setcopier (
|
||||
awk->parse.named, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (
|
||||
awk->parse.named, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setcopier (
|
||||
awk->parse.named, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setscale (
|
||||
awk->parse.named, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->parse.gbls = qse_lda_open (mmgr, QSE_SIZEOF(awk), 128);
|
||||
awk->parse.lcls = qse_lda_open (mmgr, QSE_SIZEOF(awk), 64);
|
||||
@ -197,28 +197,28 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_awk_prm_t* prm)
|
||||
awk->tree.chain_size = 0;
|
||||
|
||||
awk->fnc.sys = QSE_NULL;
|
||||
awk->fnc.user = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
awk->fnc.user = qse_htb_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->fnc.user == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)QSE_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));
|
||||
qse_htb_setcopier (awk->fnc.user, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setfreeer (awk->fnc.user, QSE_HTB_VAL, free_fnc);
|
||||
qse_htb_setscale (awk->fnc.user, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
if (qse_awk_initgbls (awk) <= -1) goto oops;
|
||||
|
||||
return awk;
|
||||
|
||||
oops:
|
||||
if (awk->fnc.user) qse_map_close (awk->fnc.user);
|
||||
if (awk->fnc.user) qse_htb_close (awk->fnc.user);
|
||||
if (awk->parse.params) qse_lda_close (awk->parse.params);
|
||||
if (awk->parse.lcls) qse_lda_close (awk->parse.lcls);
|
||||
if (awk->parse.gbls) qse_lda_close (awk->parse.gbls);
|
||||
if (awk->parse.named) qse_map_close (awk->parse.named);
|
||||
if (awk->parse.funs) qse_map_close (awk->parse.funs);
|
||||
if (awk->tree.funs) qse_map_close (awk->tree.funs);
|
||||
if (awk->sio.names) qse_map_close (awk->sio.names);
|
||||
if (awk->rwtab) qse_map_close (awk->rwtab);
|
||||
if (awk->wtab) qse_map_close (awk->wtab);
|
||||
if (awk->parse.named) qse_htb_close (awk->parse.named);
|
||||
if (awk->parse.funs) qse_htb_close (awk->parse.funs);
|
||||
if (awk->tree.funs) qse_htb_close (awk->tree.funs);
|
||||
if (awk->sio.names) qse_htb_close (awk->sio.names);
|
||||
if (awk->rwtab) qse_htb_close (awk->rwtab);
|
||||
if (awk->wtab) qse_htb_close (awk->wtab);
|
||||
fini_token (&awk->ntok);
|
||||
fini_token (&awk->tok);
|
||||
fini_token (&awk->ptok);
|
||||
@ -231,19 +231,19 @@ int qse_awk_close (qse_awk_t* awk)
|
||||
{
|
||||
if (qse_awk_clear (awk) <= -1) return -1;
|
||||
/*qse_awk_clrfnc (awk);*/
|
||||
qse_map_close (awk->fnc.user);
|
||||
qse_htb_close (awk->fnc.user);
|
||||
|
||||
qse_lda_close (awk->parse.params);
|
||||
qse_lda_close (awk->parse.lcls);
|
||||
qse_lda_close (awk->parse.gbls);
|
||||
qse_map_close (awk->parse.named);
|
||||
qse_map_close (awk->parse.funs);
|
||||
qse_htb_close (awk->parse.named);
|
||||
qse_htb_close (awk->parse.funs);
|
||||
|
||||
qse_map_close (awk->tree.funs);
|
||||
qse_map_close (awk->sio.names);
|
||||
qse_htb_close (awk->tree.funs);
|
||||
qse_htb_close (awk->sio.names);
|
||||
|
||||
qse_map_close (awk->rwtab);
|
||||
qse_map_close (awk->wtab);
|
||||
qse_htb_close (awk->rwtab);
|
||||
qse_htb_close (awk->wtab);
|
||||
|
||||
fini_token (&awk->ntok);
|
||||
fini_token (&awk->tok);
|
||||
@ -271,8 +271,8 @@ int qse_awk_clear (qse_awk_t* awk)
|
||||
|
||||
qse_lda_clear (awk->parse.lcls);
|
||||
qse_lda_clear (awk->parse.params);
|
||||
qse_map_clear (awk->parse.named);
|
||||
qse_map_clear (awk->parse.funs);
|
||||
qse_htb_clear (awk->parse.named);
|
||||
qse_htb_clear (awk->parse.funs);
|
||||
|
||||
awk->parse.nlcls_max = 0;
|
||||
awk->parse.depth.cur.block = 0;
|
||||
@ -287,7 +287,7 @@ int qse_awk_clear (qse_awk_t* awk)
|
||||
|
||||
awk->tree.cur_fun.ptr = QSE_NULL;
|
||||
awk->tree.cur_fun.len = 0;
|
||||
qse_map_clear (awk->tree.funs);
|
||||
qse_htb_clear (awk->tree.funs);
|
||||
|
||||
if (awk->tree.begin != QSE_NULL)
|
||||
{
|
||||
@ -324,7 +324,7 @@ int qse_awk_clear (qse_awk_t* awk)
|
||||
/* this table must not be cleared here as there can be a reference
|
||||
* to an entry of this table from errinf.fil when qse_awk_parse()
|
||||
* failed. this table is cleared in qse_awk_parse().
|
||||
* qse_map_clear (awk->sio.names);
|
||||
* qse_htb_clear (awk->sio.names);
|
||||
*/
|
||||
|
||||
awk->sio.last.c = QSE_CHAR_EOF;
|
||||
@ -363,9 +363,9 @@ void qse_awk_stopall (qse_awk_t* awk)
|
||||
|
||||
int qse_awk_getword (qse_awk_t* awk, const qse_cstr_t* okw, qse_cstr_t* nkw)
|
||||
{
|
||||
qse_map_pair_t* p;
|
||||
qse_htb_pair_t* p;
|
||||
|
||||
p = qse_map_search (awk->wtab, okw->ptr, okw->len);
|
||||
p = qse_htb_search (awk->wtab, okw->ptr, okw->len);
|
||||
if (p == QSE_NULL) return -1;
|
||||
|
||||
nkw->ptr = ((qse_cstr_t*)p->vptr)->ptr;
|
||||
@ -376,26 +376,26 @@ int qse_awk_getword (qse_awk_t* awk, const qse_cstr_t* okw, qse_cstr_t* nkw)
|
||||
|
||||
int qse_awk_unsetword (qse_awk_t* awk, const qse_cstr_t* kw)
|
||||
{
|
||||
qse_map_pair_t* p;
|
||||
qse_htb_pair_t* p;
|
||||
|
||||
QSE_ASSERT (kw->ptr != QSE_NULL);
|
||||
|
||||
p = qse_map_search (awk->wtab, kw->ptr, kw->len);
|
||||
p = qse_htb_search (awk->wtab, kw->ptr, kw->len);
|
||||
if (p == QSE_NULL)
|
||||
{
|
||||
qse_awk_seterrnum (awk, QSE_AWK_ENOENT, kw);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_map_delete (awk->rwtab, QSE_MAP_VPTR(p), QSE_MAP_VLEN(p));
|
||||
qse_map_delete (awk->wtab, kw->ptr, kw->len);
|
||||
qse_htb_delete (awk->rwtab, QSE_HTB_VPTR(p), QSE_HTB_VLEN(p));
|
||||
qse_htb_delete (awk->wtab, kw->ptr, kw->len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qse_awk_unsetallwords (qse_awk_t* awk)
|
||||
{
|
||||
qse_map_clear (awk->wtab);
|
||||
qse_map_clear (awk->rwtab);
|
||||
qse_htb_clear (awk->wtab);
|
||||
qse_htb_clear (awk->rwtab);
|
||||
}
|
||||
|
||||
int qse_awk_setword (
|
||||
@ -422,7 +422,7 @@ int qse_awk_setword (
|
||||
QSE_ASSERT (nkw->ptr != QSE_NULL);
|
||||
|
||||
/* set the word */
|
||||
if (qse_map_upsert (
|
||||
if (qse_htb_upsert (
|
||||
awk->wtab,
|
||||
(qse_char_t*)okw->ptr, okw->len,
|
||||
(qse_char_t*)nkw->ptr, nkw->len) == QSE_NULL)
|
||||
@ -431,12 +431,12 @@ int qse_awk_setword (
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qse_map_upsert (
|
||||
if (qse_htb_upsert (
|
||||
awk->rwtab,
|
||||
(qse_char_t*)nkw->ptr, nkw->len,
|
||||
(qse_char_t*)okw->ptr, okw->len) == QSE_NULL)
|
||||
{
|
||||
qse_map_delete (awk->wtab, okw->ptr, okw->len);
|
||||
qse_htb_delete (awk->wtab, okw->ptr, okw->len);
|
||||
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.h 312 2009-12-10 13:03:54Z hyunghwan.chung $
|
||||
* $Id: awk.h 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -25,7 +25,7 @@
|
||||
#include "../cmn/mem.h"
|
||||
#include <qse/cmn/chr.h>
|
||||
#include <qse/cmn/str.h>
|
||||
#include <qse/cmn/map.h>
|
||||
#include <qse/cmn/htb.h>
|
||||
#include <qse/cmn/lda.h>
|
||||
#include <qse/cmn/rex.h>
|
||||
|
||||
@ -89,7 +89,7 @@ struct qse_awk_tree_t
|
||||
qse_size_t ngbls; /* total number of globals */
|
||||
qse_size_t ngbls_base; /* number of intrinsic globals */
|
||||
qse_cstr_t cur_fun;
|
||||
qse_map_t* funs; /* awk function map */
|
||||
qse_htb_t* funs; /* awk function map */
|
||||
|
||||
qse_awk_nde_t* begin;
|
||||
qse_awk_nde_t* begin_tail;
|
||||
@ -123,9 +123,9 @@ struct qse_awk_t
|
||||
int option;
|
||||
|
||||
/* word table */
|
||||
qse_map_t* wtab;
|
||||
qse_htb_t* wtab;
|
||||
/* reverse word table */
|
||||
qse_map_t* rwtab;
|
||||
qse_htb_t* rwtab;
|
||||
|
||||
/* parse tree */
|
||||
qse_awk_tree_t tree;
|
||||
@ -159,10 +159,10 @@ struct qse_awk_t
|
||||
} depth;
|
||||
|
||||
/* function calls */
|
||||
qse_map_t* funs;
|
||||
qse_htb_t* funs;
|
||||
|
||||
/* named variables */
|
||||
qse_map_t* named;
|
||||
qse_htb_t* named;
|
||||
|
||||
/* global variables */
|
||||
qse_lda_t* gbls;
|
||||
@ -190,7 +190,7 @@ struct qse_awk_t
|
||||
|
||||
qse_awk_sio_arg_t arg; /* for the top level source */
|
||||
qse_awk_sio_arg_t* inp; /* current input */
|
||||
qse_map_t* names;
|
||||
qse_htb_t* names;
|
||||
} sio;
|
||||
|
||||
/* previous token */
|
||||
@ -204,7 +204,7 @@ struct qse_awk_t
|
||||
struct
|
||||
{
|
||||
qse_awk_fnc_t* sys;
|
||||
qse_map_t* user;
|
||||
qse_htb_t* user;
|
||||
} fnc;
|
||||
|
||||
struct
|
||||
@ -253,7 +253,7 @@ struct qse_awk_chain_t
|
||||
struct qse_awk_rtx_t
|
||||
{
|
||||
int id;
|
||||
qse_map_t* named;
|
||||
qse_htb_t* named;
|
||||
|
||||
void** stack;
|
||||
qse_size_t stack_top;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fnc.c 312 2009-12-10 13:03:54Z hyunghwan.chung $
|
||||
* $Id: fnc.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -20,8 +20,6 @@
|
||||
|
||||
#include "awk.h"
|
||||
|
||||
#include <qse/cmn/stdio.h>
|
||||
|
||||
static int fnc_close (qse_awk_rtx_t*, const qse_cstr_t*);
|
||||
static int fnc_fflush (qse_awk_rtx_t*, const qse_cstr_t*);
|
||||
static int fnc_index (qse_awk_rtx_t*, const qse_cstr_t*);
|
||||
@ -129,7 +127,7 @@ void* qse_awk_addfnc (
|
||||
|
||||
fnc->handler = handler;
|
||||
|
||||
if (qse_map_insert (awk->fnc.user,
|
||||
if (qse_htb_insert (awk->fnc.user,
|
||||
(qse_char_t*)name, name_len, fnc, 0) == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (awk, fnc);
|
||||
@ -143,7 +141,7 @@ void* qse_awk_addfnc (
|
||||
int qse_awk_delfnc (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t name_len)
|
||||
{
|
||||
if (qse_map_delete (awk->fnc.user, name, name_len) == -1)
|
||||
if (qse_htb_delete (awk->fnc.user, name, name_len) == -1)
|
||||
{
|
||||
qse_cstr_t errarg;
|
||||
|
||||
@ -159,14 +157,14 @@ int qse_awk_delfnc (
|
||||
|
||||
void qse_awk_clrfnc (qse_awk_t* awk)
|
||||
{
|
||||
qse_map_clear (awk->fnc.user);
|
||||
qse_htb_clear (awk->fnc.user);
|
||||
}
|
||||
|
||||
qse_awk_fnc_t* qse_awk_getfnc (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
|
||||
{
|
||||
qse_awk_fnc_t* fnc;
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
const qse_char_t* k;
|
||||
qse_size_t l;
|
||||
|
||||
@ -176,13 +174,13 @@ qse_awk_fnc_t* qse_awk_getfnc (
|
||||
if (fnc->valid != 0 &&
|
||||
(awk->option & fnc->valid) != fnc->valid) continue;
|
||||
|
||||
pair = qse_map_search (
|
||||
pair = qse_htb_search (
|
||||
awk->wtab, fnc->name.ptr, fnc->name.len);
|
||||
if (pair != QSE_NULL)
|
||||
{
|
||||
/* found in the customized word table */
|
||||
k = QSE_MAP_VPTR(pair);
|
||||
l = QSE_MAP_VLEN(pair);
|
||||
k = QSE_HTB_VPTR(pair);
|
||||
l = QSE_HTB_VLEN(pair);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -197,21 +195,21 @@ qse_awk_fnc_t* qse_awk_getfnc (
|
||||
* because I'm trying to support qse_awk_setword in
|
||||
* a very flimsy way here. Would it be better to drop
|
||||
* qse_awk_setword totally? */
|
||||
pair = qse_map_search (awk->rwtab, name, len);
|
||||
pair = qse_htb_search (awk->rwtab, name, len);
|
||||
if (pair != QSE_NULL)
|
||||
{
|
||||
/* the current name is a target name for
|
||||
* one of the original word. */
|
||||
k = QSE_MAP_VPTR(pair);
|
||||
l = QSE_MAP_VLEN(pair);
|
||||
k = QSE_HTB_VPTR(pair);
|
||||
l = QSE_HTB_VLEN(pair);
|
||||
}
|
||||
else
|
||||
{
|
||||
pair = qse_map_search (awk->wtab, name, len);
|
||||
pair = qse_htb_search (awk->wtab, name, len);
|
||||
if (pair != QSE_NULL)
|
||||
{
|
||||
k = QSE_MAP_VPTR(pair);
|
||||
l = QSE_MAP_VLEN(pair);
|
||||
k = QSE_HTB_VPTR(pair);
|
||||
l = QSE_HTB_VLEN(pair);
|
||||
|
||||
if (qse_strxncmp (name, len, k, l) != 0)
|
||||
{
|
||||
@ -235,10 +233,10 @@ qse_awk_fnc_t* qse_awk_getfnc (
|
||||
}
|
||||
/* END NOTE */
|
||||
|
||||
pair = qse_map_search (awk->fnc.user, k, l);
|
||||
pair = qse_htb_search (awk->fnc.user, k, l);
|
||||
if (pair == QSE_NULL) return QSE_NULL;
|
||||
|
||||
fnc = (qse_awk_fnc_t*)QSE_MAP_VPTR(pair);
|
||||
fnc = (qse_awk_fnc_t*)QSE_HTB_VPTR(pair);
|
||||
if (fnc->valid != 0 && (awk->option & fnc->valid) == 0) return QSE_NULL;
|
||||
|
||||
return fnc;
|
||||
@ -856,7 +854,7 @@ static int fnc_split (qse_awk_rtx_t* run, const qse_cstr_t* fnm)
|
||||
* it is decremented if the assignement fails. */
|
||||
qse_awk_rtx_refupval (run, t2);
|
||||
|
||||
if (qse_map_insert (
|
||||
if (qse_htb_insert (
|
||||
((qse_awk_val_map_t*)t1)->map,
|
||||
key, key_len, t2, 0) == QSE_NULL)
|
||||
{
|
||||
@ -870,7 +868,7 @@ static int fnc_split (qse_awk_rtx_t* run, const qse_cstr_t* fnm)
|
||||
if (fs_rex_free != QSE_NULL)
|
||||
QSE_AWK_FREEREX (run->awk, fs_rex_free);
|
||||
|
||||
/* qse_map_insert() fails if the key exists.
|
||||
/* qse_htb_insert() fails if the key exists.
|
||||
* that can't happen here. so set the error code
|
||||
* to ENOMEM */
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: parse.c 323 2010-04-05 12:50:01Z hyunghwan.chung $
|
||||
* $Id: parse.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -228,8 +228,8 @@ static int classify_ident (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t len);
|
||||
|
||||
static int deparse (qse_awk_t* awk);
|
||||
static qse_map_walk_t deparse_func (
|
||||
qse_map_t* map, qse_map_pair_t* pair, void* arg);
|
||||
static qse_htb_walk_t deparse_func (
|
||||
qse_htb_t* map, qse_htb_pair_t* pair, void* arg);
|
||||
static int put_char (qse_awk_t* awk, qse_char_t c);
|
||||
static int flush_out (qse_awk_t* awk);
|
||||
|
||||
@ -495,16 +495,16 @@ const qse_char_t* qse_awk_getgblname (
|
||||
|
||||
qse_cstr_t* qse_awk_getkw (qse_awk_t* awk, int id, qse_cstr_t* s)
|
||||
{
|
||||
qse_map_pair_t* p;
|
||||
qse_htb_pair_t* p;
|
||||
|
||||
s->ptr = kwtab[id].name;
|
||||
s->len = kwtab[id].namelen;
|
||||
|
||||
p = qse_map_search (awk->wtab, s->ptr, s->len);
|
||||
p = qse_htb_search (awk->wtab, s->ptr, s->len);
|
||||
if (p != QSE_NULL)
|
||||
{
|
||||
s->ptr = QSE_MAP_VPTR(p);
|
||||
s->len = QSE_MAP_VLEN(p);
|
||||
s->ptr = QSE_HTB_VPTR(p);
|
||||
s->len = QSE_HTB_VLEN(p);
|
||||
}
|
||||
|
||||
return s;
|
||||
@ -558,31 +558,31 @@ static int parse (qse_awk_t* awk)
|
||||
/* ensure that all functions called are defined
|
||||
* in the EXPLICIT-only mode */
|
||||
|
||||
qse_map_pair_t* p;
|
||||
qse_htb_pair_t* p;
|
||||
qse_size_t buckno;
|
||||
|
||||
p = qse_map_getfirstpair (awk->parse.funs, &buckno);
|
||||
p = qse_htb_getfirstpair (awk->parse.funs, &buckno);
|
||||
while (p != QSE_NULL)
|
||||
{
|
||||
if (qse_map_search (awk->tree.funs,
|
||||
QSE_MAP_KPTR(p), QSE_MAP_KLEN(p)) == QSE_NULL)
|
||||
if (qse_htb_search (awk->tree.funs,
|
||||
QSE_HTB_KPTR(p), QSE_HTB_KLEN(p)) == QSE_NULL)
|
||||
{
|
||||
qse_awk_nde_call_t* call;
|
||||
|
||||
/* see parse_fncall() for what is
|
||||
* stored into awk->tree.funs */
|
||||
call = (qse_awk_nde_call_t*)QSE_MAP_VPTR(p);
|
||||
call = (qse_awk_nde_call_t*)QSE_HTB_VPTR(p);
|
||||
SETERR_ARG_LOC (
|
||||
awk,
|
||||
QSE_AWK_EFUNNF,
|
||||
QSE_MAP_KPTR(p),
|
||||
QSE_MAP_KLEN(p),
|
||||
QSE_HTB_KPTR(p),
|
||||
QSE_HTB_KLEN(p),
|
||||
&call->loc
|
||||
);
|
||||
goto oops;
|
||||
}
|
||||
|
||||
p = qse_map_getnextpair (awk->parse.funs, p, &buckno);
|
||||
p = qse_htb_getnextpair (awk->parse.funs, p, &buckno);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -660,7 +660,7 @@ int qse_awk_parse (qse_awk_t* awk, qse_awk_sio_t* sio)
|
||||
QSE_ASSERT (awk->parse.depth.cur.expr == 0);
|
||||
|
||||
qse_awk_clear (awk);
|
||||
qse_map_clear (awk->sio.names);
|
||||
qse_htb_clear (awk->sio.names);
|
||||
awk->sio.inf = sio->in;
|
||||
awk->sio.outf = sio->out;
|
||||
|
||||
@ -677,7 +677,7 @@ static int begin_include (qse_awk_t* awk)
|
||||
{
|
||||
qse_ssize_t op;
|
||||
qse_awk_sio_arg_t* arg = QSE_NULL;
|
||||
qse_map_pair_t* pair = QSE_NULL;
|
||||
qse_htb_pair_t* pair = QSE_NULL;
|
||||
|
||||
if (qse_strlen(awk->tok.name->ptr) != QSE_STR_LEN(awk->tok.name))
|
||||
{
|
||||
@ -692,7 +692,7 @@ static int begin_include (qse_awk_t* awk)
|
||||
}
|
||||
|
||||
/* store the file name to awk->sio.names */
|
||||
pair = qse_map_ensert (
|
||||
pair = qse_htb_ensert (
|
||||
awk->sio.names,
|
||||
QSE_STR_PTR(awk->tok.name),
|
||||
QSE_STR_LEN(awk->tok.name) + 1, /* to include '\0' */
|
||||
@ -704,8 +704,8 @@ static int begin_include (qse_awk_t* awk)
|
||||
goto oops;
|
||||
}
|
||||
|
||||
/*QSE_MAP_VPTR(pair) = QSE_MAP_KPTR(pair);
|
||||
QSE_MAP_VLEN(pair) = QSE_MAP_KLEN(pair);*/
|
||||
/*QSE_HTB_VPTR(pair) = QSE_HTB_KPTR(pair);
|
||||
QSE_HTB_VLEN(pair) = QSE_HTB_KLEN(pair);*/
|
||||
|
||||
arg = (qse_awk_sio_arg_t*) QSE_MMGR_ALLOC (awk->mmgr, QSE_SIZEOF(*arg));
|
||||
if (arg == QSE_NULL)
|
||||
@ -715,7 +715,7 @@ static int begin_include (qse_awk_t* awk)
|
||||
}
|
||||
|
||||
QSE_MEMSET (arg, 0, QSE_SIZEOF(*arg));
|
||||
arg->name = QSE_MAP_KPTR(pair);
|
||||
arg->name = QSE_HTB_KPTR(pair);
|
||||
|
||||
CLRERR (awk);
|
||||
op = awk->sio.inf (awk, QSE_AWK_SIO_OPEN, arg, QSE_NULL, 0);
|
||||
@ -1051,7 +1051,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
qse_awk_nde_t* body;
|
||||
qse_awk_fun_t* fun;
|
||||
qse_size_t nargs, g;
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
/* eat up the keyword 'function' and get the next token */
|
||||
QSE_ASSERT (MATCH(awk,TOK_FUNCTION));
|
||||
@ -1077,7 +1077,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
}
|
||||
|
||||
/* check if it has already been defined as a function */
|
||||
if (qse_map_search (awk->tree.funs, name, namelen) != QSE_NULL)
|
||||
if (qse_htb_search (awk->tree.funs, name, namelen) != QSE_NULL)
|
||||
{
|
||||
/* the function is defined previously */
|
||||
SETERR_ARG_LOC (
|
||||
@ -1086,7 +1086,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
}
|
||||
|
||||
/* check if it conflicts with a named variable */
|
||||
if (qse_map_search (awk->parse.named, name, namelen) != QSE_NULL)
|
||||
if (qse_htb_search (awk->parse.named, name, namelen) != QSE_NULL)
|
||||
{
|
||||
SETERR_ARG_LOC (
|
||||
awk, QSE_AWK_EVARRED, name, namelen, &awk->tok.loc);
|
||||
@ -1317,10 +1317,10 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
||||
fun->nargs = nargs;
|
||||
fun->body = body;
|
||||
|
||||
pair = qse_map_insert (awk->tree.funs, namedup, namelen, fun, 0);
|
||||
pair = qse_htb_insert (awk->tree.funs, namedup, namelen, fun, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
/* if qse_map_insert() fails for other reasons than memory
|
||||
/* if qse_htb_insert() fails for other reasons than memory
|
||||
* shortage, there should be implementaion errors as duplicate
|
||||
* functions are detected earlier in this function */
|
||||
QSE_AWK_FREE (awk, namedup);
|
||||
@ -1332,12 +1332,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 */
|
||||
fun->name.ptr = QSE_MAP_KPTR(pair);
|
||||
fun->name.len = QSE_MAP_KLEN(pair);
|
||||
fun->name.ptr = QSE_HTB_KPTR(pair);
|
||||
fun->name.len = QSE_HTB_KLEN(pair);
|
||||
QSE_AWK_FREE (awk, namedup);
|
||||
|
||||
/* remove an undefined function call entry from the parse.fun table */
|
||||
qse_map_delete (awk->parse.funs, fun->name.ptr, namelen);
|
||||
qse_htb_delete (awk->parse.funs, fun->name.ptr, namelen);
|
||||
return body;
|
||||
}
|
||||
|
||||
@ -1685,9 +1685,9 @@ static qse_lda_walk_t check_global (qse_lda_t* lda, qse_size_t index, void* arg)
|
||||
|
||||
if (index < awk->tree.ngbls_base)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
pair = qse_map_search (awk->wtab, tmp.ptr, tmp.len);
|
||||
pair = qse_htb_search (awk->wtab, tmp.ptr, tmp.len);
|
||||
if (pair != QSE_NULL)
|
||||
{
|
||||
tmp.ptr = ((qse_cstr_t*)(pair->vptr))->ptr;
|
||||
@ -1753,7 +1753,7 @@ static int add_global (
|
||||
}
|
||||
|
||||
/* check if it conflicts with a function name */
|
||||
if (qse_map_search (awk->tree.funs, name, len) != QSE_NULL)
|
||||
if (qse_htb_search (awk->tree.funs, name, len) != QSE_NULL)
|
||||
{
|
||||
SETERR_ARG_LOC (awk, QSE_AWK_EFUNRED, name, len, xloc);
|
||||
return -1;
|
||||
@ -1761,7 +1761,7 @@ static int add_global (
|
||||
|
||||
/* check if it conflicts with a function name
|
||||
* caught in the function call table */
|
||||
if (qse_map_search (awk->parse.funs, name, len) != QSE_NULL)
|
||||
if (qse_htb_search (awk->parse.funs, name, len) != QSE_NULL)
|
||||
{
|
||||
SETERR_ARG_LOC (awk, QSE_AWK_EFUNRED, name, len, xloc);
|
||||
return -1;
|
||||
@ -1781,7 +1781,7 @@ static int add_global (
|
||||
* global X;
|
||||
* function x() { print X++; }
|
||||
*/
|
||||
if (qse_map_search (awk->parse.named, name, len) != QSE_NULL)
|
||||
if (qse_htb_search (awk->parse.named, name, len) != QSE_NULL)
|
||||
{
|
||||
SETERR_ARG_LOC (awk, QSE_AWK_EVARRED, name, len, xloc);
|
||||
return -1;
|
||||
@ -1842,13 +1842,13 @@ int qse_awk_addgbl (qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
|
||||
return n;
|
||||
}
|
||||
|
||||
#define QSE_AWK_NUM_STATIC_GBLS \
|
||||
(QSE_AWK_MAX_GBL_ID-QSE_AWK_MIN_GBL_ID+1)
|
||||
|
||||
int qse_awk_delgbl (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
|
||||
{
|
||||
qse_size_t n;
|
||||
|
||||
#define QSE_AWK_NUM_STATIC_GBLS \
|
||||
(QSE_AWK_MAX_GBL_ID-QSE_AWK_MIN_GBL_ID+1)
|
||||
|
||||
if (awk->tree.ngbls > awk->tree.ngbls_base)
|
||||
{
|
||||
@ -1880,6 +1880,22 @@ int qse_awk_delgbl (
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qse_awk_findgbl (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
|
||||
{
|
||||
qse_size_t n;
|
||||
|
||||
n = qse_lda_search (awk->parse.gbls,
|
||||
QSE_AWK_NUM_STATIC_GBLS, name, len);
|
||||
if (n == QSE_LDA_NIL)
|
||||
{
|
||||
SETERR_ARG (awk, QSE_AWK_ENOENT, name, len);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return (int)n;
|
||||
}
|
||||
|
||||
static qse_awk_t* collect_globals (qse_awk_t* awk)
|
||||
{
|
||||
if (MATCH(awk,TOK_NEWLINE))
|
||||
@ -4413,13 +4429,13 @@ static int isfnname (qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
|
||||
}
|
||||
}
|
||||
|
||||
if (qse_map_search (awk->tree.funs, name, len) != QSE_NULL)
|
||||
if (qse_htb_search (awk->tree.funs, name, len) != QSE_NULL)
|
||||
{
|
||||
/* one of the functions defined previously */
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (qse_map_search (awk->parse.funs, name, len) != QSE_NULL)
|
||||
if (qse_htb_search (awk->parse.funs, name, len) != QSE_NULL)
|
||||
{
|
||||
/* one of the function calls not resolved so far. */
|
||||
return 2;
|
||||
@ -4648,7 +4664,7 @@ static qse_awk_nde_t* parse_primary_ident (
|
||||
}
|
||||
|
||||
/* must be a function name */
|
||||
QSE_ASSERT (qse_map_search (
|
||||
QSE_ASSERT (qse_htb_search (
|
||||
awk->parse.named, namedup, namelen) == QSE_NULL);
|
||||
|
||||
nde = parse_fncall (
|
||||
@ -4665,7 +4681,7 @@ static qse_awk_nde_t* parse_primary_ident (
|
||||
qse_awk_nde_t* nde;
|
||||
|
||||
/* a function call to a yet undefined function */
|
||||
if (qse_map_search (awk->parse.named,
|
||||
if (qse_htb_search (awk->parse.named,
|
||||
namedup, namelen) != QSE_NULL)
|
||||
{
|
||||
/* a function call conflicts with a named variable */
|
||||
@ -4705,7 +4721,7 @@ static qse_awk_nde_t* parse_primary_ident (
|
||||
|
||||
/* collect unique instances of a named variable
|
||||
* for reference */
|
||||
if (qse_map_upsert (
|
||||
if (qse_htb_upsert (
|
||||
awk->parse.named,
|
||||
namedup, namelen, QSE_NULL, 0) == QSE_NULL)
|
||||
{
|
||||
@ -5018,7 +5034,7 @@ make_node:
|
||||
|
||||
/* store a non-builtin function call into the awk->parse.funs
|
||||
* table */
|
||||
if (qse_map_upsert (
|
||||
if (qse_htb_upsert (
|
||||
awk->parse.funs, name, namelen, call, 0) == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (awk, call);
|
||||
@ -5707,7 +5723,7 @@ static int preget_token (qse_awk_t* awk)
|
||||
static int classify_ident (
|
||||
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
|
||||
{
|
||||
if (QSE_MAP_SIZE(awk->wtab) <= 0)
|
||||
if (QSE_HTB_SIZE(awk->wtab) <= 0)
|
||||
{
|
||||
/* perform binary search if no custom words are specified */
|
||||
|
||||
@ -5746,7 +5762,7 @@ static int classify_ident (
|
||||
{
|
||||
/* perform linear search if there are any custom words set */
|
||||
kwent_t* kwp, * end;
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
end = kwtab + QSE_COUNTOF(kwtab);
|
||||
for (kwp = kwtab; kwp < end; kwp++)
|
||||
@ -5757,7 +5773,7 @@ static int classify_ident (
|
||||
if (kwp->valid != 0 &&
|
||||
(awk->option & kwp->valid) != kwp->valid) continue;
|
||||
|
||||
pair = qse_map_search (awk->wtab, kwp->name, kwp->namelen);
|
||||
pair = qse_htb_search (awk->wtab, kwp->name, kwp->namelen);
|
||||
if (pair != QSE_NULL)
|
||||
{
|
||||
k = ((qse_cstr_t*)(pair->vptr))->ptr;
|
||||
@ -5923,7 +5939,7 @@ static int deparse (qse_awk_t* awk)
|
||||
df.tmp_len = QSE_COUNTOF(tmp);
|
||||
df.ret = 0;
|
||||
|
||||
qse_map_walk (awk->tree.funs, deparse_func, &df);
|
||||
qse_htb_walk (awk->tree.funs, deparse_func, &df);
|
||||
if (df.ret <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
@ -6029,29 +6045,29 @@ exit_deparse:
|
||||
return n;
|
||||
}
|
||||
|
||||
static qse_map_walk_t deparse_func (
|
||||
qse_map_t* map, qse_map_pair_t* pair, void* arg)
|
||||
static qse_htb_walk_t deparse_func (
|
||||
qse_htb_t* map, qse_htb_pair_t* pair, void* arg)
|
||||
{
|
||||
struct deparse_func_t* df = (struct deparse_func_t*)arg;
|
||||
qse_awk_fun_t* fun = (qse_awk_fun_t*)QSE_MAP_VPTR(pair);
|
||||
qse_awk_fun_t* fun = (qse_awk_fun_t*)QSE_HTB_VPTR(pair);
|
||||
qse_size_t i, n;
|
||||
qse_cstr_t kw;
|
||||
|
||||
QSE_ASSERT (qse_strxncmp (QSE_MAP_KPTR(pair), QSE_MAP_KLEN(pair), fun->name.ptr, fun->name.len) == 0);
|
||||
QSE_ASSERT (qse_strxncmp (QSE_HTB_KPTR(pair), QSE_HTB_KLEN(pair), fun->name.ptr, fun->name.len) == 0);
|
||||
|
||||
#define PUT_C(x,c) \
|
||||
if (put_char(x->awk,c)==-1) { \
|
||||
x->ret = -1; return QSE_MAP_WALK_STOP; \
|
||||
x->ret = -1; return QSE_HTB_WALK_STOP; \
|
||||
}
|
||||
|
||||
#define PUT_S(x,str) \
|
||||
if (qse_awk_putsrcstr(x->awk,str) <= -1) { \
|
||||
x->ret = -1; return QSE_MAP_WALK_STOP; \
|
||||
x->ret = -1; return QSE_HTB_WALK_STOP; \
|
||||
}
|
||||
|
||||
#define PUT_SX(x,str,len) \
|
||||
if (qse_awk_putsrcstrx (x->awk, str, len) <= -1) { \
|
||||
x->ret = -1; return QSE_MAP_WALK_STOP; \
|
||||
x->ret = -1; return QSE_HTB_WALK_STOP; \
|
||||
}
|
||||
|
||||
qse_awk_getkw (df->awk, KW_FUNCTION, &kw);
|
||||
@ -6085,7 +6101,7 @@ static qse_map_walk_t deparse_func (
|
||||
}
|
||||
PUT_C (df, QSE_T('\n'));
|
||||
|
||||
return QSE_MAP_WALK_FORWARD;
|
||||
return QSE_HTB_WALK_FORWARD;
|
||||
|
||||
#undef PUT_C
|
||||
#undef PUT_S
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: run.c 323 2010-04-05 12:50:01Z hyunghwan.chung $
|
||||
* $Id: run.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -691,7 +691,7 @@ qse_mmgr_t* qse_awk_rtx_getmmgr (qse_awk_rtx_t* rtx)
|
||||
return MMGR(rtx);
|
||||
}
|
||||
|
||||
qse_map_t* qse_awk_rtx_getnvmap (qse_awk_rtx_t* rtx)
|
||||
qse_htb_t* qse_awk_rtx_getnvmap (qse_awk_rtx_t* rtx)
|
||||
{
|
||||
return rtx->named;
|
||||
}
|
||||
@ -713,7 +713,7 @@ qse_awk_rtx_t* qse_awk_rtx_open (
|
||||
awk->tree.begin == QSE_NULL &&
|
||||
awk->tree.end == QSE_NULL &&
|
||||
awk->tree.chain_size == 0 &&
|
||||
qse_map_getsize(awk->tree.funs) == 0)
|
||||
qse_htb_getsize(awk->tree.funs) == 0)
|
||||
{
|
||||
qse_awk_seterrnum (awk, QSE_AWK_ENOPER, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
@ -773,13 +773,13 @@ void qse_awk_rtx_setrcb (qse_awk_rtx_t* rtx, qse_awk_rcb_t* rcb)
|
||||
rtx->rcb = *rcb;
|
||||
}
|
||||
|
||||
static void free_namedval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
static void free_namedval (qse_htb_t* map, void* dptr, qse_size_t dlen)
|
||||
{
|
||||
qse_awk_rtx_refdownval (
|
||||
*(qse_awk_rtx_t**)QSE_XTN(map), dptr);
|
||||
}
|
||||
|
||||
static void same_namedval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
static void same_namedval (qse_htb_t* map, void* dptr, qse_size_t dlen)
|
||||
{
|
||||
qse_awk_rtx_refdownval_nofree (
|
||||
*(qse_awk_rtx_t**)QSE_XTN(map), dptr);
|
||||
@ -844,7 +844,7 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
|
||||
return -1;
|
||||
}
|
||||
|
||||
rtx->named = qse_map_open (
|
||||
rtx->named = qse_htb_open (
|
||||
MMGR(rtx), QSE_SIZEOF(rtx), 1024, 70);
|
||||
if (rtx->named == QSE_NULL)
|
||||
{
|
||||
@ -856,16 +856,16 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
|
||||
return -1;
|
||||
}
|
||||
*(qse_awk_rtx_t**)QSE_XTN(rtx->named) = rtx;
|
||||
qse_map_setcopier (rtx->named, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (rtx->named, QSE_MAP_VAL, free_namedval);
|
||||
qse_map_setkeeper (rtx->named, same_namedval);
|
||||
qse_map_setscale (rtx->named, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setcopier (rtx->named, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setfreeer (rtx->named, QSE_HTB_VAL, free_namedval);
|
||||
qse_htb_setkeeper (rtx->named, same_namedval);
|
||||
qse_htb_setscale (rtx->named, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
rtx->format.tmp.ptr = (qse_char_t*)
|
||||
QSE_AWK_ALLOC (rtx->awk, 4096*QSE_SIZEOF(qse_char_t*));
|
||||
if (rtx->format.tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_map_close (rtx->named);
|
||||
qse_htb_close (rtx->named);
|
||||
qse_str_fini (&rtx->format.fmt);
|
||||
qse_str_fini (&rtx->format.out);
|
||||
qse_str_fini (&rtx->inrec.linew);
|
||||
@ -883,7 +883,7 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
|
||||
if (rtx->pattern_range_state == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (rtx->awk, rtx->format.tmp.ptr);
|
||||
qse_map_close (rtx->named);
|
||||
qse_htb_close (rtx->named);
|
||||
qse_str_fini (&rtx->format.fmt);
|
||||
qse_str_fini (&rtx->format.out);
|
||||
qse_str_fini (&rtx->inrec.linew);
|
||||
@ -1014,7 +1014,7 @@ static void fini_rtx (qse_awk_rtx_t* rtx, int fini_globals)
|
||||
}
|
||||
|
||||
/* destroy named variables */
|
||||
qse_map_close (rtx->named);
|
||||
qse_htb_close (rtx->named);
|
||||
|
||||
/* destroy values in free list */
|
||||
while (rtx->fcache_count > 0)
|
||||
@ -1082,7 +1082,7 @@ static int build_runarg (
|
||||
* it has successfully been assigned into ARGV. */
|
||||
qse_awk_rtx_refupval (rtx, v_tmp);
|
||||
|
||||
if (qse_map_upsert (
|
||||
if (qse_htb_upsert (
|
||||
((qse_awk_val_map_t*)v_argv)->map,
|
||||
key, key_len, v_tmp, 0) == QSE_NULL)
|
||||
{
|
||||
@ -1508,7 +1508,7 @@ 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)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
qse_awk_fun_t* fun;
|
||||
struct capture_retval_data_t crdata;
|
||||
qse_awk_val_t* v;
|
||||
@ -1535,7 +1535,7 @@ qse_awk_val_t* qse_awk_rtx_call (
|
||||
call.nargs = nargs;
|
||||
|
||||
/* find the function */
|
||||
pair = qse_map_search (
|
||||
pair = qse_htb_search (
|
||||
rtx->awk->tree.funs,
|
||||
call.what.fun.name.ptr,
|
||||
call.what.fun.name.len
|
||||
@ -1548,7 +1548,7 @@ qse_awk_val_t* qse_awk_rtx_call (
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
fun = (qse_awk_fun_t*)QSE_MAP_VPTR(pair);
|
||||
fun = (qse_awk_fun_t*)QSE_HTB_VPTR(pair);
|
||||
QSE_ASSERT (fun != QSE_NULL);
|
||||
|
||||
/* check if the number of arguments given is more than expected */
|
||||
@ -2216,19 +2216,19 @@ struct foreach_walker_t
|
||||
int ret;
|
||||
};
|
||||
|
||||
static qse_map_walk_t walk_foreach (
|
||||
qse_map_t* map, qse_map_pair_t* pair, void* arg)
|
||||
static qse_htb_walk_t walk_foreach (
|
||||
qse_htb_t* map, qse_htb_pair_t* pair, void* arg)
|
||||
{
|
||||
struct foreach_walker_t* w = (struct foreach_walker_t*)arg;
|
||||
qse_awk_val_t* str;
|
||||
|
||||
str = (qse_awk_val_t*) qse_awk_rtx_makestrval (
|
||||
w->rtx, QSE_MAP_KPTR(pair), QSE_MAP_KLEN(pair));
|
||||
w->rtx, QSE_HTB_KPTR(pair), QSE_HTB_KLEN(pair));
|
||||
if (str == QSE_NULL)
|
||||
{
|
||||
ADJERR_LOC (w->rtx, &w->var->loc);
|
||||
w->ret = -1;
|
||||
return QSE_MAP_WALK_STOP;
|
||||
return QSE_HTB_WALK_STOP;
|
||||
}
|
||||
|
||||
qse_awk_rtx_refupval (w->rtx, str);
|
||||
@ -2236,14 +2236,14 @@ static qse_map_walk_t walk_foreach (
|
||||
{
|
||||
qse_awk_rtx_refdownval (w->rtx, str);
|
||||
w->ret = -1;
|
||||
return QSE_MAP_WALK_STOP;
|
||||
return QSE_HTB_WALK_STOP;
|
||||
}
|
||||
|
||||
if (run_statement (w->rtx, w->body) == -1)
|
||||
{
|
||||
qse_awk_rtx_refdownval (w->rtx, str);
|
||||
w->ret = -1;
|
||||
return QSE_MAP_WALK_STOP;
|
||||
return QSE_HTB_WALK_STOP;
|
||||
}
|
||||
|
||||
qse_awk_rtx_refdownval (w->rtx, str);
|
||||
@ -2251,7 +2251,7 @@ static qse_map_walk_t walk_foreach (
|
||||
if (w->rtx->exit_level == EXIT_BREAK)
|
||||
{
|
||||
w->rtx->exit_level = EXIT_NONE;
|
||||
return QSE_MAP_WALK_STOP;
|
||||
return QSE_HTB_WALK_STOP;
|
||||
}
|
||||
else if (w->rtx->exit_level == EXIT_CONTINUE)
|
||||
{
|
||||
@ -2259,17 +2259,17 @@ static qse_map_walk_t walk_foreach (
|
||||
}
|
||||
else if (w->rtx->exit_level != EXIT_NONE)
|
||||
{
|
||||
return QSE_MAP_WALK_STOP;
|
||||
return QSE_HTB_WALK_STOP;
|
||||
}
|
||||
|
||||
return QSE_MAP_WALK_FORWARD;
|
||||
return QSE_HTB_WALK_FORWARD;
|
||||
}
|
||||
|
||||
static int run_foreach (qse_awk_rtx_t* rtx, qse_awk_nde_foreach_t* nde)
|
||||
{
|
||||
qse_awk_nde_exp_t* test;
|
||||
qse_awk_val_t* rv;
|
||||
qse_map_t* map;
|
||||
qse_htb_t* map;
|
||||
struct foreach_walker_t walker;
|
||||
|
||||
test = (qse_awk_nde_exp_t*)nde->test;
|
||||
@ -2303,7 +2303,7 @@ static int run_foreach (qse_awk_rtx_t* rtx, qse_awk_nde_foreach_t* nde)
|
||||
walker.var = test->left;
|
||||
walker.body = nde->body;
|
||||
walker.ret = 0;
|
||||
qse_map_walk (map, walk_foreach, &walker);
|
||||
qse_htb_walk (map, walk_foreach, &walker);
|
||||
|
||||
qse_awk_rtx_refdownval (rtx, rv);
|
||||
return walker.ret;
|
||||
@ -2477,7 +2477,7 @@ static int run_nextfile (qse_awk_rtx_t* rtx, qse_awk_nde_nextfile_t* nde)
|
||||
}
|
||||
|
||||
static int delete_indexed (
|
||||
qse_awk_rtx_t* rtx, qse_map_t* map, qse_awk_nde_var_t* var)
|
||||
qse_awk_rtx_t* rtx, qse_htb_t* map, qse_awk_nde_var_t* var)
|
||||
{
|
||||
qse_awk_val_t* idx;
|
||||
|
||||
@ -2492,7 +2492,7 @@ static int delete_indexed (
|
||||
{
|
||||
/* delete x["abc"] */
|
||||
|
||||
qse_map_delete (
|
||||
qse_htb_delete (
|
||||
map,
|
||||
((qse_awk_val_str_t*)idx)->ptr,
|
||||
((qse_awk_val_str_t*)idx)->len
|
||||
@ -2532,7 +2532,7 @@ static int delete_indexed (
|
||||
keylen = (out.type == QSE_AWK_RTX_VALTOSTR_CPL)?
|
||||
out.u.cpl.len: out.u.cpldup.len;
|
||||
|
||||
qse_map_delete (map, key, keylen);
|
||||
qse_htb_delete (map, key, keylen);
|
||||
|
||||
if (key != buf) QSE_AWK_FREE (rtx->awk, key);
|
||||
}
|
||||
@ -2549,14 +2549,14 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
|
||||
if (var->type == QSE_AWK_NDE_NAMED ||
|
||||
var->type == QSE_AWK_NDE_NAMEDIDX)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
QSE_ASSERTX (
|
||||
(var->type == QSE_AWK_NDE_NAMED && var->idx == QSE_NULL) ||
|
||||
(var->type == QSE_AWK_NDE_NAMEDIDX && var->idx != QSE_NULL),
|
||||
"if a named variable has an index part and a named indexed variable doesn't have an index part, the program is definitely wrong");
|
||||
|
||||
pair = qse_map_search (
|
||||
pair = qse_htb_search (
|
||||
rtx->named, var->id.name.ptr, var->id.name.len);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
@ -2573,7 +2573,7 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
|
||||
return -1;
|
||||
}
|
||||
|
||||
pair = qse_map_upsert (rtx->named,
|
||||
pair = qse_htb_upsert (rtx->named,
|
||||
var->id.name.ptr, var->id.name.len, tmp, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
@ -2590,9 +2590,9 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
|
||||
else
|
||||
{
|
||||
qse_awk_val_t* val;
|
||||
qse_map_t* map;
|
||||
qse_htb_t* map;
|
||||
|
||||
val = (qse_awk_val_t*)QSE_MAP_VPTR(pair);
|
||||
val = (qse_awk_val_t*)QSE_HTB_VPTR(pair);
|
||||
QSE_ASSERT (val != QSE_NULL);
|
||||
|
||||
if (val->type != QSE_AWK_VAL_MAP)
|
||||
@ -2613,7 +2613,7 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_map_clear (map);
|
||||
qse_htb_clear (map);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2678,7 +2678,7 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_map_t* map;
|
||||
qse_htb_t* map;
|
||||
|
||||
if (val->type != QSE_AWK_VAL_MAP)
|
||||
{
|
||||
@ -2700,7 +2700,7 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_map_clear (map);
|
||||
qse_htb_clear (map);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2731,7 +2731,7 @@ static int run_reset (qse_awk_rtx_t* rtx, qse_awk_nde_reset_t* nde)
|
||||
|
||||
/* a named variable can be reset if removed from a internal map
|
||||
to manage it */
|
||||
qse_map_delete (rtx->named, var->id.name.ptr, var->id.name.len);
|
||||
qse_htb_delete (rtx->named, var->id.name.ptr, var->id.name.len);
|
||||
}
|
||||
else if (var->type == QSE_AWK_NDE_GBL ||
|
||||
var->type == QSE_AWK_NDE_LCL ||
|
||||
@ -3368,12 +3368,12 @@ static qse_awk_val_t* do_assignment_scalar (
|
||||
|
||||
if (var->type == QSE_AWK_NDE_NAMED)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
pair = qse_map_search (
|
||||
pair = qse_htb_search (
|
||||
run->named, var->id.name.ptr, var->id.name.len);
|
||||
if (pair != QSE_NULL &&
|
||||
((qse_awk_val_t*)QSE_MAP_VPTR(pair))->type == QSE_AWK_VAL_MAP)
|
||||
((qse_awk_val_t*)QSE_HTB_VPTR(pair))->type == QSE_AWK_VAL_MAP)
|
||||
{
|
||||
/* once a variable becomes a map,
|
||||
* it cannot be changed to a scalar variable */
|
||||
@ -3383,7 +3383,7 @@ static qse_awk_val_t* do_assignment_scalar (
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
if (qse_map_upsert (run->named,
|
||||
if (qse_htb_upsert (run->named,
|
||||
var->id.name.ptr, var->id.name.len, val, 0) == QSE_NULL)
|
||||
{
|
||||
SETERR_LOC (run, QSE_AWK_ENOMEM, &var->loc);
|
||||
@ -3455,12 +3455,12 @@ static qse_awk_val_t* do_assignment_map (
|
||||
|
||||
if (var->type == QSE_AWK_NDE_NAMEDIDX)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
pair = qse_map_search (
|
||||
qse_htb_pair_t* pair;
|
||||
pair = qse_htb_search (
|
||||
run->named, var->id.name.ptr, var->id.name.len);
|
||||
map = (pair == QSE_NULL)?
|
||||
(qse_awk_val_map_t*)qse_awk_val_nil:
|
||||
(qse_awk_val_map_t*)QSE_MAP_VPTR(pair);
|
||||
(qse_awk_val_map_t*)QSE_HTB_VPTR(pair);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3487,8 +3487,8 @@ static qse_awk_val_t* do_assignment_map (
|
||||
{
|
||||
/* doesn't have to decrease the reference count
|
||||
* of the previous value here as it is done by
|
||||
* qse_map_upsert */
|
||||
if (qse_map_upsert (
|
||||
* qse_htb_upsert */
|
||||
if (qse_htb_upsert (
|
||||
run->named,
|
||||
var->id.name.ptr,
|
||||
var->id.name.len,
|
||||
@ -3546,7 +3546,7 @@ static qse_awk_val_t* do_assignment_map (
|
||||
str, (int)map->ref, (int)map->type);
|
||||
#endif
|
||||
|
||||
if (qse_map_upsert (map->map, str, len, val, 0) == QSE_NULL)
|
||||
if (qse_htb_upsert (map->map, str, len, val, 0) == QSE_NULL)
|
||||
{
|
||||
if (str != idxbuf) QSE_AWK_FREE (run->awk, str);
|
||||
SETERR_LOC (run, QSE_AWK_ENOMEM, &var->loc);
|
||||
@ -3862,10 +3862,10 @@ static qse_awk_val_t* eval_binop_in (
|
||||
else if (rv->type == QSE_AWK_VAL_MAP)
|
||||
{
|
||||
qse_awk_val_t* res;
|
||||
qse_map_t* map;
|
||||
qse_htb_t* map;
|
||||
|
||||
map = ((qse_awk_val_map_t*)rv)->map;
|
||||
res = (qse_map_search (map, str, len) == QSE_NULL)?
|
||||
res = (qse_htb_search (map, str, len) == QSE_NULL)?
|
||||
qse_awk_val_zero: qse_awk_val_one;
|
||||
|
||||
if (str != idxbuf) QSE_AWK_FREE (run->awk, str);
|
||||
@ -5429,9 +5429,9 @@ static qse_awk_val_t* eval_fun_ex (
|
||||
{
|
||||
qse_awk_nde_call_t* call = (qse_awk_nde_call_t*)nde;
|
||||
qse_awk_fun_t* fun;
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
pair = qse_map_search (rtx->awk->tree.funs,
|
||||
pair = qse_htb_search (rtx->awk->tree.funs,
|
||||
call->what.fun.name.ptr, call->what.fun.name.len);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
@ -5441,7 +5441,7 @@ static qse_awk_val_t* eval_fun_ex (
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
fun = (qse_awk_fun_t*)QSE_MAP_VPTR(pair);
|
||||
fun = (qse_awk_fun_t*)QSE_HTB_VPTR(pair);
|
||||
QSE_ASSERT (fun != QSE_NULL);
|
||||
|
||||
if (call->nargs > fun->nargs)
|
||||
@ -5862,16 +5862,16 @@ static int get_reference (
|
||||
|
||||
if (nde->type == QSE_AWK_NDE_NAMED)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
pair = qse_map_search (
|
||||
pair = qse_htb_search (
|
||||
run->named, tgt->id.name.ptr, tgt->id.name.len);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
/* it is bad that the named variable has to be
|
||||
* created in the function named "__get_refernce".
|
||||
* would there be any better ways to avoid this? */
|
||||
pair = qse_map_upsert (
|
||||
pair = qse_htb_upsert (
|
||||
run->named, tgt->id.name.ptr,
|
||||
tgt->id.name.len, qse_awk_val_nil, 0);
|
||||
if (pair == QSE_NULL)
|
||||
@ -5881,7 +5881,7 @@ static int get_reference (
|
||||
}
|
||||
}
|
||||
|
||||
*ref = (qse_awk_val_t**)&QSE_MAP_VPTR(pair);
|
||||
*ref = (qse_awk_val_t**)&QSE_HTB_VPTR(pair);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5905,13 +5905,13 @@ static int get_reference (
|
||||
|
||||
if (nde->type == QSE_AWK_NDE_NAMEDIDX)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
pair = qse_map_search (
|
||||
pair = qse_htb_search (
|
||||
run->named, tgt->id.name.ptr, tgt->id.name.len);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
pair = qse_map_upsert (
|
||||
pair = qse_htb_upsert (
|
||||
run->named, tgt->id.name.ptr,
|
||||
tgt->id.name.len, qse_awk_val_nil, 0);
|
||||
if (pair == QSE_NULL)
|
||||
@ -5922,7 +5922,7 @@ static int get_reference (
|
||||
}
|
||||
|
||||
tmp = get_reference_indexed (
|
||||
run, tgt, (qse_awk_val_t**)&QSE_MAP_VPTR(pair));
|
||||
run, tgt, (qse_awk_val_t**)&QSE_HTB_VPTR(pair));
|
||||
if (tmp == QSE_NULL) return -1;
|
||||
*ref = tmp;
|
||||
}
|
||||
@ -5990,7 +5990,7 @@ static int get_reference (
|
||||
static qse_awk_val_t** get_reference_indexed (
|
||||
qse_awk_rtx_t* run, qse_awk_nde_var_t* nde, qse_awk_val_t** val)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
qse_char_t* str;
|
||||
qse_size_t len;
|
||||
qse_char_t idxbuf[IDXBUFSIZE];
|
||||
@ -6024,10 +6024,10 @@ static qse_awk_val_t** get_reference_indexed (
|
||||
str = idxnde_to_str (run, nde->idx, idxbuf, &len);
|
||||
if (str == QSE_NULL) return QSE_NULL;
|
||||
|
||||
pair = qse_map_search ((*(qse_awk_val_map_t**)val)->map, str, len);
|
||||
pair = qse_htb_search ((*(qse_awk_val_map_t**)val)->map, str, len);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
pair = qse_map_upsert (
|
||||
pair = qse_htb_upsert (
|
||||
(*(qse_awk_val_map_t**)val)->map,
|
||||
str, len, qse_awk_val_nil, 0);
|
||||
if (pair == QSE_NULL)
|
||||
@ -6037,11 +6037,11 @@ static qse_awk_val_t** get_reference_indexed (
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
qse_awk_rtx_refupval (run, QSE_MAP_VPTR(pair));
|
||||
qse_awk_rtx_refupval (run, QSE_HTB_VPTR(pair));
|
||||
}
|
||||
|
||||
if (str != idxbuf) QSE_AWK_FREE (run->awk, str);
|
||||
return (qse_awk_val_t**)&QSE_MAP_VPTR(pair);
|
||||
return (qse_awk_val_t**)&QSE_HTB_VPTR(pair);
|
||||
}
|
||||
|
||||
static qse_awk_val_t* eval_int (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
@ -6109,13 +6109,13 @@ static qse_awk_val_t* eval_rex (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
|
||||
static qse_awk_val_t* eval_named (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
pair = qse_map_search (run->named,
|
||||
pair = qse_htb_search (run->named,
|
||||
((qse_awk_nde_var_t*)nde)->id.name.ptr,
|
||||
((qse_awk_nde_var_t*)nde)->id.name.len);
|
||||
|
||||
return (pair == QSE_NULL)? qse_awk_val_nil: QSE_MAP_VPTR(pair);
|
||||
return (pair == QSE_NULL)? qse_awk_val_nil: QSE_HTB_VPTR(pair);
|
||||
}
|
||||
|
||||
static qse_awk_val_t* eval_gbl (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
@ -6136,7 +6136,7 @@ static qse_awk_val_t* eval_arg (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
static qse_awk_val_t* eval_indexed (
|
||||
qse_awk_rtx_t* run, qse_awk_nde_var_t* nde, qse_awk_val_t** val)
|
||||
{
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
qse_char_t* str;
|
||||
qse_size_t len;
|
||||
qse_char_t idxbuf[IDXBUFSIZE];
|
||||
@ -6170,22 +6170,22 @@ static qse_awk_val_t* eval_indexed (
|
||||
str = idxnde_to_str (run, nde->idx, idxbuf, &len);
|
||||
if (str == QSE_NULL) return QSE_NULL;
|
||||
|
||||
pair = qse_map_search ((*(qse_awk_val_map_t**)val)->map, str, len);
|
||||
pair = qse_htb_search ((*(qse_awk_val_map_t**)val)->map, str, len);
|
||||
if (str != idxbuf) QSE_AWK_FREE (run->awk, str);
|
||||
|
||||
return (pair == QSE_NULL)? qse_awk_val_nil:
|
||||
(qse_awk_val_t*)QSE_MAP_VPTR(pair);
|
||||
(qse_awk_val_t*)QSE_HTB_VPTR(pair);
|
||||
}
|
||||
|
||||
static qse_awk_val_t* eval_namedidx (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
{
|
||||
qse_awk_nde_var_t* tgt = (qse_awk_nde_var_t*)nde;
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_pair_t* pair;
|
||||
|
||||
pair = qse_map_search (run->named, tgt->id.name.ptr, tgt->id.name.len);
|
||||
pair = qse_htb_search (run->named, tgt->id.name.ptr, tgt->id.name.len);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
pair = qse_map_upsert (run->named,
|
||||
pair = qse_htb_upsert (run->named,
|
||||
tgt->id.name.ptr, tgt->id.name.len, qse_awk_val_nil, 0);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
@ -6193,10 +6193,10 @@ static qse_awk_val_t* eval_namedidx (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
qse_awk_rtx_refupval (run, QSE_MAP_VPTR(pair));
|
||||
qse_awk_rtx_refupval (run, QSE_HTB_VPTR(pair));
|
||||
}
|
||||
|
||||
return eval_indexed (run, tgt, (qse_awk_val_t**)&QSE_MAP_VPTR(pair));
|
||||
return eval_indexed (run, tgt, (qse_awk_val_t**)&QSE_HTB_VPTR(pair));
|
||||
}
|
||||
|
||||
static qse_awk_val_t* eval_gblidx (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: std.c 320 2009-12-21 12:29:52Z hyunghwan.chung $
|
||||
* $Id: std.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -800,8 +800,8 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod)
|
||||
qse_sio_t* sio;
|
||||
const qse_char_t* file;
|
||||
qse_awk_val_t* argv;
|
||||
qse_map_t* map;
|
||||
qse_map_pair_t* pair;
|
||||
qse_htb_t* map;
|
||||
qse_htb_pair_t* pair;
|
||||
qse_char_t ibuf[128];
|
||||
qse_size_t ibuflen;
|
||||
qse_awk_val_t* v;
|
||||
@ -849,10 +849,10 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod)
|
||||
rtx->awk, rxtn->c.in.index + 1, 10, QSE_NULL,
|
||||
ibuf, QSE_COUNTOF(ibuf));
|
||||
|
||||
pair = qse_map_search (map, ibuf, ibuflen);
|
||||
pair = qse_htb_search (map, ibuf, ibuflen);
|
||||
QSE_ASSERT (pair != QSE_NULL);
|
||||
|
||||
v = QSE_MAP_VPTR(pair);
|
||||
v = QSE_HTB_VPTR(pair);
|
||||
QSE_ASSERT (v != QSE_NULL);
|
||||
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: val.c 312 2009-12-10 13:03:54Z hyunghwan.chung $
|
||||
* $Id: val.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -362,7 +362,7 @@ qse_awk_val_t* qse_awk_rtx_makerexval (
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
static void free_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
static void free_mapval (qse_htb_t* map, void* dptr, qse_size_t dlen)
|
||||
{
|
||||
qse_awk_rtx_t* rtx = *(qse_awk_rtx_t**)QSE_XTN(map);
|
||||
|
||||
@ -375,7 +375,7 @@ static void free_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
qse_awk_rtx_refdownval (rtx, dptr);
|
||||
}
|
||||
|
||||
static void same_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
static void same_mapval (qse_htb_t* map, void* dptr, qse_size_t dlen)
|
||||
{
|
||||
qse_awk_rtx_t* run = *(qse_awk_rtx_t**)QSE_XTN(map);
|
||||
#ifdef DEBUG_VAL
|
||||
@ -403,7 +403,7 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
|
||||
val->type = QSE_AWK_VAL_MAP;
|
||||
val->ref = 0;
|
||||
val->nstr = 0;
|
||||
val->map = qse_map_open (
|
||||
val->map = qse_htb_open (
|
||||
run, 256, 70, free_mapval, same_mapval, run->awk->mmgr);
|
||||
if (val->map == QSE_NULL)
|
||||
{
|
||||
@ -416,7 +416,7 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
|
||||
val = (qse_awk_val_map_t*) QSE_AWK_ALLOC (
|
||||
rtx->awk,
|
||||
QSE_SIZEOF(qse_awk_val_map_t) +
|
||||
QSE_SIZEOF(qse_map_t) +
|
||||
QSE_SIZEOF(qse_htb_t) +
|
||||
QSE_SIZEOF(rtx));
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
@ -427,9 +427,9 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
|
||||
val->type = QSE_AWK_VAL_MAP;
|
||||
val->ref = 0;
|
||||
val->nstr = 0;
|
||||
val->map = (qse_map_t*)(val + 1);
|
||||
val->map = (qse_htb_t*)(val + 1);
|
||||
|
||||
val->map = qse_map_init (val->map, rtx->awk->mmgr, 256, 70);
|
||||
val->map = qse_htb_init (val->map, rtx->awk->mmgr, 256, 70);
|
||||
if (val->map == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (rtx->awk, val);
|
||||
@ -440,14 +440,14 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
|
||||
|
||||
/* the key is copied inline into a pair and is freed when the pair
|
||||
* is destroyed */
|
||||
qse_map_setcopier (val->map, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (val->map, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
qse_htb_setcopier (val->map, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
|
||||
qse_htb_setscale (val->map, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
/* not setting copier for a value means that the pointer to the data
|
||||
* allocated somewhere else is remembered in a pair. but the freeing
|
||||
* the actual value is handled by free_mapval and same_mapval */
|
||||
qse_map_setfreeer (val->map, QSE_MAP_VAL, free_mapval);
|
||||
qse_map_setkeeper (val->map, same_mapval);
|
||||
qse_htb_setfreeer (val->map, QSE_HTB_VAL, free_mapval);
|
||||
qse_htb_setkeeper (val->map, same_mapval);
|
||||
/* END CHECK */
|
||||
|
||||
return (qse_awk_val_t*)val;
|
||||
@ -559,7 +559,7 @@ void qse_awk_rtx_freeval (
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_MAP)
|
||||
{
|
||||
qse_map_fini (((qse_awk_val_map_t*)val)->map);
|
||||
qse_htb_fini (((qse_awk_val_map_t*)val)->map);
|
||||
QSE_AWK_FREE (rtx->awk, val);
|
||||
}
|
||||
else if (val->type == QSE_AWK_VAL_REF)
|
||||
@ -1131,19 +1131,19 @@ int qse_awk_rtx_strtonum (
|
||||
#define DPRINTF run->awk->prmfns->dprintf
|
||||
#define DCUSTOM run->awk->prmfns->data
|
||||
|
||||
static qse_map_walk_t print_pair (
|
||||
qse_map_t* map, qse_map_pair_t* pair, void* arg)
|
||||
static qse_htb_walk_t print_pair (
|
||||
qse_htb_t* map, qse_htb_pair_t* pair, void* arg)
|
||||
{
|
||||
qse_awk_rtx_t* run = (qse_awk_rtx_t*)arg;
|
||||
|
||||
QSE_ASSERT (run == *(qse_awk_rtx_t**)QSE_XTN(map));
|
||||
|
||||
DPRINTF (DCUSTOM, QSE_T(" %.*s=>"),
|
||||
(int)QSE_MAP_KLEN(pair), QSE_MAP_KPTR(pair));
|
||||
qse_awk_dprintval ((qse_awk_rtx_t*)arg, QSE_MAP_VPTR(pair));
|
||||
(int)QSE_HTB_KLEN(pair), QSE_HTB_KPTR(pair));
|
||||
qse_awk_dprintval ((qse_awk_rtx_t*)arg, QSE_HTB_VPTR(pair));
|
||||
DPRINTF (DCUSTOM, QSE_T(" "));
|
||||
|
||||
return QSE_MAP_WALK_FORWARD;
|
||||
return QSE_HTB_WALK_FORWARD;
|
||||
}
|
||||
|
||||
void qse_awk_dprintval (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
@ -1194,7 +1194,7 @@ void qse_awk_dprintval (qse_awk_rtx_t* run, qse_awk_val_t* val)
|
||||
|
||||
case QSE_AWK_VAL_MAP:
|
||||
DPRINTF (DCUSTOM, QSE_T("MAP["));
|
||||
qse_map_walk (((qse_awk_val_map_t*)val)->map, print_pair, run);
|
||||
qse_htb_walk (((qse_awk_val_map_t*)val)->map, print_pair, run);
|
||||
DPRINTF (DCUSTOM, QSE_T("]"));
|
||||
break;
|
||||
|
||||
|
Reference in New Issue
Block a user