diff --git a/ase/awk/parse.c b/ase/awk/parse.c index c5f1e420..cd16d7fb 100644 --- a/ase/awk/parse.c +++ b/ase/awk/parse.c @@ -1,5 +1,5 @@ /* - * $Id: parse.c,v 1.91 2006-04-24 15:34:52 bacon Exp $ + * $Id: parse.c,v 1.92 2006-04-25 15:20:09 bacon Exp $ */ #include @@ -47,6 +47,7 @@ enum TOKEN_TILDE, /* used for unary bitwise-not and regex match */ TOKEN_RSHIFT, TOKEN_LSHIFT, + TOKEN_IN, TOKEN_EXP, TOKEN_LPAREN, @@ -88,8 +89,6 @@ enum TOKEN_LOCAL, TOKEN_GLOBAL, - TOKEN_IN, - __TOKEN_COUNT__ }; @@ -125,6 +124,7 @@ static xp_awk_nde_t* __parse_binary_expr ( static xp_awk_nde_t* __parse_logical_or (xp_awk_t* awk); static xp_awk_nde_t* __parse_logical_and (xp_awk_t* awk); +static xp_awk_nde_t* __parse_in (xp_awk_t* awk); static xp_awk_nde_t* __parse_regex_match (xp_awk_t* awk); static xp_awk_nde_t* __parse_bitwise_or (xp_awk_t* awk); static xp_awk_nde_t* __parse_bitwise_xor (xp_awk_t* awk); @@ -1060,6 +1060,8 @@ static xp_awk_nde_t* __parse_statement_nb (xp_awk_t* awk) static xp_awk_nde_t* __parse_expression (xp_awk_t* awk) { + return __parse_assignment (awk); +#if 0 xp_awk_nde_t* nde, * tmp; do @@ -1069,13 +1071,19 @@ static xp_awk_nde_t* __parse_expression (xp_awk_t* awk) nde = tmp; break; /* TODO */ - if (!match(awk, TOKEN_COMMA)) break; + if (!MATCH(awk, TOKEN_COMMA)) break; if (__get_token(awk) == -1) return XP_NULL; } while (1); +/* + if (!match(awk, TOKEN_IN)) + { + } +*/ /* TODO: XP_AWK_NDE_GRP -> should i support i this way??? */ return nde; +#endif } static xp_awk_nde_t* __parse_assignment (xp_awk_t* awk) @@ -1319,6 +1327,17 @@ static xp_awk_nde_t* __parse_logical_and (xp_awk_t* awk) { TOKEN_EOF, 0 } }; + return __parse_binary_expr (awk, map, __parse_in); +} + +static xp_awk_nde_t* __parse_in (xp_awk_t* awk) +{ + __binmap_t map[] = + { + { TOKEN_IN, XP_AWK_BINOP_IN }, + { TOKEN_EOF, 0 } + }; + return __parse_binary_expr (awk, map, __parse_regex_match); } @@ -2859,7 +2878,9 @@ static int __get_string (xp_awk_t* awk) static int __get_regex (xp_awk_t* awk) { - /* do proper regular expression parsing */ + /* TODO: do proper regular expression parsing */ + /* TODO: think if the new line should be allowed to + * be included in to a regular expression */ xp_cint_t c; xp_bool_t escaped = xp_false; diff --git a/ase/awk/run.c b/ase/awk/run.c index 77218680..d5b1dc68 100644 --- a/ase/awk/run.c +++ b/ase/awk/run.c @@ -1,5 +1,5 @@ /* - * $Id: run.c,v 1.74 2006-04-24 15:36:08 bacon Exp $ + * $Id: run.c,v 1.75 2006-04-25 15:20:09 bacon Exp $ */ #include @@ -71,6 +71,8 @@ static xp_awk_val_t* __eval_binop_lor ( xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right); static xp_awk_val_t* __eval_binop_land ( xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right); +static xp_awk_val_t* __eval_binop_in ( + xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right); static xp_awk_val_t* __eval_binop_bor ( xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right); static xp_awk_val_t* __eval_binop_bxor ( @@ -856,15 +858,15 @@ static xp_awk_val_t* __eval_expression (xp_awk_run_t* run, xp_awk_nde_t* nde) __eval_pos }; - xp_assert (nde->type >= XP_AWK_NDE_ASS && - (nde->type - XP_AWK_NDE_ASS) < xp_countof(__eval_func)); - return __eval_func[nde->type-XP_AWK_NDE_ASS] (run, nde); + xp_assert (nde->type >= XP_AWK_NDE_GRP && + (nde->type - XP_AWK_NDE_GRP) < xp_countof(__eval_func)); + return __eval_func[nde->type-XP_AWK_NDE_GRP] (run, nde); } static xp_awk_val_t* __eval_group (xp_awk_run_t* run, xp_awk_nde_t* nde) { /* NOT INIMPELMETED YET */ -xp_printf (XP_TEXT("eval_group not implemented\n")); +xp_printf (XP_TEXT("***** eval_group not implemented\n")); PANIC (run, XP_AWK_EINTERNAL); return XP_NULL; } @@ -1132,6 +1134,7 @@ static xp_awk_val_t* __eval_binary (xp_awk_run_t* run, xp_awk_nde_t* nde) { __eval_binop_lor, __eval_binop_land, + __eval_binop_in, __eval_binop_bor, __eval_binop_bxor, __eval_binop_band, @@ -1210,6 +1213,16 @@ static xp_awk_val_t* __eval_binop_land ( return res; } +static xp_awk_val_t* __eval_binop_in ( + xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right) +{ + /* TODO: */ + +xp_printf (XP_TEXT("***** __eval_binop_in not implemented yet\n")); + PANIC (run, XP_AWK_EINTERNAL); + return XP_NULL; +} + static xp_awk_val_t* __eval_binop_bor ( xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right) { diff --git a/ase/awk/run.h b/ase/awk/run.h index b8bbfc77..7f227848 100644 --- a/ase/awk/run.h +++ b/ase/awk/run.h @@ -1,5 +1,5 @@ /* - * $Id: run.h,v 1.10 2006-04-22 13:54:52 bacon Exp $ + * $Id: run.h,v 1.11 2006-04-25 15:20:09 bacon Exp $ */ #ifndef _XP_AWK_RUN_H_ @@ -27,6 +27,7 @@ enum * __binop_str in tree.c and __binop_func in run.c accordingly. */ XP_AWK_BINOP_LOR, XP_AWK_BINOP_LAND, + XP_AWK_BINOP_IN, XP_AWK_BINOP_BOR, XP_AWK_BINOP_BXOR, XP_AWK_BINOP_BAND, diff --git a/ase/test/awk/t1.awk b/ase/test/awk/t1.awk index 77eb4838..85907b6c 100644 --- a/ase/test/awk/t1.awk +++ b/ase/test/awk/t1.awk @@ -13,7 +13,7 @@ function sum(i, k, y) } BEGIN { - //s = sum(10000000); + /*s = sum(10000000);*/ s = sum (100); } diff --git a/ase/test/awk/t2.awk b/ase/test/awk/t2.awk index c9accd00..b71ebc17 100644 --- a/ase/test/awk/t2.awk +++ b/ase/test/awk/t2.awk @@ -17,7 +17,8 @@ function sum (i) BEGIN { - //x = sum (10000000); + /*x = sum (10000000); + */ x = sum (100); s = x; ss = z; diff --git a/ase/test/awk/t3.awk b/ase/test/awk/t3.awk index 39f27056..af249217 100644 --- a/ase/test/awk/t3.awk +++ b/ase/test/awk/t3.awk @@ -1,4 +1,4 @@ -//global x, j; +/*global x, j;*/ func func1 (x) {