*** empty log message ***
This commit is contained in:
parent
a460e95750
commit
b9931446a4
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.c,v 1.112 2007-03-02 10:12:40 bacon Exp $
|
* $Id: awk.c,v 1.113 2007-03-04 06:26:45 bacon Exp $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -215,6 +215,8 @@ int ase_awk_clear (ase_awk_t* awk)
|
|||||||
awk->tree.ok = 0;
|
awk->tree.ok = 0;
|
||||||
awk->tree.nbglobals = 0;
|
awk->tree.nbglobals = 0;
|
||||||
awk->tree.nglobals = 0;
|
awk->tree.nglobals = 0;
|
||||||
|
awk->tree.cur_afn.ptr = ASE_NULL;
|
||||||
|
awk->tree.cur_afn.len = 0;
|
||||||
ase_awk_map_clear (&awk->tree.afns);
|
ase_awk_map_clear (&awk->tree.afns);
|
||||||
|
|
||||||
if (awk->tree.begin != ASE_NULL)
|
if (awk->tree.begin != ASE_NULL)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.h,v 1.198 2007-03-03 14:44:31 bacon Exp $
|
* $Id: awk.h,v 1.199 2007-03-04 06:26:45 bacon Exp $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -261,6 +261,7 @@ enum
|
|||||||
ASE_AWK_EWHILE, /* keyword 'while' is expected */
|
ASE_AWK_EWHILE, /* keyword 'while' is expected */
|
||||||
ASE_AWK_EASSIGN, /* assignment statement expected */
|
ASE_AWK_EASSIGN, /* assignment statement expected */
|
||||||
ASE_AWK_EIDENT, /* identifier expected */
|
ASE_AWK_EIDENT, /* identifier expected */
|
||||||
|
ASE_AWK_EFNNAME, /* invalid function name */
|
||||||
ASE_AWK_EBLKBEG, /* BEGIN requires an action block */
|
ASE_AWK_EBLKBEG, /* BEGIN requires an action block */
|
||||||
ASE_AWK_EBLKEND, /* END requires an action block */
|
ASE_AWK_EBLKEND, /* END requires an action block */
|
||||||
ASE_AWK_EDUPBEG, /* duplicate BEGIN */
|
ASE_AWK_EDUPBEG, /* duplicate BEGIN */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk_i.h,v 1.108 2007-03-03 14:44:31 bacon Exp $
|
* $Id: awk_i.h,v 1.109 2007-03-04 06:26:45 bacon Exp $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -65,6 +65,7 @@ struct ase_awk_tree_t
|
|||||||
{
|
{
|
||||||
ase_size_t nglobals; /* total number of globals */
|
ase_size_t nglobals; /* total number of globals */
|
||||||
ase_size_t nbglobals; /* number of builtin globals */
|
ase_size_t nbglobals; /* number of builtin globals */
|
||||||
|
ase_cstr_t cur_afn;
|
||||||
ase_awk_map_t afns; /* awk function map */
|
ase_awk_map_t afns; /* awk function map */
|
||||||
ase_awk_nde_t* begin;
|
ase_awk_nde_t* begin;
|
||||||
ase_awk_nde_t* end;
|
ase_awk_nde_t* end;
|
||||||
@ -192,6 +193,11 @@ struct ase_awk_t
|
|||||||
} depth;
|
} depth;
|
||||||
} rex;
|
} rex;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
ase_char_t* fmt[1024];
|
||||||
|
} tmp;
|
||||||
|
|
||||||
/* housekeeping */
|
/* housekeeping */
|
||||||
int errnum;
|
int errnum;
|
||||||
ase_size_t errlin;
|
ase_size_t errlin;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: err.c,v 1.79 2007-03-03 14:44:31 bacon Exp $
|
* $Id: err.c,v 1.80 2007-03-04 06:26:45 bacon Exp $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -74,17 +74,18 @@ static const ase_char_t* __geterrstr (int errnum)
|
|||||||
ASE_T("keyword 'while' expected"),
|
ASE_T("keyword 'while' expected"),
|
||||||
ASE_T("assignment statement expected"),
|
ASE_T("assignment statement expected"),
|
||||||
ASE_T("identifier expected"),
|
ASE_T("identifier expected"),
|
||||||
|
ASE_T("'%.*s' not a valid function name"),
|
||||||
ASE_T("BEGIN requires an action block"),
|
ASE_T("BEGIN requires an action block"),
|
||||||
ASE_T("END requires an action block"),
|
ASE_T("END requires an action block"),
|
||||||
ASE_T("duplicate BEGIN"),
|
ASE_T("duplicate BEGIN"),
|
||||||
ASE_T("duplicate END"),
|
ASE_T("duplicate END"),
|
||||||
ASE_T("built-in function redefined"),
|
ASE_T("built-in function '%.*s' redefined"),
|
||||||
ASE_T("function redefined"),
|
ASE_T("function '%.*s' redefined"),
|
||||||
ASE_T("global variable redefined"),
|
ASE_T("global variable '%.*s' redefined"),
|
||||||
ASE_T("parameter redefined"),
|
ASE_T("parameter '%.*s' redefined"),
|
||||||
ASE_T("duplicate parameter name"),
|
ASE_T("duplicate parameter name '%.*s'"),
|
||||||
ASE_T("duplicate global variable name"),
|
ASE_T("duplicate global variable '%.*s'"),
|
||||||
ASE_T("duplicate local variable name"),
|
ASE_T("duplicate local variable '%.*s'"),
|
||||||
ASE_T("undefined identifier"),
|
ASE_T("undefined identifier"),
|
||||||
ASE_T("l-value required"),
|
ASE_T("l-value required"),
|
||||||
ASE_T("too many global variables"),
|
ASE_T("too many global variables"),
|
||||||
|
218
ase/awk/parse.c
218
ase/awk/parse.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c,v 1.248 2007-03-03 13:22:00 bacon Exp $
|
* $Id: parse.c,v 1.249 2007-03-04 06:26:45 bacon Exp $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -126,6 +126,9 @@ struct __binmap_t
|
|||||||
int binop;
|
int binop;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define PTR_EOF ASE_T("<EOF>")
|
||||||
|
#define LEN_EOF 5
|
||||||
|
|
||||||
static int __parse (ase_awk_t* awk);
|
static int __parse (ase_awk_t* awk);
|
||||||
|
|
||||||
static ase_awk_t* __parse_progunit (ase_awk_t* awk);
|
static ase_awk_t* __parse_progunit (ase_awk_t* awk);
|
||||||
@ -710,25 +713,21 @@ static ase_awk_nde_t* __parse_function (ase_awk_t* awk)
|
|||||||
if (!MATCH(awk,TOKEN_IDENT))
|
if (!MATCH(awk,TOKEN_IDENT))
|
||||||
{
|
{
|
||||||
/* cannot find a valid identifier for a function name */
|
/* cannot find a valid identifier for a function name */
|
||||||
|
ase_cstr_t errarg;
|
||||||
|
|
||||||
if (MATCH(awk,TOKEN_EOF))
|
if (MATCH(awk,TOKEN_EOF))
|
||||||
{
|
{
|
||||||
ase_awk_seterror_old (
|
errarg.ptr = PTR_EOF;
|
||||||
awk, ASE_AWK_EIDENT, awk->token.prev.line,
|
errarg.len = LEN_EOF;
|
||||||
ASE_T("function definition without a name"));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
errarg.ptr = ASE_STR_BUF(&awk->token.name);
|
||||||
awk->prmfns.misc.custom_data,
|
errarg.len = ASE_STR_LEN(&awk->token.name);
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("'%.*s' not a valid function name"),
|
|
||||||
ASE_STR_LEN(&awk->token.name),
|
|
||||||
ASE_STR_BUF(&awk->token.name));
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
|
||||||
awk, ASE_AWK_EIDENT, awk->token.line,
|
|
||||||
awk->errmsg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ase_awk_seterror (
|
||||||
|
awk, ASE_AWK_EFNNAME, awk->token.line, &errarg, 1);
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -738,15 +737,13 @@ 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)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("built-in function '%.*s' redefined"),
|
|
||||||
name_len, name);
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
errarg.ptr = name;
|
||||||
awk, ASE_AWK_EBFNRED, awk->token.line,
|
errarg.len = name_len;
|
||||||
awk->errmsg);
|
|
||||||
|
ase_awk_seterror (
|
||||||
|
awk, ASE_AWK_EBFNRED, awk->token.line, &errarg, 1);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -754,15 +751,13 @@ static ase_awk_nde_t* __parse_function (ase_awk_t* awk)
|
|||||||
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 */
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("function '%.*s' redefined"),
|
|
||||||
name_len, name);
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
errarg.ptr = name;
|
||||||
awk, ASE_AWK_EAFNRED, awk->token.line,
|
errarg.len = name_len;
|
||||||
awk->errmsg);
|
|
||||||
|
ase_awk_seterror (
|
||||||
|
awk, ASE_AWK_EAFNRED, awk->token.line, &errarg, 1);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -775,15 +770,14 @@ 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)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("global variable '%.*s' redefined"),
|
|
||||||
name_len, name);
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
errarg.ptr = name;
|
||||||
|
errarg.len = name_len;
|
||||||
|
|
||||||
|
ase_awk_seterror (
|
||||||
awk, ASE_AWK_EGBLRED, awk->token.line,
|
awk, ASE_AWK_EGBLRED, awk->token.line,
|
||||||
awk->errmsg);
|
&errarg, 1);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -793,8 +787,8 @@ static ase_awk_nde_t* __parse_function (ase_awk_t* awk)
|
|||||||
name_dup = ase_strxdup (name, name_len, &awk->prmfns.mmgr);
|
name_dup = ase_strxdup (name, name_len, &awk->prmfns.mmgr);
|
||||||
if (name_dup == ASE_NULL)
|
if (name_dup == ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_awk_seterror_old (
|
ase_awk_seterror (
|
||||||
awk, ASE_AWK_ENOMEM, awk->token.line, ASE_NULL);
|
awk, ASE_AWK_ENOMEM, awk->token.line, ASE_NULL, 0);
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -887,18 +881,17 @@ 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);
|
||||||
|
|
||||||
awk->prmfns.misc.sprintf (
|
errarg.ptr = param;
|
||||||
awk->prmfns.misc.custom_data,
|
errarg.len = param_len;
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("conflicting parameter '%.*s' with the function"),
|
|
||||||
param_len, param);
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
ase_awk_seterror (
|
||||||
awk, ASE_AWK_EDUPPAR, awk->token.line,
|
awk, ASE_AWK_EAFNRED, awk->token.line,
|
||||||
awk->errmsg);
|
&errarg, 1);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -915,18 +908,17 @@ 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);
|
||||||
|
|
||||||
awk->prmfns.misc.sprintf (
|
errarg.ptr = param;
|
||||||
awk->prmfns.misc.custom_data,
|
errarg.len = param_len;
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("duplicate parameter '%.*s'"),
|
|
||||||
param_len, param);
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
ase_awk_seterror (
|
||||||
awk, ASE_AWK_EDUPPAR, awk->token.line,
|
awk, ASE_AWK_EDUPPAR, awk->token.line,
|
||||||
awk->errmsg);
|
&errarg, 1);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
@ -1028,8 +1020,18 @@ static ase_awk_nde_t* __parse_function (ase_awk_t* awk)
|
|||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* remember the current function name so that the body parser
|
||||||
|
* can know the name of the current function being parsed */
|
||||||
|
awk->tree.cur_afn.ptr = name_dup;
|
||||||
|
awk->tree.cur_afn.len = name_len;
|
||||||
|
|
||||||
/* actual function body */
|
/* actual function body */
|
||||||
body = awk->parse.parse_block (awk, awk->token.prev.line, ase_true);
|
body = awk->parse.parse_block (awk, awk->token.prev.line, ase_true);
|
||||||
|
|
||||||
|
/* clear the current function name remembered */
|
||||||
|
awk->tree.cur_afn.ptr = ASE_NULL;
|
||||||
|
awk->tree.cur_afn.len = 0;
|
||||||
|
|
||||||
if (body == ASE_NULL)
|
if (body == ASE_NULL)
|
||||||
{
|
{
|
||||||
ASE_AWK_FREE (awk, name_dup);
|
ASE_AWK_FREE (awk, name_dup);
|
||||||
@ -1067,8 +1069,8 @@ static ase_awk_nde_t* __parse_function (ase_awk_t* awk)
|
|||||||
ase_awk_clrpt (awk, body);
|
ase_awk_clrpt (awk, body);
|
||||||
ASE_AWK_FREE (awk, afn);
|
ASE_AWK_FREE (awk, afn);
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
ase_awk_seterror (
|
||||||
awk, ASE_AWK_ENOMEM, awk->token.line, ASE_NULL);
|
awk, ASE_AWK_ENOMEM, awk->token.line, ASE_NULL, 0);
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1351,13 +1353,15 @@ 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)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
errarg.ptr = name;
|
||||||
ASE_T("built-in function '%.*s' redefined"),
|
errarg.len = len;
|
||||||
len, name);
|
|
||||||
|
ase_awk_seterror (
|
||||||
|
awk, ASE_AWK_EBFNRED, awk->token.line,
|
||||||
|
&errarg, 1);
|
||||||
|
|
||||||
ase_awk_seterror_old (awk, ASE_AWK_EBFNRED, line, awk->errmsg);
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1365,13 +1369,14 @@ 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)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
errarg.ptr = name;
|
||||||
ASE_T("function '%.*s' redefined"),
|
errarg.len = len;
|
||||||
len, name);
|
|
||||||
|
ase_awk_seterror (
|
||||||
|
awk, ASE_AWK_EAFNRED, line, &errarg, 1);
|
||||||
|
|
||||||
ase_awk_seterror_old (awk, ASE_AWK_EAFNRED, line, awk->errmsg);
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1380,13 +1385,14 @@ 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)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
errarg.ptr = name;
|
||||||
ASE_T("duplicate global variable '%.*s'"),
|
errarg.len = len;
|
||||||
len, name);
|
|
||||||
|
ase_awk_seterror (
|
||||||
|
awk, ASE_AWK_EDUPGBL, line, &errarg, 1);
|
||||||
|
|
||||||
ase_awk_seterror_old (awk, ASE_AWK_EDUPGBL, line, awk->errmsg);
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1504,31 +1510,34 @@ 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)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("built-in function '%.*s' redefined"),
|
|
||||||
local_len, local);
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
errarg.ptr = local;
|
||||||
|
errarg.len = local_len;
|
||||||
|
|
||||||
|
ase_awk_seterror (
|
||||||
awk, ASE_AWK_EBFNRED, awk->token.line,
|
awk, ASE_AWK_EBFNRED, awk->token.line,
|
||||||
awk->errmsg);
|
&errarg, 1);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if it conflict with a function name */
|
/* check if it conflict with a function name */
|
||||||
if (ase_awk_map_get (
|
if (ase_strxncmp (
|
||||||
&awk->tree.afns, local, local_len) != ASE_NULL)
|
awk->tree.cur_afn.ptr, awk->tree.cur_afn.len,
|
||||||
|
local, local_len) == 0 ||
|
||||||
|
ase_awk_map_get (
|
||||||
|
&awk->tree.afns, local, local_len) != ASE_NULL)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("function '%.*s' redefined"),
|
|
||||||
local_len, local);
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
errarg.ptr = local;
|
||||||
|
errarg.len = local_len;
|
||||||
|
|
||||||
|
ase_awk_seterror (
|
||||||
awk, ASE_AWK_EAFNRED, awk->token.line,
|
awk, ASE_AWK_EAFNRED, awk->token.line,
|
||||||
awk->errmsg);
|
&errarg, 1);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1537,15 +1546,15 @@ 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)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
|
||||||
ASE_T("parameter '%.*s' redefined"),
|
|
||||||
local_len, local);
|
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
errarg.ptr = local;
|
||||||
|
errarg.len = local_len;
|
||||||
|
|
||||||
|
ase_awk_seterror (
|
||||||
awk, ASE_AWK_EPARRED, awk->token.line,
|
awk, ASE_AWK_EPARRED, awk->token.line,
|
||||||
awk->errmsg);
|
&errarg, 1);
|
||||||
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1554,14 +1563,15 @@ 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)
|
||||||
{
|
{
|
||||||
awk->prmfns.misc.sprintf (
|
ase_cstr_t errarg;
|
||||||
awk->prmfns.misc.custom_data,
|
|
||||||
awk->errmsg, ASE_COUNTOF(awk->errmsg),
|
errarg.ptr = local;
|
||||||
ASE_T("duplicate local variable '%.*s'"),
|
errarg.len = local_len;
|
||||||
local_len, local);
|
|
||||||
|
ase_awk_seterror (
|
||||||
|
awk, ASE_AWK_EDUPLCL, awk->token.line,
|
||||||
|
&errarg, 1);
|
||||||
|
|
||||||
ase_awk_seterror_old (
|
|
||||||
awk, ASE_AWK_EDUPLCL, awk->token.line, awk->errmsg);
|
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.338 2007-03-03 14:44:31 bacon Exp $
|
* $Id: run.c,v 1.339 2007-03-04 06:26:45 bacon Exp $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -2344,7 +2344,8 @@ static int __run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
|
|||||||
errarg.ptr = var->id.name;
|
errarg.ptr = var->id.name;
|
||||||
errarg.len = var->id.name_len;
|
errarg.len = var->id.name_len;
|
||||||
ase_awk_setrunerror (
|
ase_awk_setrunerror (
|
||||||
run, ASE_AWK_ENOTDEL, var->line, &errarg, 1);
|
run, ASE_AWK_ENOTDEL, var->line,
|
||||||
|
&errarg, 1);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tree.c,v 1.104 2007-02-24 14:31:44 bacon Exp $
|
* $Id: tree.c,v 1.105 2007-03-04 06:26:45 bacon Exp $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -236,14 +236,13 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
{
|
{
|
||||||
if (((ase_awk_nde_int_t*)nde)->str == ASE_NULL)
|
if (((ase_awk_nde_int_t*)nde)->str == ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
|
|
||||||
ase_size_t n;
|
ase_size_t n;
|
||||||
|
|
||||||
n = ase_awk_longtostr (
|
n = ase_awk_longtostr (
|
||||||
((ase_awk_nde_int_t*)nde)->val,
|
((ase_awk_nde_int_t*)nde)->val, 10, ASE_NULL,
|
||||||
10, ASE_NULL, tmp, ASE_COUNTOF(tmp));
|
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
|
||||||
|
|
||||||
PUT_SRCSTRX (awk, tmp, n);
|
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -258,21 +257,20 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
{
|
{
|
||||||
if (((ase_awk_nde_real_t*)nde)->str == ASE_NULL)
|
if (((ase_awk_nde_real_t*)nde)->str == ASE_NULL)
|
||||||
{
|
{
|
||||||
ase_char_t tmp[256];
|
|
||||||
#if (ASE_SIZEOF_LONG_DOUBLE != 0)
|
#if (ASE_SIZEOF_LONG_DOUBLE != 0)
|
||||||
awk->prmfns.misc.sprintf (
|
awk->prmfns.misc.sprintf (
|
||||||
awk->prmfns.misc.custom_data,
|
awk->prmfns.misc.custom_data,
|
||||||
tmp, ASE_COUNTOF(tmp), ASE_T("%Lf"),
|
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt), ASE_T("%Lf"),
|
||||||
(long double)((ase_awk_nde_real_t*)nde)->val);
|
(long double)((ase_awk_nde_real_t*)nde)->val);
|
||||||
#elif (ASE_SIZEOF_DOUBLE != 0)
|
#elif (ASE_SIZEOF_DOUBLE != 0)
|
||||||
awk->prmfns.misc.sprintf (
|
awk->prmfns.misc.sprintf (
|
||||||
awk->prmfns.misc.custom_data,
|
awk->prmfns.misc.custom_data,
|
||||||
tmp, ASE_COUNTOF(tmp), ASE_T("%f"),
|
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt), ASE_T("%f"),
|
||||||
(double)((ase_awk_nde_real_t*)nde)->val);
|
(double)((ase_awk_nde_real_t*)nde)->val);
|
||||||
#else
|
#else
|
||||||
#error unsupported floating-point data type
|
#error unsupported floating-point data type
|
||||||
#endif
|
#endif
|
||||||
PUT_SRCSTR (awk, tmp);
|
PUT_SRCSTR (awk, awk->tmp.fmt);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -343,7 +341,6 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
|
|
||||||
case ASE_AWK_NDE_ARGIDX:
|
case ASE_AWK_NDE_ARGIDX:
|
||||||
{
|
{
|
||||||
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
|
|
||||||
ase_size_t n;
|
ase_size_t n;
|
||||||
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)nde;
|
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)nde;
|
||||||
ASE_AWK_ASSERT (awk, px->id.idxa != (ase_size_t)-1);
|
ASE_AWK_ASSERT (awk, px->id.idxa != (ase_size_t)-1);
|
||||||
@ -351,8 +348,9 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
|
|
||||||
PUT_SRCSTR (awk, ASE_T("__param"));
|
PUT_SRCSTR (awk, ASE_T("__param"));
|
||||||
n = ase_awk_longtostr (
|
n = ase_awk_longtostr (
|
||||||
px->id.idxa, 10, ASE_NULL, tmp, ASE_COUNTOF(tmp));
|
px->id.idxa, 10, ASE_NULL,
|
||||||
PUT_SRCSTRX (awk, tmp, n);
|
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
|
||||||
|
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
||||||
PUT_SRCSTR (awk, ASE_T("["));
|
PUT_SRCSTR (awk, ASE_T("["));
|
||||||
PRINT_EXPRESSION_LIST (awk, px->idx);
|
PRINT_EXPRESSION_LIST (awk, px->idx);
|
||||||
PUT_SRCSTR (awk, ASE_T("]"));
|
PUT_SRCSTR (awk, ASE_T("]"));
|
||||||
@ -438,7 +436,6 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
|
|
||||||
case ASE_AWK_NDE_LOCAL:
|
case ASE_AWK_NDE_LOCAL:
|
||||||
{
|
{
|
||||||
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
|
|
||||||
ase_size_t n;
|
ase_size_t n;
|
||||||
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)nde;
|
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)nde;
|
||||||
|
|
||||||
@ -446,9 +443,9 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
{
|
{
|
||||||
PUT_SRCSTR (awk, ASE_T("__local"));
|
PUT_SRCSTR (awk, ASE_T("__local"));
|
||||||
n = ase_awk_longtostr (
|
n = ase_awk_longtostr (
|
||||||
px->id.idxa, 10,
|
px->id.idxa, 10, ASE_NULL,
|
||||||
ASE_NULL, tmp, ASE_COUNTOF(tmp));
|
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
|
||||||
PUT_SRCSTRX (awk, tmp, n);
|
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -460,7 +457,6 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
|
|
||||||
case ASE_AWK_NDE_LOCALIDX:
|
case ASE_AWK_NDE_LOCALIDX:
|
||||||
{
|
{
|
||||||
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
|
|
||||||
ase_size_t n;
|
ase_size_t n;
|
||||||
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)nde;
|
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)nde;
|
||||||
|
|
||||||
@ -468,9 +464,9 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
{
|
{
|
||||||
PUT_SRCSTR (awk, ASE_T("__local"));
|
PUT_SRCSTR (awk, ASE_T("__local"));
|
||||||
n = ase_awk_longtostr (
|
n = ase_awk_longtostr (
|
||||||
px->id.idxa, 10,
|
px->id.idxa, 10, ASE_NULL,
|
||||||
ASE_NULL, tmp, ASE_COUNTOF(tmp));
|
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
|
||||||
PUT_SRCSTRX (awk, tmp, n);
|
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
||||||
PUT_SRCSTR (awk, ASE_T("["));
|
PUT_SRCSTR (awk, ASE_T("["));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -587,7 +583,6 @@ static int __print_statements (ase_awk_t* awk, ase_awk_nde_t* tree, int depth)
|
|||||||
|
|
||||||
case ASE_AWK_NDE_BLK:
|
case ASE_AWK_NDE_BLK:
|
||||||
{
|
{
|
||||||
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
|
|
||||||
ase_size_t n;
|
ase_size_t n;
|
||||||
ase_awk_nde_blk_t* px = (ase_awk_nde_blk_t*)p;
|
ase_awk_nde_blk_t* px = (ase_awk_nde_blk_t*)p;
|
||||||
|
|
||||||
@ -604,15 +599,17 @@ static int __print_statements (ase_awk_t* awk, ase_awk_nde_t* tree, int depth)
|
|||||||
{
|
{
|
||||||
PUT_SRCSTR (awk, ASE_T("__local"));
|
PUT_SRCSTR (awk, ASE_T("__local"));
|
||||||
n = ase_awk_longtostr (
|
n = ase_awk_longtostr (
|
||||||
i, 10, ASE_NULL, tmp, ASE_COUNTOF(tmp));
|
i, 10, ASE_NULL,
|
||||||
PUT_SRCSTRX (awk, tmp, n);
|
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
|
||||||
|
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
||||||
PUT_SRCSTR (awk, ASE_T(", "));
|
PUT_SRCSTR (awk, ASE_T(", "));
|
||||||
}
|
}
|
||||||
|
|
||||||
PUT_SRCSTR (awk, ASE_T("__local"));
|
PUT_SRCSTR (awk, ASE_T("__local"));
|
||||||
n = ase_awk_longtostr (
|
n = ase_awk_longtostr (
|
||||||
i, 10, ASE_NULL, tmp, ASE_COUNTOF(tmp));
|
i, 10, ASE_NULL,
|
||||||
PUT_SRCSTRX (awk, tmp, n);
|
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
|
||||||
|
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
||||||
PUT_SRCSTR (awk, ASE_T(";"));
|
PUT_SRCSTR (awk, ASE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NEWLINE (awk);
|
||||||
}
|
}
|
||||||
|
4
ase/test/awk/err-007.awk
Normal file
4
ase/test/awk/err-007.awk
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
function substr ()
|
||||||
|
{
|
||||||
|
}
|
6
ase/test/awk/err-008.awk
Normal file
6
ase/test/awk/err-008.awk
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
BEGIN {
|
||||||
|
local substr;
|
||||||
|
substr = 20;
|
||||||
|
}
|
||||||
|
|
19
ase/test/awk/err-009.awk
Normal file
19
ase/test/awk/err-009.awk
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
func abc ()
|
||||||
|
{
|
||||||
|
|
||||||
|
local x;
|
||||||
|
print x = 20;
|
||||||
|
|
||||||
|
{
|
||||||
|
local abc;
|
||||||
|
|
||||||
|
abc = 30;
|
||||||
|
print abc;
|
||||||
|
abc ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
abc ();
|
||||||
|
}
|
15
ase/test/awk/err-010.awk
Normal file
15
ase/test/awk/err-010.awk
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
global abc;
|
||||||
|
|
||||||
|
func abc ()
|
||||||
|
{
|
||||||
|
local abc;
|
||||||
|
|
||||||
|
abc = 20;
|
||||||
|
print abc;
|
||||||
|
abc ();
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
abc ();
|
||||||
|
}
|
13
ase/test/awk/err-011.awk
Normal file
13
ase/test/awk/err-011.awk
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
func abc (x)
|
||||||
|
{
|
||||||
|
local x;
|
||||||
|
|
||||||
|
x = 20;
|
||||||
|
print x;
|
||||||
|
abc ();
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
abc ();
|
||||||
|
}
|
14
ase/test/awk/err-012.awk
Normal file
14
ase/test/awk/err-012.awk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
func abc ()
|
||||||
|
{
|
||||||
|
local j ;
|
||||||
|
|
||||||
|
j = 20;
|
||||||
|
print j;
|
||||||
|
abc ();
|
||||||
|
}
|
||||||
|
|
||||||
|
global abc;
|
||||||
|
BEGIN {
|
||||||
|
abc ();
|
||||||
|
}
|
3
ase/test/awk/err-013.awk
Normal file
3
ase/test/awk/err-013.awk
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
func abc (abc)
|
||||||
|
{
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user