Allow 'thread' to be used as a variable name in expressions.
authorPaul N. Hilfinger <hilfinger@adacore.com>
Tue, 12 Mar 2013 09:03:11 +0000 (09:03 +0000)
committerPaul N. Hilfinger <hilfinger@adacore.com>
Tue, 12 Mar 2013 09:03:11 +0000 (09:03 +0000)
commit82d049abf18bdffbccf6318a212a8be366a9ee17
tree4f700c9780b8c5656859aff09b9f812e874ed068
parentdad60f8e13c64b699e34d437c1c02b87ae158380
Allow 'thread' to be used as a variable name in expressions.

GDB treats the identifiers 'if', 'thread', and 'task' unconditionally
as expression delimiters in Ada mode, which is correct for 'if' and 'task',
but wrong for 'thread' in cases such as

      print thread

Borrowing from c-exp.y, we observe that 'thread' must be followed by
numerals, whereas identifiers never are and treat them as delimiters
only in that case.

In the process, the current also refactors and incidentally fixes the
code for rewinding the input to before the delimiting tokens.  For
example, the code

      watch expr if i > 2

fails because the input is only rewound to just before the 'i',
leaving the 'if' as part of the expression (and thus making the
rest look like trailing junk rather than a conditional clause).

gdb/ChangeLog:

    * ada-lex.l (rules): Only recognize 'thread' as a
    delimiter when followed by numerals, as for c-exp.y.
    Use new rewind_to_char function to rewind the input for
    expression-delimiting tokens.
    (rewind_to_char): New function.

gdb/testsuite/ChangeLog:

    * gdb.ada/expr_delims.exp: New file.
    * gdb.ada/expr_delims/foo.adb: New file.
    * gdb.ada/expr_delims/pck.ads: New file.
    * gdb.ada/expr_delims/pck.adb: New file.
gdb/ChangeLog
gdb/ada-lex.l
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.ada/expr_delims.exp [new file with mode: 0644]
gdb/testsuite/gdb.ada/expr_delims/foo.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/expr_delims/pck.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/expr_delims/pck.ads [new file with mode: 0644]