X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fp-exp.y;h=d1fcb1b000f6e35c6a6b56dddf3cbc209f340bfd;hb=d28847ce8eb6da33e8bc2905fe0b08631360a764;hp=8cde6d561ae7b87ac5b46efd426d58728dd96974;hpb=d3d6d17346f2f8667b8d8539bdb8a21bb5d03b72;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/p-exp.y b/gdb/p-exp.y index 8cde6d561a..d1fcb1b000 100644 --- a/gdb/p-exp.y +++ b/gdb/p-exp.y @@ -1,5 +1,5 @@ /* YACC parser for Pascal expressions, for GDB. - Copyright (C) 2000 + Copyright 2000 Free Software Foundation, Inc. This file is part of GDB. @@ -853,14 +853,13 @@ parse_number (p, len, parsed_float, putithere) } else { - high_bit = (((ULONGEST)1) - << (TARGET_LONG_LONG_BIT - 32 - 1) - << 16 - << 16); - if (high_bit == 0) + int shift; + if (sizeof (ULONGEST) * HOST_CHAR_BIT < TARGET_LONG_LONG_BIT) /* A long long does not fit in a LONGEST. */ - high_bit = - (ULONGEST)1 << (sizeof (LONGEST) * HOST_CHAR_BIT - 1); + shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1); + else + shift = (TARGET_LONG_LONG_BIT - 1); + high_bit = (ULONGEST) 1 << shift; unsigned_type = builtin_type_unsigned_long_long; signed_type = builtin_type_long_long; } @@ -953,7 +952,7 @@ yylex () /* See if it is a special token of length 3. */ if (explen > 2) for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++) - if (strnicmp (tokstart, tokentab3[i].operator, 3) == 0 + if (strncasecmp (tokstart, tokentab3[i].operator, 3) == 0 && (!isalpha (tokentab3[i].operator[0]) || explen == 3 || (!isalpha (tokstart[3]) && !isdigit (tokstart[3]) && tokstart[3] != '_'))) { @@ -965,7 +964,7 @@ yylex () /* See if it is a special token of length 2. */ if (explen > 1) for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++) - if (strnicmp (tokstart, tokentab2[i].operator, 2) == 0 + if (strncasecmp (tokstart, tokentab2[i].operator, 2) == 0 && (!isalpha (tokentab2[i].operator[0]) || explen == 2 || (!isalpha (tokstart[2]) && !isdigit (tokstart[2]) && tokstart[2] != '_'))) { @@ -1300,21 +1299,55 @@ yylex () VAR_NAMESPACE, &is_a_field_of_this, (struct symtab **) NULL); - /* second chance uppercased ! */ + /* second chance uppercased (as Free Pascal does). */ if (!sym) { - for (i = 0;i <= namelen;i++) + for (i = 0; i <= namelen; i++) { - if ((tmp[i]>='a' && tmp[i]<='z')) + if ((tmp[i] >= 'a' && tmp[i] <= 'z')) tmp[i] -= ('a'-'A'); - /* I am not sure that copy_name gives excatly the same result ! */ - if ((tokstart[i]>='a' && tokstart[i]<='z')) - tokstart[i] -= ('a'-'A'); } - sym = lookup_symbol (tmp, expression_context_block, - VAR_NAMESPACE, - &is_a_field_of_this, - (struct symtab **) NULL); + sym = lookup_symbol (tmp, expression_context_block, + VAR_NAMESPACE, + &is_a_field_of_this, + (struct symtab **) NULL); + if (sym) + for (i = 0; i <= namelen; i++) + { + if ((tokstart[i] >= 'a' && tokstart[i] <= 'z')) + tokstart[i] -= ('a'-'A'); + } + } + /* Third chance Capitalized (as GPC does). */ + if (!sym) + { + for (i = 0; i <= namelen; i++) + { + if (i == 0) + { + if ((tmp[i] >= 'a' && tmp[i] <= 'z')) + tmp[i] -= ('a'-'A'); + } + else + if ((tmp[i] >= 'A' && tmp[i] <= 'Z')) + tmp[i] -= ('A'-'a'); + } + sym = lookup_symbol (tmp, expression_context_block, + VAR_NAMESPACE, + &is_a_field_of_this, + (struct symtab **) NULL); + if (sym) + for (i = 0; i <= namelen; i++) + { + if (i == 0) + { + if ((tokstart[i] >= 'a' && tokstart[i] <= 'z')) + tokstart[i] -= ('a'-'A'); + } + else + if ((tokstart[i] >= 'A' && tokstart[i] <= 'Z')) + tokstart[i] -= ('A'-'a'); + } } /* Call lookup_symtab, not lookup_partial_symtab, in case there are no psymtabs (coff, xcoff, or some future change to blow away the