*** empty log message ***

This commit is contained in:
hyung-hwan 2007-03-04 06:27:15 +00:00
parent a460e95750
commit b9931446a4
14 changed files with 236 additions and 144 deletions

View File

@ -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}
*/
@ -215,6 +215,8 @@ int ase_awk_clear (ase_awk_t* awk)
awk->tree.ok = 0;
awk->tree.nbglobals = 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);
if (awk->tree.begin != ASE_NULL)

View File

@ -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}
*/
@ -261,6 +261,7 @@ enum
ASE_AWK_EWHILE, /* keyword 'while' is expected */
ASE_AWK_EASSIGN, /* assignment statement expected */
ASE_AWK_EIDENT, /* identifier expected */
ASE_AWK_EFNNAME, /* invalid function name */
ASE_AWK_EBLKBEG, /* BEGIN requires an action block */
ASE_AWK_EBLKEND, /* END requires an action block */
ASE_AWK_EDUPBEG, /* duplicate BEGIN */

View File

@ -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}
*/
@ -65,6 +65,7 @@ struct ase_awk_tree_t
{
ase_size_t nglobals; /* total number of globals */
ase_size_t nbglobals; /* number of builtin globals */
ase_cstr_t cur_afn;
ase_awk_map_t afns; /* awk function map */
ase_awk_nde_t* begin;
ase_awk_nde_t* end;
@ -192,6 +193,11 @@ struct ase_awk_t
} depth;
} rex;
struct
{
ase_char_t* fmt[1024];
} tmp;
/* housekeeping */
int errnum;
ase_size_t errlin;

View File

@ -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}
*/
@ -74,17 +74,18 @@ static const ase_char_t* __geterrstr (int errnum)
ASE_T("keyword 'while' expected"),
ASE_T("assignment statement expected"),
ASE_T("identifier expected"),
ASE_T("'%.*s' not a valid function name"),
ASE_T("BEGIN requires an action block"),
ASE_T("END requires an action block"),
ASE_T("duplicate BEGIN"),
ASE_T("duplicate END"),
ASE_T("built-in function redefined"),
ASE_T("function redefined"),
ASE_T("global variable redefined"),
ASE_T("parameter redefined"),
ASE_T("duplicate parameter name"),
ASE_T("duplicate global variable name"),
ASE_T("duplicate local variable name"),
ASE_T("built-in function '%.*s' redefined"),
ASE_T("function '%.*s' redefined"),
ASE_T("global variable '%.*s' redefined"),
ASE_T("parameter '%.*s' redefined"),
ASE_T("duplicate parameter name '%.*s'"),
ASE_T("duplicate global variable '%.*s'"),
ASE_T("duplicate local variable '%.*s'"),
ASE_T("undefined identifier"),
ASE_T("l-value required"),
ASE_T("too many global variables"),

View File

