X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ff-exp.y;h=7cbfd5ac8f2b4eba41010a82f87c86051b1c1a19;hb=9ab433aae8243622dbc5756a7f7c82cf0fd5cb1c;hp=9e67561d34f53bb78b12f9f300e8133b0c3e77b5;hpb=27e232885db363fb545fd2f450e72d929e59b8f6;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/f-exp.y b/gdb/f-exp.y index 9e67561d34..7cbfd5ac8f 100644 --- a/gdb/f-exp.y +++ b/gdb/f-exp.y @@ -1,6 +1,7 @@ /* YACC parser for Fortran expressions, for GDB. - Copyright 1986, 1989, 1990, 1991, 1993, 1994 - Free Software Foundation, Inc. + Copyright 1986, 1989, 1990, 1991, 1993, 1994, 1995, 1996, 2000, 2001 + Free Software Foundation, Inc. + Contributed by Motorola. Adapted from the C parser by Farooq Butt (fmbutt@engage.sps.mot.com). @@ -52,6 +53,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "bfd.h" /* Required by objfiles.h. */ #include "symfile.h" /* Required by objfiles.h. */ #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */ +#include /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc), as well as gratuitiously global symbol names, so we can have multiple @@ -638,7 +640,6 @@ parse_number (p, len, parsed_float, putithere) { register LONGEST n = 0; register LONGEST prevn = 0; - register int i; register int c; register int base = input_radix; int unsigned_p = 0; @@ -653,7 +654,7 @@ parse_number (p, len, parsed_float, putithere) /* [dD] is not understood as an exponent by atof, change it to 'e'. */ char *tmp, *tmp2; - tmp = strsave (p); + tmp = xstrdup (p); for (tmp2 = tmp; *tmp2; ++tmp2) if (*tmp2 == 'd' || *tmp2 == 'D') *tmp2 = 'e'; @@ -696,26 +697,26 @@ parse_number (p, len, parsed_float, putithere) while (len-- > 0) { c = *p++; - if (c >= 'A' && c <= 'Z') - c += 'a' - 'A'; - if (c != 'l' && c != 'u') - n *= base; - if (c >= '0' && c <= '9') - n += i = c - '0'; + if (isupper (c)) + c = tolower (c); + if (len == 0 && c == 'l') + long_p = 1; + else if (len == 0 && c == 'u') + unsigned_p = 1; else { - if (base > 10 && c >= 'a' && c <= 'f') - n += i = c - 'a' + 10; - else if (len == 0 && c == 'l') - long_p = 1; - else if (len == 0 && c == 'u') - unsigned_p = 1; + int i; + if (c >= '0' && c <= '9') + i = c - '0'; + else if (c >= 'a' && c <= 'f') + i = c - 'a' + 10; else return ERROR; /* Char not a digit */ + if (i >= base) + return ERROR; /* Invalid digit in this base */ + n *= base; + n += i; } - if (i >= base) - return ERROR; /* Invalid digit in this base */ - /* Portably test for overflow (only works for nonzero values, so make a second check for zero). */ if ((prevn >= n) && n != 0)