From: Keith Seitz Date: Tue, 25 Aug 2009 18:40:45 +0000 (+0000) Subject: * c-exp.y (yylex): Add cxx_only check for tokentab2 and tokentab3 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ec7f2efef84eae8bf6a1228c1d27fd2c19db5408;p=binutils-gdb.git * c-exp.y (yylex): Add cxx_only check for tokentab2 and tokentab3 searches. (tokentab3): Add cxx_only for DOT_STAR. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 14db800645d..2ab9ec8ec17 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2009-08-25 Keith Seitz + + * c-exp.y (yylex): Add cxx_only check for tokentab2 and tokentab3 + searches. + (tokentab3): Add cxx_only for DOT_STAR. + 2009-08-25 Pedro Alves * inferior.c (print_inferior): Align columns left. Remove header diff --git a/gdb/c-exp.y b/gdb/c-exp.y index fc41bfd0d6b..f8e4f128263 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -1683,6 +1683,8 @@ static const struct token tokentab2[] = {"->", ARROW, BINOP_END, 0}, {"&&", ANDAND, BINOP_END, 0}, {"||", OROR, BINOP_END, 0}, + /* "::" is *not* only C++: gdb overrides its meaning in several + different ways, e.g., 'filename'::func, function::variable. */ {"::", COLONCOLON, BINOP_END, 0}, {"<<", LSH, BINOP_END, 0}, {">>", RSH, BINOP_END, 0}, @@ -1690,7 +1692,7 @@ static const struct token tokentab2[] = {"!=", NOTEQUAL, BINOP_END, 0}, {"<=", LEQ, BINOP_END, 0}, {">=", GEQ, BINOP_END, 0}, - {".*", DOT_STAR, BINOP_END, 0} + {".*", DOT_STAR, BINOP_END, 1} }; /* Identifier-like tokens. */ @@ -1849,6 +1851,10 @@ yylex (void) for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++) if (strncmp (tokstart, tokentab3[i].operator, 3) == 0) { + if (tokentab3[i].cxx_only + && parse_language->la_language != language_cplus) + break; + lexptr += 3; yylval.opcode = tokentab3[i].opcode; return tokentab3[i].token; @@ -1858,6 +1864,10 @@ yylex (void) for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++) if (strncmp (tokstart, tokentab2[i].operator, 2) == 0) { + if (tokentab2[i].cxx_only + && parse_language->la_language != language_cplus) + break; + lexptr += 2; yylval.opcode = tokentab2[i].opcode; if (in_parse_field && tokentab2[i].token == ARROW)