fixing code to utilize ase_map_setscale

This commit is contained in:
2008-09-27 02:01:24 +00:00
parent 8480da56d1
commit ca18186e94
8 changed files with 135 additions and 91 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: awk.c 385 2008-09-25 11:06:33Z baconevi $
* $Id: awk.c 389 2008-09-26 08:01:24Z baconevi $
*
* {License}
*/
@ -77,6 +77,8 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
*(ase_awk_t**)ASE_MAP_EXTENSION(awk->wtab) = awk;
ase_map_setcopier (awk->wtab, ASE_MAP_KEY, ASE_MAP_COPIER_INLINE);
ase_map_setcopier (awk->wtab, ASE_MAP_VAL, ASE_MAP_COPIER_INLINE);
ase_map_setscale (awk->wtab, ASE_MAP_KEY, ASE_SIZEOF(ase_char_t));
ase_map_setscale (awk->wtab, ASE_MAP_VAL, ASE_SIZEOF(ase_char_t));
awk->rwtab = ase_map_open (mmgr, ASE_SIZEOF(awk), 512, 70);
if (awk->rwtab == ASE_NULL)
@ -89,9 +91,10 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
*(ase_awk_t**)ASE_MAP_EXTENSION(awk->rwtab) = awk;
ase_map_setcopier (awk->rwtab, ASE_MAP_KEY, ASE_MAP_COPIER_INLINE);
ase_map_setcopier (awk->rwtab, ASE_MAP_VAL, ASE_MAP_COPIER_INLINE);
ase_map_setscale (awk->rwtab, ASE_MAP_KEY, ASE_SIZEOF(ase_char_t));
ase_map_setscale (awk->rwtab, ASE_MAP_VAL, ASE_SIZEOF(ase_char_t));
/* TODO: initial map size?? */
/*awk->tree.afns = ase_map_open (awk, 512, 70, free_afn, ASE_NULL, mmgr);*/
awk->tree.afns = ase_map_open (mmgr, ASE_SIZEOF(awk), 512, 70);
if (awk->tree.afns == ASE_NULL)
{
@ -102,9 +105,10 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
return ASE_NULL;
}
*(ase_awk_t**)ASE_MAP_EXTENSION(awk->tree.afns) = awk;
ase_map_setcopier (awk->tree.afns, ASE_MAP_KEY, ASE_MAP_COPIER_INLINE);
ase_map_setfreeer (awk->tree.afns, ASE_MAP_VAL, free_afn);
ase_map_setcale (awk->tree.afns, ASE_MAP_KEY, ASE_SIZEOF(ase_char_t));
/*awk->parse.afns = ase_map_open (awk, 256, 70, ASE_NULL, ASE_NULL, mmgr);*/
awk->parse.afns = ase_map_open (mmgr, ASE_SIZEOF(awk), 256, 70);
if (awk->parse.afns == ASE_NULL)
{
@ -116,9 +120,10 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
return ASE_NULL;
}
*(ase_awk_t**)ASE_MAP_EXTENSION(awk->parse.afns) = awk;
ase_map_setcopier (awk->parse.afns, ASE_MAP_KEY, ASE_MAP_COPIER_INLINE);
ase_map_setcopier (awk->parse.afns, ASE_MAP_VAL, ASE_MAP_COPIER_INLINE);
ase_map_setscale (awk->parse.afns, ASE_MAP_KEY, ASE_SIZEOF(ase_char_t));
/*awk->parse.named = ase_map_open (awk, 256, 70, ASE_NULL, ASE_NULL, mmgr);*/
awk->parse.named = ase_map_open (mmgr, ASE_SIZEOF(awk), 256, 70);
if (awk->parse.named == ASE_NULL)
{
@ -131,7 +136,9 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
return ASE_NULL;
}
*(ase_awk_t**)ASE_MAP_EXTENSION(awk->parse.named) = awk;
ase_map_setcopier (awk->parse.named, ASE_MAP_KEY, ASE_MAP_COPIER_INLINE);
ase_map_setcopier (awk->parse.named, ASE_MAP_VAL, ASE_MAP_COPIER_INLINE);
ase_map_setscale (awk->parse.named, ASE_MAP_KEY, ASE_SIZEOF(ase_char_t));
if (ase_awk_tab_open (&awk->parse.globals, awk) == ASE_NULL)
{
@ -205,7 +212,6 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
awk->bfn.sys = ASE_NULL;
/*awk->bfn.user = ASE_NULL;*/
/*awk->bfn.user = ase_map_open (awk, 512, 70, free_bfn, ASE_NULL, mmgr);*/
awk->bfn.user = ase_map_open (mmgr, ASE_SIZEOF(awk), 512, 70);
if (awk->bfn.user == ASE_NULL)
{
@ -224,6 +230,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
*(ase_awk_t**)ASE_MAP_EXTENSION(awk->bfn.user) = awk;
ase_map_setcopier (awk->bfn.user, ASE_MAP_KEY, ASE_MAP_COPIER_INLINE);
ase_map_setfreeer (awk->bfn.user, ASE_MAP_VAL, free_bfn);
ase_map_setscale (awk->bfn.user, ASE_MAP_KEY, ASE_SIZEOF(ase_char_t));
awk->parse.depth.cur.block = 0;
awk->parse.depth.cur.loop = 0;

View File

@ -1,5 +1,5 @@
/*
* $Id: func.c 382 2008-09-24 11:36:45Z baconevi $
* $Id: func.c 389 2008-09-26 08:01:24Z baconevi $
*
* {License}
*/
@ -99,7 +99,7 @@ void* ase_awk_addfunc (
bfn->handler = handler;
if (ase_map_insert (awk->bfn.user,
(ase_char_t*)name, ASE_NCTONB(name_len), bfn, 0) == ASE_NULL)
(ase_char_t*)name, name_len, bfn, 0) == ASE_NULL)
{
ASE_AWK_FREE (awk, bfn);
ase_awk_seterrnum (awk, ASE_AWK_ENOMEM);
@ -112,7 +112,7 @@ void* ase_awk_addfunc (
int ase_awk_delfunc (
ase_awk_t* awk, const ase_char_t* name, ase_size_t name_len)
{
if (ase_map_remove (awk->bfn.user, name, ASE_NCTONB(name_len)) == -1)
if (ase_map_remove (awk->bfn.user, name, name_len) == -1)
{
ase_cstr_t errarg;
@ -146,12 +146,12 @@ ase_awk_bfn_t* ase_awk_getbfn (
(awk->option & bfn->valid) != bfn->valid) continue;
pair = ase_map_search (
awk->wtab, bfn->name.ptr, ASE_NCTONB(bfn->name.len));
awk->wtab, bfn->name.ptr, bfn->name.len);
if (pair != ASE_NULL)
{
/* found in the customized word table */
k = ASE_MAP_VPTR(pair);
l = ASE_MAP_VCLEN(pair);
l = ASE_MAP_VLEN(pair);
}
else
{
@ -166,21 +166,21 @@ ase_awk_bfn_t* ase_awk_getbfn (
* because I'm trying to support ase_awk_setword in
* a very flimsy way here. Would it be better to drop
* ase_awk_setword totally? */
pair = ase_map_search (awk->rwtab, name, ASE_NCTONB(len));
pair = ase_map_search (awk->rwtab, name, len);
if (pair != ASE_NULL)
{
/* the current name is a target name for
* one of the original word. */
k = ASE_MAP_VPTR(pair);
l = ASE_MAP_VCLEN(pair);
l = ASE_MAP_VLEN(pair);
}
else
{
pair = ase_map_search (awk->wtab, name, ASE_NCTONB(len));
pair = ase_map_search (awk->wtab, name, len);
if (pair != ASE_NULL)
{
k = ASE_MAP_VPTR(pair);
l = ASE_MAP_VCLEN(pair);
l = ASE_MAP_VLEN(pair);
if (ase_strxncmp (name, len, k, l) != 0)
{
@ -204,7 +204,7 @@ ase_awk_bfn_t* ase_awk_getbfn (
}
/* END NOTE */
pair = ase_map_search (awk->bfn.user, k, ASE_NCTONB(l));
pair = ase_map_search (awk->bfn.user, k, l);
if (pair == ASE_NULL) return ASE_NULL;
bfn = (ase_awk_bfn_t*)ASE_MAP_VPTR(pair);
@ -800,7 +800,7 @@ static int bfn_split (
if (ase_map_insert (
((ase_awk_val_map_t*)t1)->map,
key, ASE_NCTONB(key_len), t2, 0) == ASE_NULL)
key, key_len, t2, 0) == ASE_NULL)
{
ase_awk_refdownval (run, t2);

View File

@ -1,5 +1,5 @@
/*
* $Id: parse.c 381 2008-09-24 11:07:24Z baconevi $
* $Id: parse.c 389 2008-09-26 08:01:24Z baconevi $
*
* {License}
*/
@ -464,11 +464,11 @@ ase_cstr_t* ase_awk_getkw (ase_awk_t* awk, int id, ase_cstr_t* s)
s->ptr = kwtab[id].name;
s->len = kwtab[id].name_len;
p = ase_map_search (awk->wtab, s->ptr, ASE_NCTONB(s->len));
p = ase_map_search (awk->wtab, s->ptr, s->len);
if (p != ASE_NULL)
{
s->ptr = ASE_MAP_VPTR(p);
s->len = ASE_MAP_VCLEN(p);
s->len = ASE_MAP_VLEN(p);
}
return s;
@ -558,7 +558,7 @@ static int parse (ase_awk_t* awk)
SETERRARG (awk, ASE_AWK_EFNNONE,
*(ase_size_t*)ASE_MAP_VPTR(p),
ASE_MAP_KPTR(p),
ASE_MAP_KCLEN(p));
ASE_MAP_KLEN(p));
EXIT_PARSE(-1);
}
@ -1097,11 +1097,11 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
/* do some trick to save a string. make it back-point at the key part
* of the pair */
afn->name.ptr = ASE_MAP_KPTR(pair);
afn->name.len = ASE_MAP_KCLEN(pair);
afn->name.len = ASE_MAP_KLEN(pair);
ASE_AWK_FREE (awk, name_dup);
/* remove an undefined function call entry from the parse.afn table */
ase_map_remove (awk->parse.afns, afn->name.ptr, ASE_NCTONB(name_len));
ase_map_remove (awk->parse.afns, afn->name.ptr, name_len);
return body;
}
@ -1487,7 +1487,7 @@ static int add_global (
/* check if it conflict with a function name
* caught in the function call table */
if (ase_map_search (awk->parse.afns, name, ASE_NCTONB(len)) != ASE_NULL)
if (ase_map_search (awk->parse.afns, name, len) != ASE_NULL)
{
SETERRARG (
awk, ASE_AWK_EAFNRED, line,
@ -1677,7 +1677,7 @@ static ase_awk_t* collect_locals (
/* check if it conflict with a function name
* caught in the function call table */
if (ase_map_search (awk->parse.afns,
local.ptr, ASE_NCTONB(local.len)) != ASE_NULL)
local.ptr, local.len) != ASE_NULL)
{
SETERRARG (
awk, ASE_AWK_EAFNRED, awk->token.line,
@ -3265,7 +3265,7 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
if (awk->option & ASE_AWK_IMPLICIT)
{
if (ase_map_search (awk->parse.named,
name_dup, ASE_NCTONB(name_len)) != ASE_NULL)
name_dup, name_len) != ASE_NULL)
{
/* a function call conflicts with a named variable */
SETERRARG (awk, ASE_AWK_EVARRED, line, name_dup, name_len);
@ -3324,7 +3324,7 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
}
if (ase_map_search (awk->parse.afns,
name_dup, ASE_NCTONB(name_len)) != ASE_NULL)
name_dup, name_len) != ASE_NULL)
{
/* is it one of the function calls found so far? */
SETERRARG (awk, ASE_AWK_EAFNRED, line, name_dup, name_len);
@ -3344,7 +3344,7 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
/* collect unique instances of a named variables for reference */
if (ase_map_upsert (awk->parse.named,
name_dup, ASE_NCTONB(name_len),
name_dup, name_len,
&line, ASE_SIZEOF(line)) == ASE_NULL)
{
SETERRLIN (awk, ASE_AWK_ENOMEM, line);
@ -3507,8 +3507,7 @@ static ase_awk_nde_t* parse_hashidx (
}
if (ase_map_search (
awk->parse.afns,
name, ASE_NCTONB(name_len)) != ASE_NULL)
awk->parse.afns, name, name_len) != ASE_NULL)
{
/* is it one of the function calls found so far? */
SETERRARG (awk, ASE_AWK_EAFNRED, line, name, name_len);
@ -3660,8 +3659,7 @@ static ase_awk_nde_t* parse_fncall (
/* store a non-builtin function call into the parse.afns table */
if (ase_map_upsert (
awk->parse.afns,
name, ASE_NCTONB(name_len),
awk->parse.afns, name, name_len,
&line, ASE_SIZEOF(line)) == ASE_NULL)
{
ASE_AWK_FREE (awk, call);

View File

@ -1,5 +1,5 @@
/*
* $Id: val.c 381 2008-09-24 11:07:24Z baconevi $
* $Id: val.c 389 2008-09-26 08:01:24Z baconevi $
*
* {License}
*/
@ -506,6 +506,7 @@ ase_awk_val_t* ase_awk_makemapval (ase_awk_run_t* run)
/* the key is copied inline into a pair and is freed when the pair
* is destroyed */
ase_map_setcopier (val->map, ASE_MAP_KEY, ASE_MAP_COPIER_INLINE);
ase_map_setscale (val->map, ASE_MAP_KEY, ASE_SIZEOF(ase_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
@ -1141,7 +1142,7 @@ static ase_map_walk_t print_pair (
ASE_ASSERT (run == *(ase_awk_run_t**)ASE_MAP_EXTENSION(map));
DPRINTF (DCUSTOM, ASE_T(" %.*s=>"),
(int)ASE_MAP_KCLEN(pair), ASE_MAP_KPTR(pair));
(int)ASE_MAP_KLEN(pair), ASE_MAP_KPTR(pair));
ase_awk_dprintval ((ase_awk_run_t*)arg, ASE_MAP_VPTR(pair));
DPRINTF (DCUSTOM, ASE_T(" "));