@ -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}
*/
@ -126,6 +126,9 @@ struct __binmap_t
int binop;
};
#define PTR_EOF ASE_T("<EOF>")
#define LEN_EOF 5
static int __parse (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))
{
/* cannot find a valid identifier for a function name */
ase_cstr_t errarg;
if (MATCH(awk,TOKEN_EOF))
{
ase_awk_seterror_old (
awk, ASE_AWK_EIDENT, awk->token.prev.line,
ASE_T("function definition without a name"));
errarg.ptr = PTR_EOF;
errarg.len = LEN_EOF;
}
else
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
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);
errarg.ptr = ASE_STR_BUF(&awk->token.name);
errarg.len = ASE_STR_LEN(&awk->token.name);
}
ase_awk_seterror (
awk, ASE_AWK_EFNNAME, awk->token.line, &errarg, 1);
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 */
if (ase_awk_getbfn (awk, name, name_len) != ASE_NULL)
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("built-in function '%.*s' redefined"),
name_len, name);
ase_cstr_t errarg;
errarg.ptr = name;
errarg.len = name_len;
ase_awk_seterror_old (
awk, ASE_AWK_EBFNRED, awk->token.line,
awk->errmsg);
ase_awk_seterror (
awk, ASE_AWK_EBFNRED, awk->token.line, &errarg, 1);
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)
{
/* the function is defined previously */
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("function '%.*s' redefined"),
name_len, name);
ase_cstr_t errarg;
errarg.ptr = name;
errarg.len = name_len;
ase_awk_seterror_old (
awk, ASE_AWK_EAFNRED, awk->token.line,
awk->errmsg);
ase_awk_seterror (
awk, ASE_AWK_EAFNRED, awk->token.line, &errarg, 1);
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);
if (g != (ase_size_t)-1)
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("global variable '%.*s' redefined"),
name_len, name);
ase_cstr_t errarg;
errarg.ptr = name;
errarg.len = name_len;
ase_awk_seterror_old (
awk, ASE_AWK_EGBLRED, awk->token.line,
awk->errmsg);
ase_awk_seterror (
awk, ASE_AWK_EGBLRED, awk->token.line,
&errarg, 1);
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);
if (name_dup == ASE_NULL)
{
ase_awk_seterror_old (
awk, ASE_AWK_ENOMEM, awk->token.line, ASE_NULL);
ase_awk_seterror (
awk, ASE_AWK_ENOMEM, awk->token.line, ASE_NULL, 0);
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 ||
ase_awk_map_get (&awk->tree.afns, param, param_len) != ASE_NULL)
{
ase_cstr_t errarg;
ASE_AWK_FREE (awk, name_dup);
ase_awk_tab_clear (&awk->parse.params);
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("conflicting parameter '%.*s' with the function"),
param_len, param);
errarg.ptr = param;
errarg.len = param_len;
ase_awk_seterror_old (
awk, ASE_AWK_EDUPPAR, awk->token.line,
awk->errmsg);
ase_awk_seterror (
awk, ASE_AWK_EAFNRED, awk->token.line,
&errarg, 1);
return ASE_NULL;
}
@ -915,18 +908,17 @@ static ase_awk_nde_t* __parse_function (ase_awk_t* awk)
&awk->parse.params,
0, param, param_len) != (ase_size_t)-1)
{
ase_cstr_t errarg;
ASE_AWK_FREE (awk, name_dup);
ase_awk_tab_clear (&awk->parse.params);
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("duplicate parameter '%.*s'"),
param_len, param);
errarg.ptr = param;
errarg.len = param_len;
ase_awk_seterror_old (
ase_awk_seterror (
awk, ASE_AWK_EDUPPAR, awk->token.line,
awk->errmsg);
&errarg, 1);
return ASE_NULL;
}
@ -1028,8 +1020,18 @@ static ase_awk_nde_t* __parse_function (ase_awk_t* awk)
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 */
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)
{
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_FREE (awk, afn);
ase_awk_seterror_old (
awk, ASE_AWK_ENOMEM, awk->token.line, ASE_NULL);
ase_awk_seterror (
awk, ASE_AWK_ENOMEM, awk->token.line, ASE_NULL, 0);
return ASE_NULL;
}
@ -1351,13 +1353,15 @@ static ase_awk_t* __add_global (
/* check if it conflict with a builtin function name */
if (ase_awk_getbfn (awk, name, len) != ASE_NULL)
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("built-in function '%.*s' redefined"),
len, name);
ase_cstr_t errarg;
errarg.ptr = name;
errarg.len = len;
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;
}
@ -1365,13 +1369,14 @@ static ase_awk_t* __add_global (
if (ase_awk_map_get (
&awk->tree.afns, name, len) != ASE_NULL)
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("function '%.*s' redefined"),
len, name);
ase_cstr_t errarg;
errarg.ptr = name;
errarg.len = len;
ase_awk_seterror (
awk, ASE_AWK_EAFNRED, line, &errarg, 1);
ase_awk_seterror_old (awk, ASE_AWK_EAFNRED, line, awk->errmsg);
return ASE_NULL;
}
}
@ -1380,13 +1385,14 @@ static ase_awk_t* __add_global (
if (ase_awk_tab_find (
&awk->parse.globals, 0, name, len) != (ase_size_t)-1)
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("duplicate global variable '%.*s'"),
len, name);
ase_cstr_t errarg;
errarg.ptr = name;
errarg.len = len;
ase_awk_seterror (
awk, ASE_AWK_EDUPGBL, line, &errarg, 1);
ase_awk_seterror_old (awk, ASE_AWK_EDUPGBL, line, awk->errmsg);
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 */
if (ase_awk_getbfn (awk, local, local_len) != ASE_NULL)
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("built-in function '%.*s' redefined"),
local_len, local);
ase_cstr_t errarg;
errarg.ptr = local;
errarg.len = local_len;
ase_awk_seterror (
awk, ASE_AWK_EBFNRED, awk->token.line,
&errarg, 1);
ase_awk_seterror_old (
awk, ASE_AWK_EBFNRED, awk->token.line,
awk->errmsg);
return ASE_NULL;
}
/* check if it conflict with a function name */
if (ase_awk_map_get (
&awk->tree.afns, local, local_len) != ASE_NULL)
if (ase_strxncmp (
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 (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("function '%.*s' redefined"),
local_len, local);
ase_cstr_t errarg;
ase_awk_seterror_old (
errarg.ptr = local;
errarg.len = local_len;
ase_awk_seterror (
awk, ASE_AWK_EAFNRED, awk->token.line,
awk->errmsg);
&errarg, 1);
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,
0, local, local_len) != (ase_size_t)-1)
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("parameter '%.*s' redefined"),
local_len, local);
ase_cstr_t errarg;
ase_awk_seterror_old (
errarg.ptr = local;
errarg.len = local_len;
ase_awk_seterror (
awk, ASE_AWK_EPARRED, awk->token.line,
awk->errmsg);
&errarg, 1);
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),
local, local_len) != (ase_size_t)-1)
{
awk->prmfns.misc.sprintf (
awk->prmfns.misc.custom_data,
awk->errmsg, ASE_COUNTOF(awk->errmsg),
ASE_T("duplicate local variable '%.*s'"),
local_len, local);
ase_cstr_t errarg;
errarg.ptr = local;
errarg.len = local_len;
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;
}

