This commit is contained in:
parent
aca2acab75
commit
2b99c1efad
@ -1,7 +1,9 @@
|
||||
[0.3.4]
|
||||
|
||||
* enhanced the AWK interpreter to be more compatible to AWK
|
||||
- no more semicolon needed to terminate a statement with ASE_AWK_NEWLINE on
|
||||
- no more semicolon needed to terminate a statement with ASE_AWK_NEWLINE on.
|
||||
* removed the ASE_AWK_STRCONCAT option.
|
||||
* added the ASE_AWK_BXOR option.
|
||||
|
||||
[0.3.3]
|
||||
|
||||
|
@ -642,9 +642,9 @@ static struct
|
||||
{
|
||||
{ ASE_T("implicit"), TestAwk::OPT_IMPLICIT },
|
||||
{ ASE_T("explicit"), TestAwk::OPT_EXPLICIT },
|
||||
{ ASE_T("bxor"), TestAwk::OPT_BXOR },
|
||||
{ ASE_T("shift"), TestAwk::OPT_SHIFT },
|
||||
{ ASE_T("idiv"), TestAwk::OPT_IDIV },
|
||||
{ ASE_T("strconcat"), TestAwk::OPT_STRCONCAT },
|
||||
{ ASE_T("extio"), TestAwk::OPT_EXTIO },
|
||||
{ ASE_T("newline"), TestAwk::OPT_NEWLINE },
|
||||
{ ASE_T("baseone"), TestAwk::OPT_BASEONE },
|
||||
|
@ -797,9 +797,9 @@ static struct
|
||||
{
|
||||
{ ASE_T("implicit"), ASE_AWK_IMPLICIT },
|
||||
{ ASE_T("explicit"), ASE_AWK_EXPLICIT },
|
||||
{ ASE_T("bxor"), ASE_AWK_BXOR },
|
||||
{ ASE_T("shift"), ASE_AWK_SHIFT },
|
||||
{ ASE_T("idiv"), ASE_AWK_IDIV },
|
||||
{ ASE_T("strconcat"), ASE_AWK_STRCONCAT },
|
||||
{ ASE_T("extio"), ASE_AWK_EXTIO },
|
||||
{ ASE_T("newline"), ASE_AWK_NEWLINE },
|
||||
{ ASE_T("baseone"), ASE_AWK_BASEONE },
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: Awk.hpp 279 2008-07-21 05:27:34Z baconevi $
|
||||
* $Id: Awk.hpp 283 2008-07-22 13:12:56Z baconevi $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
@ -540,9 +540,9 @@ public:
|
||||
{
|
||||
OPT_IMPLICIT = ASE_AWK_IMPLICIT,
|
||||
OPT_EXPLICIT = ASE_AWK_EXPLICIT,
|
||||
OPT_BXOR = ASE_AWK_BXOR,
|
||||
OPT_SHIFT = ASE_AWK_SHIFT,
|
||||
OPT_IDIV = ASE_AWK_IDIV,
|
||||
OPT_STRCONCAT = ASE_AWK_STRCONCAT,
|
||||
OPT_EXTIO = ASE_AWK_EXTIO,
|
||||
OPT_COPROC = ASE_AWK_COPROC,
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.h 282 2008-07-22 13:01:49Z baconevi $
|
||||
* $Id: awk.h 283 2008-07-22 13:12:56Z baconevi $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
@ -150,15 +150,8 @@ enum ase_awk_option_t
|
||||
* operator(.), and a parse-time function check. */
|
||||
ASE_AWK_EXPLICIT = (1 << 1),
|
||||
|
||||
#if 0
|
||||
/* a function name should not coincide to be a variable name */
|
||||
/*ASE_AWK_UNIQUEFN = (1 << 2),*/
|
||||
|
||||
/* allow variable shading */
|
||||
/*ASE_AWK_SHADING = (1 << 3),*/
|
||||
#endif
|
||||
/* change ^ from exponentation to bitwise xor */
|
||||
ASE_AWK_BXOR = (1 << 3),
|
||||
ASE_AWK_BXOR = (1 << 3),
|
||||
|
||||
/* support shift operators */
|
||||
ASE_AWK_SHIFT = (1 << 4),
|
||||
@ -166,13 +159,6 @@ enum ase_awk_option_t
|
||||
/* enable the idiv operator (double slashes) */
|
||||
ASE_AWK_IDIV = (1 << 5),
|
||||
|
||||
/* support string concatenation in tokenization.
|
||||
* this option can change the behavior of a certain construct.
|
||||
* getline < "abc" ".def" is treated as if it is getline < "abc.def"
|
||||
* when this option is on. If this option is off, the same expression
|
||||
* is treated as if it is (getline < "abc") ".def". */
|
||||
ASE_AWK_STRCONCAT = (1 << 6),
|
||||
|
||||
/* support getline and print */
|
||||
ASE_AWK_EXTIO = (1 << 7),
|
||||
|
||||
@ -209,7 +195,7 @@ enum ase_awk_option_t
|
||||
/* pass the arguments to the main function */
|
||||
ASE_AWK_ARGSTOMAIN = (1 << 14),
|
||||
|
||||
/* enable the non-standard keyworkd reset */
|
||||
/* enable the non-standard keyword reset */
|
||||
ASE_AWK_RESET = (1 << 15),
|
||||
|
||||
/* allows the assignment of a map value to a variable */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: parse.c 282 2008-07-22 13:01:49Z baconevi $
|
||||
* $Id: parse.c 283 2008-07-22 13:12:56Z baconevi $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
@ -853,22 +853,15 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (awk->option & ASE_AWK_UNIQUEFN)
|
||||
/* check if it coincides to be a global variable name */
|
||||
g = find_global (awk, name, name_len);
|
||||
if (g != (ase_size_t)-1)
|
||||
{
|
||||
#endif
|
||||
/* check if it coincides to be a global variable name */
|
||||
g = find_global (awk, name, name_len);
|
||||
if (g != (ase_size_t)-1)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, ASE_AWK_EGBLRED, awk->token.line,
|
||||
name, name_len);
|
||||
return ASE_NULL;
|
||||
}
|
||||
#if 0
|
||||
SETERRARG (
|
||||
awk, ASE_AWK_EGBLRED, awk->token.line,
|
||||
name, name_len);
|
||||
return ASE_NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* clone the function name before it is overwritten */
|
||||
name_dup = ASE_AWK_STRXDUP (awk, name, name_len);
|
||||
@ -933,31 +926,13 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
||||
param = ASE_STR_BUF(&awk->token.name);
|
||||
param_len = ASE_STR_LEN(&awk->token.name);
|
||||
|
||||
#if 0
|
||||
if (awk->option & ASE_AWK_UNIQUEFN)
|
||||
{
|
||||
/* check if a parameter conflicts with a function
|
||||
* function f (f) { print f; } */
|
||||
if (ase_strxncmp (name_dup, name_len, param, param_len) == 0 ||
|
||||
ase_map_get (awk->tree.afns, param, param_len) != ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (awk, name_dup);
|
||||
ase_awk_tab_clear (&awk->parse.params);
|
||||
|
||||
SETERRARG (
|
||||
awk, ASE_AWK_EAFNRED, awk->token.line,
|
||||
param, param_len);
|
||||
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
/* NOTE: the following is not a conflict
|
||||
* global x;
|
||||
* function f (x) { print x; }
|
||||
* x in print x is a parameter
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
/* NOTE: the following is not a conflict.
|
||||
* so the parameter is not checked against
|
||||
* global variables.
|
||||
* global x;
|
||||
* function f (x) { print x; }
|
||||
* x in print x is a parameter
|
||||
*/
|
||||
|
||||
/* check if a parameter conflicts with other parameters */
|
||||
if (ase_awk_tab_find (
|
||||
@ -4614,24 +4589,7 @@ static int get_token (ase_awk_t* awk)
|
||||
else if (c == ASE_T('\"'))
|
||||
{
|
||||
SET_TOKEN_TYPE (awk, TOKEN_STR);
|
||||
|
||||
if (get_charstr(awk) == -1) return -1;
|
||||
|
||||
while (awk->option & ASE_AWK_STRCONCAT)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (skip_spaces(awk) == -1) return -1;
|
||||
if ((n = skip_comment(awk)) == -1) return -1;
|
||||
}
|
||||
while (n == 1);
|
||||
|
||||
c = awk->src.lex.curc;
|
||||
if (c != ASE_T('\"')) break;
|
||||
|
||||
if (get_charstr(awk) == -1) return -1;
|
||||
}
|
||||
|
||||
}
|
||||
else if (c == ASE_T('='))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user