reject operator to be used as variable in for. eg: (for mult in plus minus) ....
* genmatch.c (get_operator): New function. (e_operation::e_operation): Adjust to call get_operator. (parse_for): Add call to get_operator. Thanks, Prathamesh
Index: genmatch.c =================================================================== --- genmatch.c (revision 213709) +++ genmatch.c (working copy) @@ -290,17 +290,16 @@ is_a_helper <expr *>::test (operand *op) return op->type == operand::OP_EXPR; } - -e_operation::e_operation (const char *id, bool is_commutative_, bool add_new_id) +id_base * +get_operator (const char *id) { - is_commutative = is_commutative_; id_base tem (id_base::CODE, id); - op = operators->find_with_hash (&tem, tem.hashval); + id_base *op = operators->find_with_hash (&tem, tem.hashval); if (op) - return; + return op; - /* Try all-uppercase. */ + /* Try all-uppercase. */ char *id2 = xstrdup (id); for (unsigned i = 0; i < strlen (id2); ++i) id2[i] = TOUPPER (id2[i]); @@ -309,7 +308,7 @@ e_operation::e_operation (const char *id if (op) { free (id2); - return; + return op; } /* Try _EXPR appended. */ @@ -320,9 +319,19 @@ e_operation::e_operation (const char *id if (op) { free (id2); - return; + return op; } + return 0; +} + +e_operation::e_operation (const char *id, bool is_commutative_, bool add_new_id) +{ + is_commutative = is_commutative_; + op = get_operator (id); + if (op) + return; + if (add_new_id == false) fatal ("%s is not an operator/built-in function", id); @@ -2105,6 +2114,9 @@ parse_for (cpp_reader *r, source_locatio const char *user_id = get_ident (r); eat_ident (r, "in"); + if (get_operator (user_id) != 0) + fatal_at (peek (r), "%s is an operator, cannot be used as variable in for", user_id); + vec<const char *> opers = vNULL; const cpp_token *token;