View File

@ -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}
*/
@ -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.len = var->id.name_len;
ase_awk_setrunerror (
run, ASE_AWK_ENOTDEL, var->line, &errarg, 1);
run, ASE_AWK_ENOTDEL, var->line,
&errarg, 1);
return -1;
}

View File

@ -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}
*/
@ -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)
{
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
ase_size_t n;
n = ase_awk_longtostr (
((ase_awk_nde_int_t*)nde)->val,
10, ASE_NULL, tmp, ASE_COUNTOF(tmp));
((ase_awk_nde_int_t*)nde)->val, 10, ASE_NULL,
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
PUT_SRCSTRX (awk, tmp, n);
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
}
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)
{
ase_char_t tmp[256];
#if (ASE_SIZEOF_LONG_DOUBLE != 0)
awk->prmfns.misc.sprintf (
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);
#elif (ASE_SIZEOF_DOUBLE != 0)
awk->prmfns.misc.sprintf (
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);
#else
#error unsupported floating-point data type
#endif
PUT_SRCSTR (awk, tmp);
PUT_SRCSTR (awk, awk->tmp.fmt);
}
else
{
@ -343,7 +341,6 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
case ASE_AWK_NDE_ARGIDX:
{
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
ase_size_t n;
ase_awk_nde_var_t* px = (ase_awk_nde_var_t*)nde;
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"));
n = ase_awk_longtostr (
px->id.idxa, 10, ASE_NULL, tmp, ASE_COUNTOF(tmp));
PUT_SRCSTRX (awk, tmp, n);
px->id.idxa, 10, ASE_NULL,
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
PUT_SRCSTR (awk, ASE_T("["));
PRINT_EXPRESSION_LIST (awk, px->idx);
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:
{
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
ase_size_t n;
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"));
n = ase_awk_longtostr (
px->id.idxa, 10,
ASE_NULL, tmp, ASE_COUNTOF(tmp));
PUT_SRCSTRX (awk, tmp, n);
px->id.idxa, 10, ASE_NULL,
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
}
else
{
@ -460,7 +457,6 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
case ASE_AWK_NDE_LOCALIDX:
{
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
ase_size_t n;
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"));
n = ase_awk_longtostr (
px->id.idxa, 10,
ASE_NULL, tmp, ASE_COUNTOF(tmp));
PUT_SRCSTRX (awk, tmp, n);
px->id.idxa, 10, ASE_NULL,
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
PUT_SRCSTR (awk, ASE_T("["));
}
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:
{
ase_char_t tmp[ASE_SIZEOF(ase_long_t)*8+2];
ase_size_t n;
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"));
n = ase_awk_longtostr (
i, 10, ASE_NULL, tmp, ASE_COUNTOF(tmp));
PUT_SRCSTRX (awk, tmp, n);
i, 10, ASE_NULL,
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("__local"));
n = ase_awk_longtostr (
i, 10, ASE_NULL, tmp, ASE_COUNTOF(tmp));
PUT_SRCSTRX (awk, tmp, n);
i, 10, ASE_NULL,
awk->tmp.fmt, ASE_COUNTOF(awk->tmp.fmt));
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
PUT_SRCSTR (awk, ASE_T(";"));
PUT_NEWLINE (awk);
}

4
ase/test/awk/err-007.awk Normal file
View File

@ -0,0 +1,4 @@
function substr ()
{
}

6
ase/test/awk/err-008.awk Normal file
View File

@ -0,0 +1,6 @@
BEGIN {
local substr;
substr = 20;
}

19
ase/test/awk/err-009.awk Normal file
View 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
View 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
View 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
View 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
View File

@ -0,0 +1,3 @@
func abc (abc)
{
}