===================================================================
@@ -2746,6 +2746,7 @@
vec<simplify *> simplifiers;
vec<predicate_id *> user_predicates;
bool parsing_match_operand;
+ bool parsing_match;
};
/* Lexing helpers. */
@@ -3059,8 +3060,11 @@
/* If this is possibly a user-defined identifier mark it used. */
if (token->type == CPP_NAME)
{
- id_base *idb = get_operator ((const char *)CPP_HASHNODE
- (token->val.node.node)->ident.str);
+ const char *lexeme = (const char *) CPP_HASHNODE (token->val.node.node)->ident.str;
+ if (strcmp (lexeme, "t") == 0 && !parsing_match)
+ fatal_at (token, "'t' is allowed only in predicates");
+
+ id_base *idb = get_operator (lexeme);
user_id *p;
if (idb && (p = dyn_cast<user_id *> (idb)) && p->is_oper_list)
record_operlist (token->src_loc, p);
@@ -3497,6 +3501,7 @@
parse_simplify (token->src_loc, simplifiers, NULL, NULL);
else if (strcmp (id, "match") == 0)
{
+ parsing_match = true;
bool with_args = false;
if (peek ()->type == CPP_OPEN_PAREN)
{
@@ -3530,6 +3535,7 @@
fatal_at (token, "non-matching number of match operands");
p->nargs = e ? e->ops.length () : 0;
parse_simplify (token->src_loc, p->matchers, p, e);
+ parsing_match = false;
}
else if (strcmp (id, "for") == 0)
parse_for (token->src_loc);
@@ -3569,6 +3575,7 @@
oper_lists = vNULL;
user_predicates = vNULL;
parsing_match_operand = false;
+ parsing_match = false;
const cpp_token *token = next ();
while (token->type != CPP_EOF)