gdb/fortran: Cleanup code for parsing logical constants
This patch cleans up the code used for parsing the Fortran logical constants '.TRUE.' and '.FALSE.'. Instead of listing both upper and lowercase versions of these strings we now use strncasecmp. I've also switched to use ARRAY_SIZE for the array iteration, and I've cleaned up whitespace in the vicinity of the code I've changed. Finally, I've added a test to ensure that both the upper and lower case versions of the logical constants are understood by GDB, something that was missing previously. There should be no user visible changes after this commit. gdb/ChangeLog: * f-exp.y (struct f77_boolean_val): Add comments. (boolean_values): Remove uppercase versions, and end marker. (yylex): Use ARRAY_SIZE for iterating over boolean_values array, and use strncasecmp to achieve case insensitivity. Additionally, perform whitespace cleanup around this code. gdb/testsuite/ChangeLog: * gdb.fortran/types.exp (test_logical_literal_types_accepted): Check upper and lower case logical literals.
This commit is contained in:
parent
84ec972406
commit
dd9f2c763b
|
@ -1,3 +1,11 @@
|
|||
2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* f-exp.y (struct f77_boolean_val): Add comments.
|
||||
(boolean_values): Remove uppercase versions, and end marker.
|
||||
(yylex): Use ARRAY_SIZE for iterating over boolean_values array,
|
||||
and use strncasecmp to achieve case insensitivity. Additionally,
|
||||
perform whitespace cleanup around this code.
|
||||
|
||||
2019-03-06 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* remote-sim.c (gdbsim_target_open): Use result of
|
||||
|
|
15
gdb/f-exp.y
15
gdb/f-exp.y
|
@ -807,19 +807,22 @@ static const struct token dot_ops[] =
|
|||
{ NULL, 0, BINOP_END }
|
||||
};
|
||||
|
||||
/* Holds the Fortran representation of a boolean, and the integer value we
|
||||
substitute in when one of the matching strings is parsed. */
|
||||
struct f77_boolean_val
|
||||
{
|
||||
/* The string representing a Fortran boolean. */
|
||||
const char *name;
|
||||
|
||||
/* The integer value to replace it with. */
|
||||
int value;
|
||||
};
|
||||
|
||||
/* The set of Fortran booleans. These are matched case insensitively. */
|
||||
static const struct f77_boolean_val boolean_values[] =
|
||||
{
|
||||
{ ".true.", 1 },
|
||||
{ ".TRUE.", 1 },
|
||||
{ ".false.", 0 },
|
||||
{ ".FALSE.", 0 },
|
||||
{ NULL, 0 }
|
||||
{ ".false.", 0 }
|
||||
};
|
||||
|
||||
static const struct token f77_keywords[] =
|
||||
|
@ -937,9 +940,9 @@ yylex (void)
|
|||
|
||||
if (*lexptr == '.')
|
||||
{
|
||||
for (int i = 0; boolean_values[i].name != NULL; i++)
|
||||
for (int i = 0; i < ARRAY_SIZE (boolean_values); i++)
|
||||
{
|
||||
if (strncmp (tokstart, boolean_values[i].name,
|
||||
if (strncasecmp (tokstart, boolean_values[i].name,
|
||||
strlen (boolean_values[i].name)) == 0)
|
||||
{
|
||||
lexptr += strlen (boolean_values[i].name);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.fortran/types.exp (test_logical_literal_types_accepted):
|
||||
Check upper and lower case logical literals.
|
||||
|
||||
2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.fortran/types.exp (test_float_literal_types_accepted):
|
||||
|
|
|
@ -45,10 +45,13 @@ proc test_integer_literal_types_rejected {} {
|
|||
proc test_logical_literal_types_accepted {} {
|
||||
global gdb_prompt
|
||||
|
||||
# Test the only possible values for a logical, TRUE and FALSE.
|
||||
# Test the only possible values for a logical, TRUE and FALSE (and
|
||||
# also true and false).
|
||||
|
||||
gdb_test "pt .TRUE." "type = logical\\*2"
|
||||
gdb_test "pt .FALSE." "type = logical\\*2"
|
||||
gdb_test "pt .true." "type = logical\\*2"
|
||||
gdb_test "pt .false." "type = logical\\*2"
|
||||
}
|
||||
|
||||
proc test_float_literal_types_accepted {} {
|
||||
|
|
Loading…
Reference in New Issue