aboutsummaryrefslogtreecommitdiff
path: root/gdb/macroexp.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2008-07-27 01:58:01 +0000
committerTom Tromey <tromey@redhat.com>2008-07-27 01:58:01 +0000
commitccb3ac8a121682a5fc5fd767f80872ef3e5c7b47 (patch)
tree901a10344c9f3703b079daac6713d2485aca07c4 /gdb/macroexp.c
parentd27eff1ca45cabcb6c0dfa01d3d31ee6abf1d383 (diff)
downloadgdb-ccb3ac8a121682a5fc5fd767f80872ef3e5c7b47.zip
gdb-ccb3ac8a121682a5fc5fd767f80872ef3e5c7b47.tar.gz
gdb-ccb3ac8a121682a5fc5fd767f80872ef3e5c7b47.tar.bz2
gdb:
PR gdb/1136: * macroexp.c (get_punctuator) <punctuators>: Rearrange to put longer tokens first. gdb/testsuite: * gdb.base/macscp.exp: Add test for macro lexing bug.
Diffstat (limited to 'gdb/macroexp.c')
-rw-r--r--gdb/macroexp.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/gdb/macroexp.c b/gdb/macroexp.c
index 0cb9575..8102bc0 100644
--- a/gdb/macroexp.c
+++ b/gdb/macroexp.c
@@ -416,16 +416,27 @@ get_punctuator (struct macro_buffer *tok, char *p, char *end)
{
/* Here, speed is much less important than correctness and clarity. */
- /* ISO/IEC 9899:1999 (E) Section 6.4.6 Paragraph 1 */
+ /* ISO/IEC 9899:1999 (E) Section 6.4.6 Paragraph 1.
+ Note that this table is ordered in a special way. A punctuator
+ which is a prefix of another punctuator must appear after its
+ "extension". Otherwise, the wrong token will be returned. */
static const char * const punctuators[] = {
- "[", "]", "(", ")", "{", "}", ".", "->",
- "++", "--", "&", "*", "+", "-", "~", "!",
- "/", "%", "<<", ">>", "<", ">", "<=", ">=", "==", "!=",
- "^", "|", "&&", "||",
- "?", ":", ";", "...",
- "=", "*=", "/=", "%=", "+=", "-=", "<<=", ">>=", "&=", "^=", "|=",
- ",", "#", "##",
- "<:", ":>", "<%", "%>", "%:", "%:%:",
+ "[", "]", "(", ")", "{", "}", "?", ";", ",", "~",
+ "...", ".",
+ "->", "--", "-=", "-",
+ "++", "+=", "+",
+ "*=", "*",
+ "!=", "!",
+ "&&", "&=", "&",
+ "/=", "/",
+ "%>", "%:%:", "%:", "%=", "%",
+ "^=", "^",
+ "##", "#",
+ ":>", ":",
+ "||", "|=", "|",
+ "<<=", "<<", "<=", "<:", "<%", "<",
+ ">>=", ">>", ">=", ">",
+ "==", "=",
0
};