*** empty log message ***
This commit is contained in:
parent
a206062acc
commit
cb4d9c6d70
142
ase/awk/parse.c
142
ase/awk/parse.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c,v 1.257 2007-03-22 10:26:04 bacon Exp $
|
* $Id: parse.c,v 1.258 2007-03-22 10:50:13 bacon Exp $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -335,6 +335,13 @@ static global_t gtab[] =
|
|||||||
ase_awk_seterror (awk, code, (awk)->token.line, &errarg, 1); \
|
ase_awk_seterror (awk, code, (awk)->token.line, &errarg, 1); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define SETERRARG(awk,code,line,arg,leng) \
|
||||||
|
do { \
|
||||||
|
ase_cstr_t errarg; \
|
||||||
|
errarg.len = (leng); \
|
||||||
|
errarg.ptr = (arg); \
|
||||||
|
ase_awk_seterror ((awk), (code), (line), &errarg, 1); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
ase_size_t ase_awk_getmaxdepth (ase_awk_t* awk, int type)
|
ase_size_t ase_awk_getmaxdepth (ase_awk_t* awk, int type)
|
||||||
{
|
{
|
||||||
@ -696,28 +703,16 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
|||||||
/* check if it is a builtin function */
|
/* check if it is a builtin function */
|
||||||
if (ase_awk_getbfn (awk, name, name_len) != ASE_NULL)
|
if (ase_awk_getbfn (awk, name, name_len) != ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (awk, ASE_AWK_EBFNRED, awk->token.line, name, name_len);
|
||||||
|
|
||||||
errarg.ptr = name;
|
|
||||||
errarg.len = name_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EBFNRED, awk->token.line, &errarg, 1);
|
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ase_awk_map_get(&awk->tree.afns, name, name_len) != ASE_NULL)
|
if (ase_awk_map_get(&awk->tree.afns, name, name_len) != ASE_NULL)
|
||||||
{
|
{
|
||||||
/* the function is defined previously */
|
/* the function is defined previously */
|
||||||
ase_cstr_t errarg;
|
SETERRARG (
|
||||||
|
awk, ASE_AWK_EAFNRED, awk->token.line,
|
||||||
errarg.ptr = name;
|
name, name_len);
|
||||||
errarg.len = name_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EAFNRED, awk->token.line, &errarg, 1);
|
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -729,14 +724,9 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
|||||||
g = ase_awk_tab_find (&awk->parse.globals, 0, name, name_len);
|
g = ase_awk_tab_find (&awk->parse.globals, 0, name, name_len);
|
||||||
if (g != (ase_size_t)-1)
|
if (g != (ase_size_t)-1)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (
|
||||||
|
|
||||||
errarg.ptr = name;
|
|
||||||
errarg.len = name_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EGBLRED, awk->token.line,
|
awk, ASE_AWK_EGBLRED, awk->token.line,
|
||||||
&errarg, 1);
|
name, name_len);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -811,17 +801,12 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
|||||||
if (ase_strxncmp (name_dup, name_len, param, param_len) == 0 ||
|
if (ase_strxncmp (name_dup, name_len, param, param_len) == 0 ||
|
||||||
ase_awk_map_get (&awk->tree.afns, param, param_len) != ASE_NULL)
|
ase_awk_map_get (&awk->tree.afns, param, param_len) != ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
|
||||||
|
|
||||||
ASE_AWK_FREE (awk, name_dup);
|
ASE_AWK_FREE (awk, name_dup);
|
||||||
ase_awk_tab_clear (&awk->parse.params);
|
ase_awk_tab_clear (&awk->parse.params);
|
||||||
|
|
||||||
errarg.ptr = param;
|
SETERRARG (
|
||||||
errarg.len = param_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EAFNRED, awk->token.line,
|
awk, ASE_AWK_EAFNRED, awk->token.line,
|
||||||
&errarg, 1);
|
param, param_len);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -838,17 +823,12 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
|||||||
&awk->parse.params,
|
&awk->parse.params,
|
||||||
0, param, param_len) != (ase_size_t)-1)
|
0, param, param_len) != (ase_size_t)-1)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
|
||||||
|
|
||||||
ASE_AWK_FREE (awk, name_dup);
|
ASE_AWK_FREE (awk, name_dup);
|
||||||
ase_awk_tab_clear (&awk->parse.params);
|
ase_awk_tab_clear (&awk->parse.params);
|
||||||
|
|
||||||
errarg.ptr = param;
|
SETERRARG (
|
||||||
errarg.len = param_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EDUPPAR, awk->token.line,
|
awk, ASE_AWK_EDUPPAR, awk->token.line,
|
||||||
&errarg, 1);
|
param, param_len);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -1252,14 +1232,9 @@ static ase_awk_t* add_global (
|
|||||||
/* check if it conflict with a builtin function name */
|
/* check if it conflict with a builtin function name */
|
||||||
if (ase_awk_getbfn (awk, name, len) != ASE_NULL)
|
if (ase_awk_getbfn (awk, name, len) != ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (
|
||||||
|
|
||||||
errarg.ptr = name;
|
|
||||||
errarg.len = len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EBFNRED, awk->token.line,
|
awk, ASE_AWK_EBFNRED, awk->token.line,
|
||||||
&errarg, 1);
|
name, len);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -1268,13 +1243,9 @@ static ase_awk_t* add_global (
|
|||||||
if (ase_awk_map_get (
|
if (ase_awk_map_get (
|
||||||
&awk->tree.afns, name, len) != ASE_NULL)
|
&awk->tree.afns, name, len) != ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (
|
||||||
|
awk, ASE_AWK_EAFNRED, line,
|
||||||
errarg.ptr = name;
|
name, len);
|
||||||
errarg.len = len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EAFNRED, line, &errarg, 1);
|
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -1284,14 +1255,7 @@ static ase_awk_t* add_global (
|
|||||||
if (ase_awk_tab_find (
|
if (ase_awk_tab_find (
|
||||||
&awk->parse.globals, 0, name, len) != (ase_size_t)-1)
|
&awk->parse.globals, 0, name, len) != (ase_size_t)-1)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (awk, ASE_AWK_EDUPGBL, line, name, len);
|
||||||
|
|
||||||
errarg.ptr = name;
|
|
||||||
errarg.len = len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EDUPGBL, line, &errarg, 1);
|
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1370,15 +1334,9 @@ static ase_awk_t* collect_locals (ase_awk_t* awk, ase_size_t nlocals)
|
|||||||
/* check if it conflict with a builtin function name */
|
/* check if it conflict with a builtin function name */
|
||||||
if (ase_awk_getbfn (awk, local, local_len) != ASE_NULL)
|
if (ase_awk_getbfn (awk, local, local_len) != ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (
|
||||||
|
|
||||||
errarg.ptr = local;
|
|
||||||
errarg.len = local_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EBFNRED, awk->token.line,
|
awk, ASE_AWK_EBFNRED, awk->token.line,
|
||||||
&errarg, 1);
|
local, local_len);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1389,15 +1347,9 @@ static ase_awk_t* collect_locals (ase_awk_t* awk, ase_size_t nlocals)
|
|||||||
ase_awk_map_get (
|
ase_awk_map_get (
|
||||||
&awk->tree.afns, local, local_len) != ASE_NULL)
|
&awk->tree.afns, local, local_len) != ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (
|
||||||
|
|
||||||
errarg.ptr = local;
|
|
||||||
errarg.len = local_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EAFNRED, awk->token.line,
|
awk, ASE_AWK_EAFNRED, awk->token.line,
|
||||||
&errarg, 1);
|
local, local_len);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1406,15 +1358,9 @@ static ase_awk_t* collect_locals (ase_awk_t* awk, ase_size_t nlocals)
|
|||||||
if (ase_awk_tab_find (&awk->parse.params,
|
if (ase_awk_tab_find (&awk->parse.params,
|
||||||
0, local, local_len) != (ase_size_t)-1)
|
0, local, local_len) != (ase_size_t)-1)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (
|
||||||
|
|
||||||
errarg.ptr = local;
|
|
||||||
errarg.len = local_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EPARRED, awk->token.line,
|
awk, ASE_AWK_EPARRED, awk->token.line,
|
||||||
&errarg, 1);
|
local, local_len);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1423,14 +1369,9 @@ static ase_awk_t* collect_locals (ase_awk_t* awk, ase_size_t nlocals)
|
|||||||
((awk->option & ASE_AWK_SHADING)? nlocals: 0),
|
((awk->option & ASE_AWK_SHADING)? nlocals: 0),
|
||||||
local, local_len) != (ase_size_t)-1)
|
local, local_len) != (ase_size_t)-1)
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
SETERRARG (
|
||||||
|
|
||||||
errarg.ptr = local;
|
|
||||||
errarg.len = local_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_EDUPLCL, awk->token.line,
|
awk, ASE_AWK_EDUPLCL, awk->token.line,
|
||||||
&errarg, 1);
|
local, local_len);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -2770,7 +2711,6 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
|
|||||||
ase_char_t* name_dup;
|
ase_char_t* name_dup;
|
||||||
ase_size_t name_len;
|
ase_size_t name_len;
|
||||||
ase_awk_bfn_t* bfn;
|
ase_awk_bfn_t* bfn;
|
||||||
ase_cstr_t errarg;
|
|
||||||
|
|
||||||
ASE_ASSERT (MATCH(awk,TOKEN_IDENT));
|
ASE_ASSERT (MATCH(awk,TOKEN_IDENT));
|
||||||
|
|
||||||
@ -2907,9 +2847,7 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
|
|||||||
return (ase_awk_nde_t*)nde;
|
return (ase_awk_nde_t*)nde;
|
||||||
}
|
}
|
||||||
|
|
||||||
errarg.ptr = name_dup;
|
SETERRARG (awk, ASE_AWK_EUNDEF, line, name_dup, name_len);
|
||||||
errarg.len = name_len;
|
|
||||||
ase_awk_seterror (awk, ASE_AWK_EUNDEF, line, &errarg, 1);
|
|
||||||
|
|
||||||
/* undefined variable */
|
/* undefined variable */
|
||||||
ASE_AWK_FREE (awk, name_dup);
|
ASE_AWK_FREE (awk, name_dup);
|
||||||
@ -2925,7 +2863,6 @@ static ase_awk_nde_t* parse_hashidx (
|
|||||||
ase_awk_nde_t* idx, * tmp, * last;
|
ase_awk_nde_t* idx, * tmp, * last;
|
||||||
ase_awk_nde_var_t* nde;
|
ase_awk_nde_var_t* nde;
|
||||||
ase_size_t idxa;
|
ase_size_t idxa;
|
||||||
ase_cstr_t errarg;
|
|
||||||
|
|
||||||
idx = ASE_NULL;
|
idx = ASE_NULL;
|
||||||
last = ASE_NULL;
|
last = ASE_NULL;
|
||||||
@ -3048,10 +2985,7 @@ static ase_awk_nde_t* parse_hashidx (
|
|||||||
ase_awk_clrpt (awk, idx);
|
ase_awk_clrpt (awk, idx);
|
||||||
ASE_AWK_FREE (awk, nde);
|
ASE_AWK_FREE (awk, nde);
|
||||||
|
|
||||||
errarg.ptr = name;
|
SETERRARG (awk, ASE_AWK_EUNDEF, line, name, name_len);
|
||||||
errarg.len = name_len;
|
|
||||||
|
|
||||||
ase_awk_seterror (awk, ASE_AWK_EUNDEF, line, &errarg, 1);
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4388,14 +4322,8 @@ static int get_token (ase_awk_t* awk)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ase_cstr_t errarg;
|
|
||||||
ase_char_t cc = (ase_char_t)c;
|
ase_char_t cc = (ase_char_t)c;
|
||||||
|
SETERRARG (awk, ASE_AWK_ELXCHR, awk->token.line, &cc, 1);
|
||||||
errarg.ptr = &cc;
|
|
||||||
errarg.len = 1;
|
|
||||||
|
|
||||||
ase_awk_seterror (
|
|
||||||
awk, ASE_AWK_ELXCHR, awk->token.line, &errarg, 1);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user