X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fada-lex.l;h=f198ea790c5e41323027edc2b13fe1059dddc879;hb=3c83b96e241336be0c3e26c06f2bf901d0fe8edd;hp=842ac7087a995d2f1cf68554071baf41c61abb0c;hpb=ea06eb3dd8f0780ee5ffa63354e60533990a890a;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l index 842ac7087a..f198ea790c 100644 --- a/gdb/ada-lex.l +++ b/gdb/ada-lex.l @@ -1,23 +1,21 @@ /* FLEX lexer for Ada expressions, for GDB. - Copyright (C) 1994, 1997, 1998, 2000, 2001, 2002, 2003, 2007 - Free Software Foundation, Inc. + Copyright (C) 1994, 1997, 1998, 2000, 2001, 2002, 2003, 2007, 2008, 2009, + 2010 Free Software Foundation, Inc. -This file is part of GDB. + This file is part of GDB. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ /*----------------------------------------------------------------------*/ @@ -60,6 +58,10 @@ static int find_dot_all (const char *); #undef YY_DECL #define YY_DECL static int yylex ( void ) +/* Flex generates a static function "input" which is not used. + Defining YY_NO_INPUT comments it out. */ +#define YY_NO_INPUT + #undef YY_INPUT #define YY_INPUT(BUF, RESULT, MAX_SIZE) \ if ( *lexptr == '\000' ) \ @@ -162,6 +164,15 @@ if { return 0; } +(task|thread) { + /* This keyword signals the end of the expression and + will be processed separately. */ + while (*lexptr != 't' && *lexptr != 'T') + lexptr--; + yyrestart(NULL); + return 0; + } + /* ADA KEYWORDS */ abs { return ABS; } @@ -178,6 +189,16 @@ rem { return REM; } then { return THEN; } xor { return XOR; } + /* BOOLEAN "KEYWORDS" */ + + /* True and False are not keywords in Ada, but rather enumeration constants. + However, the boolean type is no longer represented as an enum, so True + and False are no longer defined in symbol tables. We compromise by + making them keywords (when bare). */ + +true { return TRUEKEYWORD; } +false { return FALSEKEYWORD; } + /* ATTRIBUTES */ {TICK}[a-zA-Z][a-zA-Z]+ { return processAttribute (yytext+1); } @@ -341,11 +362,11 @@ processInt (const char *base0, const char *num0, const char *exp0) exp -= 1; } - if ((result >> (gdbarch_int_bit (current_gdbarch)-1)) == 0) + if ((result >> (gdbarch_int_bit (parse_gdbarch)-1)) == 0) yylval.typed_val.type = type_int (); - else if ((result >> (gdbarch_long_bit (current_gdbarch)-1)) == 0) + else if ((result >> (gdbarch_long_bit (parse_gdbarch)-1)) == 0) yylval.typed_val.type = type_long (); - else if (((result >> (gdbarch_long_bit (current_gdbarch)-1)) >> 1) == 0) + else if (((result >> (gdbarch_long_bit (parse_gdbarch)-1)) >> 1) == 0) { /* We have a number representable as an unsigned integer quantity. For consistency with the C treatment, we will treat it as an @@ -354,7 +375,8 @@ processInt (const char *base0, const char *num0, const char *exp0) for the mess, but C doesn't officially guarantee that a simple assignment does the trick (no, it doesn't; read the reference manual). */ - yylval.typed_val.type = builtin_type_unsigned_long; + yylval.typed_val.type + = builtin_type (parse_gdbarch)->builtin_unsigned_long; if (result & LONGEST_SIGN) yylval.typed_val.val = (LONGEST) (result & ~LONGEST_SIGN) @@ -373,13 +395,13 @@ processInt (const char *base0, const char *num0, const char *exp0) static int processReal (const char *num0) { - sscanf (num0, DOUBLEST_SCAN_FORMAT, &yylval.typed_val_float.dval); + sscanf (num0, "%" DOUBLEST_SCAN_FORMAT, &yylval.typed_val_float.dval); yylval.typed_val_float.type = type_float (); - if (sizeof(DOUBLEST) >= gdbarch_double_bit (current_gdbarch) + if (sizeof(DOUBLEST) >= gdbarch_double_bit (parse_gdbarch) / TARGET_CHAR_BIT) yylval.typed_val_float.type = type_double (); - if (sizeof(DOUBLEST) >= gdbarch_long_double_bit (current_gdbarch) + if (sizeof(DOUBLEST) >= gdbarch_long_double_bit (parse_gdbarch) / TARGET_CHAR_BIT) yylval.typed_val_float.type = type_long_double ();