just a temporary commit while changing code for new convention

This commit is contained in:
hyung-hwan 2008-09-25 05:07:24 +00:00
parent 327fd11974
commit 3dcab112d9
7 changed files with 200 additions and 179 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: macros.h 354 2008-08-31 10:57:24Z baconevi $
* $Id: macros.h 381 2008-09-24 11:07:24Z baconevi $
*
* {License}
*/
@ -66,8 +66,10 @@
} \
} while (0);
#define ASE_NCHARS_TO_NBYTES(x) ((x)*sizeof(ase_char_t))
#define ASE_NBYTES_TO_NCHARS(x) ((x)/sizeof(ase_char_t))
/* number of characters to number of bytes */
#define ASE_NCTONB(x) ((x)*sizeof(ase_char_t))
/* number of bytes to number of characters */
#define ASE_NBTONC(x) ((x)/sizeof(ase_char_t))
#define ASE_MQ_I(val) #val
#define ASE_MQ(val) ASE_MQ_I(val)

View File

@ -1,5 +1,5 @@
/*
* $Id: awk.c 380 2008-09-24 08:16:41Z baconevi $
* $Id: awk.c 381 2008-09-24 11:07:24Z baconevi $
*
* {License}
*/
@ -61,7 +61,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
ASE_MEMSET (awk, 0, ASE_SIZEOF(ase_awk_t) + ext);
awk->mmgr = mmgr;
if (ase_str_open (&awk->token.name, 128, mmgr) == ASE_NULL)
if (ase_str_init (&awk->token.name, mmgr, 128) == ASE_NULL)
{
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
@ -82,7 +82,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
if (awk->rwtab == ASE_NULL)
{
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
@ -97,7 +97,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
{
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
@ -111,11 +111,12 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
ase_map_close (awk->tree.afns);
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
*(ase_awk_t**)ASE_MAP_EXTENSION(awk->parse.afns) = awk;
ase_map_setcopier (awk->parse.afns, ASE_MAP_VAL, ASE_MAP_COPIER_INLINE);
/*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);
@ -125,11 +126,12 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
ase_map_close (awk->tree.afns);
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
*(ase_awk_t**)ASE_MAP_EXTENSION(awk->parse.named) = awk;
ase_map_setcopier (awk->parse.named, ASE_MAP_VAL, ASE_MAP_COPIER_INLINE);
if (ase_awk_tab_open (&awk->parse.globals, awk) == ASE_NULL)
{
@ -138,7 +140,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
ase_map_close (awk->tree.afns);
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
@ -151,7 +153,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
ase_map_close (awk->tree.afns);
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
@ -165,7 +167,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
ase_map_close (awk->tree.afns);
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
@ -215,7 +217,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
ase_map_close (awk->tree.afns);
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
@ -246,7 +248,7 @@ ase_awk_t* ase_awk_open (ase_mmgr_t* mmgr, ase_size_t ext)
ase_map_close (awk->tree.afns);
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
@ -273,7 +275,7 @@ int ase_awk_close (ase_awk_t* awk)
ase_map_close (awk->rwtab);
ase_map_close (awk->wtab);
ase_str_close (&awk->token.name);
ase_str_fini (&awk->token.name);
for (i = 0; i < ASE_COUNTOF(awk->errstr); i++)
{

View File

@ -1,5 +1,5 @@
/*
* $Id: parse.c 372 2008-09-23 09:51:24Z baconevi $
* $Id: parse.c 381 2008-09-24 11:07:24Z baconevi $
*
* {License}
*/
@ -226,7 +226,7 @@ static int is_plain_var (ase_awk_nde_t* nde);
static int is_var (ase_awk_nde_t* nde);
static int deparse (ase_awk_t* awk);
static int deparse_func (ase_map_pair_t* pair, void* arg);
static ase_map_walk_t deparse_func (ase_map_t* map, ase_map_pair_t* pair, void* arg);
static int put_char (ase_awk_t* awk, ase_char_t c);
static int flush_out (ase_awk_t* awk);
@ -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_NCHARS_TO_NBYTES(s->len));
p = ase_map_search (awk->wtab, s->ptr, ASE_NCTONB(s->len));
if (p != ASE_NULL)
{
s->ptr = ASE_MAP_VPTR(p);
s->len = ASE_NBYTES_TO_NCHARS(ASE_MAP_VLEN(p));
s->len = ASE_MAP_VCLEN(p);
}
return s;
@ -555,12 +555,10 @@ static int parse (ase_awk_t* awk)
ASE_MAP_KPTR(p), ASE_MAP_KLEN(p)) == ASE_NULL)
{
/* TODO: set better error no & line */
/* this line number might be truncated as
* sizeof(line) could be > sizeof(void*) */
SETERRARG (awk, ASE_AWK_EFNNONE,
(ase_size_t)p->val,
*(ase_size_t*)ASE_MAP_VPTR(p),
ASE_MAP_KPTR(p),
ASE_NBYTES_TO_NCHARS(ASE_MAP_KELN(p)));
ASE_MAP_KCLEN(p));
EXIT_PARSE(-1);
}
@ -1077,8 +1075,8 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
return ASE_NULL;
}
afn->name = ASE_NULL; /* function name set below */
afn->name_len = 0;
afn->name.ptr = ASE_NULL; /* function name is set below */
afn->name.len = 0;
afn->nargs = nargs;
afn->body = body;
@ -1096,12 +1094,14 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
/* duplicate functions should have been detected previously */
ASE_ASSERT (n != 0);
afn->name = ASE_PAIR_KEYPTR(pair); /* do some trick to save a string. */
afn->name_len = ASE_PAIR_KEYLEN(pair);
/* 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);
ASE_AWK_FREE (awk, name_dup);
/* remove the undefined function call entries from parse.afn table */
ase_map_remove (awk->parse.afns, afn->name, name_len);
/* remove an undefined function call entry from the parse.afn table */
ase_map_remove (awk->parse.afns, afn->name.ptr, ASE_NCTONB(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, len) != ASE_NULL)
if (ase_map_search (awk->parse.afns, name, ASE_NCTONB(len)) != ASE_NULL)
{
SETERRARG (
awk, ASE_AWK_EAFNRED, line,
@ -1627,8 +1627,7 @@ static ase_awk_t* collect_globals (ase_awk_t* awk)
static ase_awk_t* collect_locals (
ase_awk_t* awk, ase_size_t nlocals, ase_bool_t istop)
{
ase_char_t* local;
ase_size_t local_len;
ase_xstr_t local;
ase_size_t n;
while (1)
@ -1639,8 +1638,8 @@ static ase_awk_t* collect_locals (
return ASE_NULL;
}
local = ASE_STR_PTR(&awk->token.name);
local_len = ASE_STR_LEN(&awk->token.name);
local.ptr = ASE_STR_PTR(&awk->token.name);
local.len = ASE_STR_LEN(&awk->token.name);
#if 0
if (awk->option & ASE_AWK_UNIQUEFN)
@ -1650,11 +1649,11 @@ static ase_awk_t* collect_locals (
/* check if it conflict with a builtin function name
* function f() { local length; } */
if (ase_awk_getbfn (awk, local, local_len) != ASE_NULL)
if (ase_awk_getbfn (awk, local.ptr, local.len) != ASE_NULL)
{
SETERRARG (
awk, ASE_AWK_EBFNRED, awk->token.line,
local, local_len);
local.ptr, local.len);
return ASE_NULL;
}
@ -1664,24 +1663,25 @@ static ase_awk_t* collect_locals (
{
iscur = (ase_strxncmp (
awk->tree.cur_afn.ptr, awk->tree.cur_afn.len,
local, local_len) == 0);
local.ptr, local.len) == 0);
}
if (iscur || ase_map_search (awk->tree.afns, local, local_len) != ASE_NULL)
if (iscur || ase_map_search (awk->tree.afns, local.ptr, local.len) != ASE_NULL)
{
SETERRARG (
awk, ASE_AWK_EAFNRED, awk->token.line,
local, local_len);
local.ptr, local.len);
return ASE_NULL;
}
/* check if it conflict with a function name
* caught in the function call table */
if (ase_map_search (awk->parse.afns, local, local_len) != ASE_NULL)
if (ase_map_search (awk->parse.afns,
local.ptr, ASE_NCTONB(local.len)) != ASE_NULL)
{
SETERRARG (
awk, ASE_AWK_EAFNRED, awk->token.line,
local, local_len);
local.ptr, local.len);
return ASE_NULL;
}
}
@ -1690,12 +1690,12 @@ static ase_awk_t* collect_locals (
if (istop)
{
/* check if it conflicts with a paremeter name */
n = ase_awk_tab_find (&awk->parse.params, 0, local, local_len);
n = ase_awk_tab_find (&awk->parse.params, 0, local.ptr, local.len);
if (n != (ase_size_t)-1)
{
SETERRARG (
awk, ASE_AWK_EPARRED, awk->token.line,
local, local_len);
local.ptr, local.len);
return ASE_NULL;
}
}
@ -1704,17 +1704,17 @@ static ase_awk_t* collect_locals (
n = ase_awk_tab_find (
&awk->parse.locals,
nlocals, /*((awk->option&ASE_AWK_SHADING)? nlocals:0)*/
local, local_len);
local.ptr, local.len);
if (n != (ase_size_t)-1)
{
SETERRARG (
awk, ASE_AWK_EDUPLCL, awk->token.line,
local, local_len);
local.ptr, local.len);
return ASE_NULL;
}
/* check if it conflicts with global variable names */
n = find_global (awk, local, local_len);
n = find_global (awk, local.ptr, local.len);
if (n != (ase_size_t)-1)
{
if (n < awk->tree.nbglobals)
@ -1722,7 +1722,7 @@ static ase_awk_t* collect_locals (
/* conflicting with a static global variable */
SETERRARG (
awk, ASE_AWK_EDUPLCL, awk->token.line,
local, local_len);
local.ptr, local.len);
return ASE_NULL;
}
@ -1732,7 +1732,7 @@ static ase_awk_t* collect_locals (
/* conflicting with a normal global variable */
SETERRARG (
awk, ASE_AWK_EDUPLCL, awk->token.line,
local, local_len);
local.ptr, local.len);
return ASE_NULL;
}
#endif
@ -1745,7 +1745,7 @@ static ase_awk_t* collect_locals (
}
if (ase_awk_tab_add (
&awk->parse.locals, local, local_len) == (ase_size_t)-1)
&awk->parse.locals, local.ptr, local.len) == (ase_size_t)-1)
{
SETERRLIN (awk, ASE_AWK_ENOMEM, awk->token.line);
return ASE_NULL;
@ -3179,9 +3179,9 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
nde->type = ASE_AWK_NDE_LOCAL;
nde->line = line;
nde->next = ASE_NULL;
/*nde->id.name = ASE_NULL;*/
nde->id.name = name_dup;
nde->id.name_len = name_len;
/*nde->id.name.ptr = ASE_NULL;*/
nde->id.name.ptr = name_dup;
nde->id.name.len = name_len;
nde->id.idxa = idxa;
nde->idx = ASE_NULL;
@ -3215,8 +3215,8 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
nde->line = line;
nde->next = ASE_NULL;
/*nde->id.name = ASE_NULL;*/
nde->id.name = name_dup;
nde->id.name_len = name_len;
nde->id.name.ptr = name_dup;
nde->id.name.len = name_len;
nde->id.idxa = idxa;
nde->idx = ASE_NULL;
@ -3250,8 +3250,8 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
nde->line = line;
nde->next = ASE_NULL;
/*nde->id.name = ASE_NULL;*/
nde->id.name = name_dup;
nde->id.name_len = name_len;
nde->id.name.ptr = name_dup;
nde->id.name.len = name_len;
nde->id.idxa = idxa;
nde->idx = ASE_NULL;
@ -3264,7 +3264,8 @@ 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, name_len) != ASE_NULL)
if (ase_map_search (awk->parse.named,
name_dup, ASE_NCTONB(name_len)) != ASE_NULL)
{
/* a function call conflicts with a named variable */
SETERRARG (awk, ASE_AWK_EVARRED, line, name_dup, name_len);
@ -3322,7 +3323,8 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
goto exit_func;
}
if (ase_map_search (awk->parse.afns, name_dup, name_len) != ASE_NULL)
if (ase_map_search (awk->parse.afns,
name_dup, ASE_NCTONB(name_len)) != ASE_NULL)
{
/* is it one of the function calls found so far? */
SETERRARG (awk, ASE_AWK_EAFNRED, line, name_dup, name_len);
@ -3335,14 +3337,15 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
nde->type = ASE_AWK_NDE_NAMED;
nde->line = line;
nde->next = ASE_NULL;
nde->id.name = name_dup;
nde->id.name_len = name_len;
nde->id.name.ptr = name_dup;
nde->id.name.len = name_len;
nde->id.idxa = (ase_size_t)-1;
nde->idx = ASE_NULL;
/* collect unique instances of a named variables for reference */
if (ase_map_upsert (awk->parse.named,
name_dup, name_len, (void*)line) == ASE_NULL)
name_dup, ASE_NCTONB(name_len),
&line, ASE_SIZEOF(line)) == ASE_NULL)
{
SETERRLIN (awk, ASE_AWK_ENOMEM, line);
goto exit_func;
@ -3433,8 +3436,8 @@ static ase_awk_nde_t* parse_hashidx (
nde->line = line;
nde->next = ASE_NULL;
/*nde->id.name = ASE_NULL; */
nde->id.name = name;
nde->id.name_len = name_len;
nde->id.name.ptr = name;
nde->id.name.len = name_len;
nde->id.idxa = idxa;
nde->idx = idx;
@ -3449,8 +3452,8 @@ static ase_awk_nde_t* parse_hashidx (
nde->line = line;
nde->next = ASE_NULL;
/*nde->id.name = ASE_NULL; */
nde->id.name = name;
nde->id.name_len = name_len;
nde->id.name.ptr = name;
nde->id.name.len = name_len;
nde->id.idxa = idxa;
nde->idx = idx;
@ -3465,8 +3468,8 @@ static ase_awk_nde_t* parse_hashidx (
nde->line = line;
nde->next = ASE_NULL;
/*nde->id.name = ASE_NULL;*/
nde->id.name = name;
nde->id.name_len = name_len;
nde->id.name.ptr = name;
nde->id.name.len = name_len;
nde->id.idxa = idxa;
nde->idx = idx;
@ -3503,7 +3506,9 @@ static ase_awk_nde_t* parse_hashidx (
goto exit_func;
}
if (ase_map_search (awk->parse.afns, name, name_len) != ASE_NULL)
if (ase_map_search (
awk->parse.afns,
name, ASE_NCTONB(name_len)) != ASE_NULL)
{
/* is it one of the function calls found so far? */
SETERRARG (awk, ASE_AWK_EAFNRED, line, name, name_len);
@ -3516,8 +3521,8 @@ static ase_awk_nde_t* parse_hashidx (
nde->type = ASE_AWK_NDE_NAMEDIDX;
nde->line = line;
nde->next = ASE_NULL;
nde->id.name = name;
nde->id.name_len = name_len;
nde->id.name.ptr = name;
nde->id.name.len = name_len;
nde->id.idxa = (ase_size_t)-1;
nde->idx = idx;
@ -3653,10 +3658,11 @@ static ase_awk_nde_t* parse_fncall (
{
#endif
/* this line number might be truncated as
* sizeof(line) could be > sizeof(void*) */
if (ase_map_upsert (awk->parse.afns,
name, name_len, (void*)line) == ASE_NULL)
/* store a non-builtin function call into the parse.afns table */
if (ase_map_upsert (
awk->parse.afns,
name, ASE_NCTONB(name_len),
&line, ASE_SIZEOF(line)) == ASE_NULL)
{
ASE_AWK_FREE (awk, call);
if (head != ASE_NULL) ase_awk_clrpt (awk, head);
@ -5521,8 +5527,8 @@ static int deparse (ase_awk_t* awk)
ASE_ASSERT (awk->tree.nglobals > 0);
ase_awk_getkw (ase, KW_GLOBAL, &kw);
if (ase_awk_putsrcstrx(awk,kw.ptr,kw.len)) == -1)
ase_awk_getkw (awk, KW_GLOBAL, &kw);
if (ase_awk_putsrcstrx(awk,kw.ptr,kw.len) == -1)
{
EXIT_DEPARSE ();
}
@ -5610,8 +5616,11 @@ static int deparse (ase_awk_t* awk)
for (nde = awk->tree.begin; nde != ASE_NULL; nde = nde->next)
{
const ase_char_t* kw = ase_awk_getkw(awk,ASE_T("BEGIN"));
if (ase_awk_putsrcstr(awk,kw) == -1) EXIT_DEPARSE ();
ase_cstr_t kw;
ase_awk_getkw (awk, KW_BEGIN, &kw);
if (ase_awk_putsrcstrx (awk, kw.ptr, kw.len) == -1) EXIT_DEPARSE ();
if (ase_awk_putsrcstr (awk, ASE_T(" ")) == -1) EXIT_DEPARSE ();
if (ase_awk_prnnde (awk, nde) == -1) EXIT_DEPARSE ();
@ -5669,8 +5678,11 @@ static int deparse (ase_awk_t* awk)
for (nde = awk->tree.end; nde != ASE_NULL; nde = nde->next)
{
const ase_char_t* kw = ase_awk_getkw(awk,ASE_T("END"));
if (ase_awk_putsrcstr(awk,kw) == -1) EXIT_DEPARSE ();
ase_cstr_t kw;
ase_awk_getkw (awk, KW_END, &kw);
if (ase_awk_putsrcstrx (awk, kw.ptr, kw.len) == -1) EXIT_DEPARSE ();
if (ase_awk_putsrcstr (awk, ASE_T(" ")) == -1) EXIT_DEPARSE ();
if (ase_awk_prnnde (awk, nde) == -1) EXIT_DEPARSE ();
@ -5703,15 +5715,15 @@ exit_deparse:
static int deparse_func (ase_map_pair_t* pair, void* arg)
static ase_map_walk_t deparse_func (ase_map_t* map, ase_map_pair_t* pair, void* arg)
{
struct deparse_func_t* df = (struct deparse_func_t*)arg;
/* CHECK: */
ase_awk_afn_t* afn = (ase_awk_afn_t*)pair->vptr;
ase_awk_afn_t* afn = (ase_awk_afn_t*)ASE_MAP_VPTR(pair);
ase_size_t i, n;
ase_cstr_t kw;
ASE_ASSERT (ase_strxncmp (ASE_PAIR_KEYPTR(pair), ASE_PAIR_KEYLEN(pair), afn->name, afn->name_len) == 0);
ASE_ASSERT (ase_strxncmp (ASE_PAIR_KEYPTR(pair), ASE_PAIR_KEYLEN(pair), afn->name.ptr, afn->name.len) == 0);
#define PUT_C(x,c) \
if (put_char(x->awk,c)==-1) { \
@ -5729,10 +5741,10 @@ static int deparse_func (ase_map_pair_t* pair, void* arg)
}
ase_awk_getkw (df->awk, KW_FUNCTION, &kw);
PUT_SX (df, kw->ptr, kw->len));
PUT_SX (df, kw.ptr, kw.len);
PUT_C (df, ASE_T(' '));
PUT_S (df, afn->name);
PUT_SX (df, afn->name.ptr, afn->name.len);
PUT_S (df, ASE_T(" ("));
for (i = 0; i < afn->nargs; )

View File

@ -1,5 +1,5 @@
/*
* $Id: run.c 372 2008-09-23 09:51:24Z baconevi $
* $Id: run.c 381 2008-09-24 11:07:24Z baconevi $
*
* {License}
*/
@ -264,8 +264,8 @@ static int set_global (
/* global variable */
ase_cstr_t errarg;
errarg.ptr = var->id.name;
errarg.len = var->id.name_len;
errarg.ptr = var->id.name.ptr;
errarg.len = var->id.name.len;
ase_awk_setrunerror (run,
ASE_AWK_EMAPTOSCALAR, var->line, &errarg, 1);
@ -768,24 +768,24 @@ static int init_run (
run->inrec.nflds = 0;
run->inrec.maxflds = 0;
run->inrec.d0 = ase_awk_val_nil;
if (ase_str_open (
&run->inrec.line, DEF_BUF_CAPA, MMGR(run)) == ASE_NULL)
if (ase_str_init (
&run->inrec.line, MMGR(run), DEF_BUF_CAPA) == ASE_NULL)
{
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
return -1;
}
if (ase_str_open (&run->format.out, 256, MMGR(run)) == ASE_NULL)
if (ase_str_init (&run->format.out, MMGR(run), 256) == ASE_NULL)
{
ase_str_close (&run->inrec.line);
ase_str_fini (&run->inrec.line);
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
return -1;
}
if (ase_str_open (&run->format.fmt, 256, MMGR(run)) == ASE_NULL)
if (ase_str_init (&run->format.fmt, MMGR(run), 256) == ASE_NULL)
{
ase_str_close (&run->format.out);
ase_str_close (&run->inrec.line);
ase_str_fini (&run->format.out);
ase_str_fini (&run->inrec.line);
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
return -1;
}
@ -794,9 +794,9 @@ static int init_run (
run, 1024, 70, free_namedval, same_namedval, MMGR(run));
if (run->named == ASE_NULL)
{
ase_str_close (&run->format.fmt);
ase_str_close (&run->format.out);
ase_str_close (&run->inrec.line);
ase_str_fini (&run->format.fmt);
ase_str_fini (&run->format.out);
ase_str_fini (&run->inrec.line);
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
return -1;
}
@ -806,9 +806,9 @@ static int init_run (
if (run->format.tmp.ptr == ASE_NULL)
{
ase_map_close (run->named);
ase_str_close (&run->format.fmt);
ase_str_close (&run->format.out);
ase_str_close (&run->inrec.line);
ase_str_fini (&run->format.fmt);
ase_str_fini (&run->format.out);
ase_str_fini (&run->inrec.line);
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
return -1;
}
@ -823,9 +823,9 @@ static int init_run (
{
ASE_AWK_FREE (run->awk, run->format.tmp.ptr);
ase_map_close (run->named);
ase_str_close (&run->format.fmt);
ase_str_close (&run->format.out);
ase_str_close (&run->inrec.line);
ase_str_fini (&run->format.fmt);
ase_str_fini (&run->format.out);
ase_str_fini (&run->inrec.line);
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
return -1;
}
@ -923,8 +923,8 @@ static void deinit_run (ase_awk_run_t* run)
ASE_AWK_FREE (run->awk, run->format.tmp.ptr);
run->format.tmp.ptr = ASE_NULL;
run->format.tmp.len = 0;
ase_str_close (&run->format.fmt);
ase_str_close (&run->format.out);
ase_str_fini (&run->format.fmt);
ase_str_fini (&run->format.out);
/* destroy input record. ase_awk_clrrec should be called
* before the run stack has been destroyed because it may try
@ -936,7 +936,7 @@ static void deinit_run (ase_awk_run_t* run)
run->inrec.flds = ASE_NULL;
run->inrec.maxflds = 0;
}
ase_str_close (&run->inrec.line);
ase_str_fini (&run->inrec.line);
/* destroy run stack */
if (run->stack != ASE_NULL)
@ -2449,7 +2449,7 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
"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 = ase_map_search (
run->named, var->id.name, var->id.name_len);
run->named, var->id.name.ptr, var->id.name.len);
if (pair == ASE_NULL)
{
ase_awk_val_t* tmp;
@ -2466,7 +2466,7 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
}
pair = ase_map_upsert (run->named,
var->id.name, var->id.name_len, tmp);
var->id.name.ptr, var->id.name.len, tmp);
if (pair == ASE_NULL)
{
ase_awk_refupval (run, tmp);
@ -2495,7 +2495,7 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
ase_cstr_t errarg;
errarg.ptr = var->id.name;
errarg.len = var->id.name_len;
errarg.len = var->id.name.len;
ase_awk_setrunerror (
run, ASE_AWK_ENOTDEL, var->line,
@ -2619,7 +2619,7 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
ase_cstr_t errarg;
errarg.ptr = var->id.name;
errarg.len = var->id.name_len;
errarg.len = var->id.name.len;
ase_awk_setrunerror (
run, ASE_AWK_ENOTDEL, var->line,
@ -2701,7 +2701,7 @@ static int run_reset (ase_awk_run_t* run, ase_awk_nde_reset_t* nde)
/* a named variable can be reset if removed from a internal map
to manage it */
ase_map_remove (run->named, var->id.name, var->id.name_len);
ase_map_remove (run->named, var->id.name.ptr, var->id.name.len);
}
else if (var->type == ASE_AWK_NDE_GLOBAL ||
var->type == ASE_AWK_NDE_LOCAL ||
@ -3328,7 +3328,7 @@ static ase_awk_val_t* do_assignment_scalar (
int n;
pair = ase_map_search (
run->named, var->id.name, var->id.name_len);
run->named, var->id.name.ptr, var->id.name.len);
if (pair != ASE_NULL &&
((ase_awk_val_t*)pair->val)->type == ASE_AWK_VAL_MAP)
{
@ -3337,7 +3337,7 @@ static ase_awk_val_t* do_assignment_scalar (
ase_cstr_t errarg;
errarg.ptr = var->id.name;
errarg.len = var->id.name_len;
errarg.len = var->id.name.len;
ase_awk_setrunerror (run,
ASE_AWK_EMAPTOSCALAR, var->line, &errarg, 1);
@ -3345,7 +3345,7 @@ static ase_awk_val_t* do_assignment_scalar (
}
n = ase_map_upsertx (run->named,
var->id.name, var->id.name_len, val, ASE_NULL);
var->id.name.ptr, var->id.name.len, val, ASE_NULL);
if (n < 0)
{
ase_awk_setrunerror (
@ -3374,7 +3374,7 @@ static ase_awk_val_t* do_assignment_scalar (
ase_cstr_t errarg;
errarg.ptr = var->id.name;
errarg.len = var->id.name_len;
errarg.len = var->id.name.len;
ase_awk_setrunerror (run,
ASE_AWK_EMAPTOSCALAR, var->line, &errarg, 1);
@ -3395,7 +3395,7 @@ static ase_awk_val_t* do_assignment_scalar (
ase_cstr_t errarg;
errarg.ptr = var->id.name;
errarg.len = var->id.name_len;
errarg.len = var->id.name.len;
ase_awk_setrunerror (run,
ASE_AWK_EMAPTOSCALAR, var->line, &errarg, 1);
@ -3430,7 +3430,7 @@ static ase_awk_val_t* do_assignment_map (
{
ase_map_pair_t* pair;
pair = ase_map_search (
run->named, var->id.name, var->id.name_len);
run->named, var->id.name.ptr, var->id.name.len);
map = (pair == ASE_NULL)?
(ase_awk_val_map_t*)ase_awk_val_nil:
(ase_awk_val_map_t*)pair->val;
@ -3463,7 +3463,7 @@ static ase_awk_val_t* do_assignment_map (
* of the previous value here as it is done by
* ase_map_upsert */
if (ase_map_upsert (run->named,
var->id.name, var->id.name_len, tmp) == ASE_NULL)
var->id.name.ptr, var->id.name.len, tmp) == ASE_NULL)
{
ase_awk_refupval (run, tmp);
ase_awk_refdownval (run, tmp);
@ -5738,15 +5738,15 @@ static int get_reference (
ase_map_pair_t* pair;
pair = ase_map_search (
run->named, tgt->id.name, tgt->id.name_len);
run->named, tgt->id.name.ptr, tgt->id.name.len);
if (pair == ASE_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 = ase_map_upsert (
run->named, tgt->id.name,
tgt->id.name_len, ase_awk_val_nil);
run->named, tgt->id.name.ptr,
tgt->id.name.len, ase_awk_val_nil);
if (pair == ASE_NULL)
{
ase_awk_setrunerror (
@ -5783,12 +5783,12 @@ static int get_reference (
ase_map_pair_t* pair;
pair = ase_map_search (
run->named, tgt->id.name, tgt->id.name_len);
run->named, tgt->id.name.ptr, tgt->id.name.len);
if (pair == ASE_NULL)
{
pair = ase_map_upsert (
run->named, tgt->id.name,
tgt->id.name_len, ase_awk_val_nil);
run->named, tgt->id.name.ptr,
tgt->id.name.len, ase_awk_val_nil);
if (pair == ASE_NULL)
{
ase_awk_setrunerror (
@ -5997,8 +5997,8 @@ static ase_awk_val_t* eval_named (ase_awk_run_t* run, ase_awk_nde_t* nde)
ase_map_pair_t* pair;
pair = ase_map_search (run->named,
((ase_awk_nde_var_t*)nde)->id.name,
((ase_awk_nde_var_t*)nde)->id.name_len);
((ase_awk_nde_var_t*)nde)->id.name.ptr,
((ase_awk_nde_var_t*)nde)->id.name.len);
return (pair == ASE_NULL)? ase_awk_val_nil: pair->val;
}
@ -6071,11 +6071,11 @@ static ase_awk_val_t* eval_namedidx (ase_awk_run_t* run, ase_awk_nde_t* nde)
ase_awk_nde_var_t* tgt = (ase_awk_nde_var_t*)nde;
ase_map_pair_t* pair;
pair = ase_map_search (run->named, tgt->id.name, tgt->id.name_len);
pair = ase_map_search (run->named, tgt->id.name.ptr, tgt->id.name.len);
if (pair == ASE_NULL)
{
pair = ase_map_upsert (run->named,
tgt->id.name, tgt->id.name_len, ase_awk_val_nil);
tgt->id.name.ptr, tgt->id.name.len, ase_awk_val_nil);
if (pair == ASE_NULL)
{
ase_awk_setrunerror (
@ -6207,7 +6207,7 @@ static ase_awk_val_t* eval_getline (ase_awk_run_t* run, ase_awk_nde_t* nde)
dst = (in == ASE_NULL)? ASE_T(""): in;
/* TODO: optimize the line buffer management */
if (ase_str_open (&buf, DEF_BUF_CAPA, MMGR(run)) == ASE_NULL)
if (ase_str_init (&buf, MMGR(run), DEF_BUF_CAPA) == ASE_NULL)
{
if (in != ASE_NULL) ASE_AWK_FREE (run->awk, in);
ase_awk_setrunerror (
@ -6233,11 +6233,11 @@ static ase_awk_val_t* eval_getline (ase_awk_run_t* run, ase_awk_nde_t* nde)
ASE_STR_PTR(&buf),
ASE_STR_LEN(&buf)) == -1)
{
ase_str_close (&buf);
ase_str_fini (&buf);
return ASE_NULL;
}
ase_str_close (&buf);
ase_str_fini (&buf);
}
else
{
@ -6245,7 +6245,7 @@ static ase_awk_val_t* eval_getline (ase_awk_run_t* run, ase_awk_nde_t* nde)
v = ase_awk_makestrval (run,
ASE_STR_PTR(&buf), ASE_STR_LEN(&buf));
ase_str_close (&buf);
ase_str_fini (&buf);
if (v == ASE_NULL)
{
run->errlin = nde->line;
@ -6263,7 +6263,7 @@ static ase_awk_val_t* eval_getline (ase_awk_run_t* run, ase_awk_nde_t* nde)
}
else
{
ase_str_close (&buf);
ase_str_fini (&buf);
}
skip_read:
@ -6386,8 +6386,8 @@ static int shorten_record (ase_awk_run_t* run, ase_size_t nflds)
}
}
if (ase_str_open (
&tmp, ASE_STR_LEN(&run->inrec.line), MMGR(run)) == ASE_NULL)
if (ase_str_init (
&tmp, MMGR(run), ASE_STR_LEN(&run->inrec.line)) == ASE_NULL)
{
ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM);
return -1;
@ -6429,7 +6429,7 @@ static int shorten_record (ase_awk_run_t* run, ase_size_t nflds)
ase_awk_refupval (run, run->inrec.d0);
ase_str_swap (&tmp, &run->inrec.line);
ase_str_close (&tmp);
ase_str_fini (&tmp);
for (i = nflds; i < run->inrec.nflds; i++)
{

View File

@ -1,5 +1,5 @@
/*
* $Id: tree.c 363 2008-09-04 10:58:08Z baconevi $
* $Id: tree.c 381 2008-09-24 11:07:24Z baconevi $
*
* {License}
*/
@ -372,7 +372,7 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
ASE_ASSERT (px->id.idxa == (ase_size_t)-1);
ASE_ASSERT (px->idx == ASE_NULL);
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
break;
}
@ -382,7 +382,7 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
ASE_ASSERT (px->id.idxa == (ase_size_t)-1);
ASE_ASSERT (px->idx != ASE_NULL);
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
PUT_SRCSTR (awk, ASE_T("["));
PRINT_EXPRESSION_LIST (awk, px->idx);
PUT_SRCSTR (awk, ASE_T("]"));
@ -401,12 +401,12 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
{
/* no implicit(named) variable is allowed.
* use the actual name */
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
}
else if (px->id.idxa < awk->tree.nbglobals)
{
/* static global variables */
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
}
else
{
@ -422,7 +422,7 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
}
else
{
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
}
ASE_ASSERT (px->idx == ASE_NULL);
break;
@ -439,12 +439,12 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
{
/* no implicit(named) variable is allowed.
* use the actual name */
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
}
else if (px->id.idxa < awk->tree.nbglobals)
{
/* static global variables */
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
}
else
{
@ -461,7 +461,7 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
}
else
{
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
PUT_SRCSTR (awk, ASE_T("["));
}
ASE_ASSERT (px->idx != ASE_NULL);
@ -485,7 +485,7 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
}
else
{
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
}
ASE_ASSERT (px->idx == ASE_NULL);
break;
@ -507,7 +507,7 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
}
else
{
PUT_SRCSTRX (awk, px->id.name, px->id.name_len);
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
PUT_SRCSTR (awk, ASE_T("["));
}
ASE_ASSERT (px->idx != ASE_NULL);
@ -1217,8 +1217,8 @@ void ase_awk_clrpt (ase_awk_t* awk, ase_awk_nde_t* tree)
{
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)p;
ASE_ASSERT (px->idx == ASE_NULL);
if (px->id.name != ASE_NULL)
ASE_AWK_FREE (awk, px->id.name);
if (px->id.name.ptr != ASE_NULL)
ASE_AWK_FREE (awk, px->id.name.ptr);
ASE_AWK_FREE (awk, p);
break;
}
@ -1231,8 +1231,8 @@ void ase_awk_clrpt (ase_awk_t* awk, ase_awk_nde_t* tree)
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)p;
ASE_ASSERT (px->idx != ASE_NULL);
ase_awk_clrpt (awk, px->idx);
if (px->id.name != ASE_NULL)
ASE_AWK_FREE (awk, px->id.name);
if (px->id.name.ptr != ASE_NULL)
ASE_AWK_FREE (awk, px->id.name.ptr);
ASE_AWK_FREE (awk, p);
break;
}

View File

@ -1,5 +1,5 @@
/*
* $Id: tree.h 363 2008-09-04 10:58:08Z baconevi $
* $Id: tree.h 381 2008-09-24 11:07:24Z baconevi $
*
* {License}
*/
@ -129,8 +129,7 @@ typedef struct ase_awk_nde_print_t ase_awk_nde_print_t;
struct ase_awk_afn_t
{
ase_char_t* name;
ase_size_t name_len;
ase_xstr_t name;
ase_size_t nargs;
ase_awk_nde_t* body;
};
@ -239,8 +238,7 @@ struct ase_awk_nde_var_t
ASE_AWK_NDE_HDR;
struct
{
ase_char_t* name;
ase_size_t name_len;
ase_xstr_t name;
ase_size_t idxa;
} id;
ase_awk_nde_t* idx; /* ASE_NULL for non-XXXXIDX */
@ -254,30 +252,18 @@ struct ase_awk_nde_call_t
{
struct
{
struct
{
ase_char_t* ptr;
ase_size_t len;
} name;
ase_xstr_t name;
} afn;
/* minimum information of a intrinsic function
* needed during run-time. */
struct
{
struct
{
ase_char_t* ptr;
ase_size_t len;
} name;
ase_xstr_t name;
/* original name. if ase_awk_setword has been
* invoked, oname can be different from name */
struct
{
ase_char_t* ptr;
ase_size_t len;
} oname;
ase_xstr_t oname;
struct
{

View File

@ -1,5 +1,5 @@
/*
* $Id: val.c 380 2008-09-24 08:16:41Z baconevi $
* $Id: val.c 381 2008-09-24 11:07:24Z baconevi $
*
* {License}
*/
@ -457,8 +457,10 @@ ase_awk_val_t* ase_awk_makemapval (ase_awk_run_t* run)
{
ase_awk_val_map_t* val;
/* CHECK */
/*
val = (ase_awk_val_map_t*) ASE_AWK_ALLOC (
run->awk, ASE_SIZEOF(ase_awk_val_map_t));
run->awk, ASE_SIZEOF(ase_awk_val_map_t) );
if (val == ASE_NULL)
{
ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM);
@ -467,8 +469,6 @@ ase_awk_val_t* ase_awk_makemapval (ase_awk_run_t* run)
val->type = ASE_AWK_VAL_MAP;
val->ref = 0;
/* CHECK */
/*
val->map = ase_map_open (
run, 256, 70, free_mapval, same_mapval, run->awk->mmgr);
if (val->map == ASE_NULL)
@ -478,7 +478,23 @@ ase_awk_val_t* ase_awk_makemapval (ase_awk_run_t* run)
return ASE_NULL;
}
*/
val->map = ase_map_open (run->awk->mmgr, ASE_SIZEOF(run), 256, 70);
val = (ase_awk_val_map_t*) ASE_AWK_ALLOC (
run->awk,
ASE_SIZEOF(ase_awk_val_map_t) +
ASE_SIZEOF(ase_map_t) +
ASE_SIZEOF(run));
if (val == ASE_NULL)
{
ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM);
return ASE_NULL;
}
val->type = ASE_AWK_VAL_MAP;
val->ref = 0;
val->map = (ase_map_t*)(val + 1);
val->map = ase_map_init (val->map, run->awk->mmgr, 256, 70);
if (val->map == ASE_NULL)
{
ASE_AWK_FREE (run->awk, val);
@ -613,7 +629,10 @@ void ase_awk_freeval (ase_awk_run_t* run, ase_awk_val_t* val, ase_bool_t cache)
}
else if (val->type == ASE_AWK_VAL_MAP)
{
ase_map_close (((ase_awk_val_map_t*)val)->map);
/* CHECK */
/* ase_map_close (((ase_awk_val_map_t*)val)->map);*/
ase_map_fini (((ase_awk_val_map_t*)val)->map);
/* END CHECK */
ASE_AWK_FREE (run->awk, val);
}
else if (val->type == ASE_AWK_VAL_REF)