* gdb.base/fileio.exp: Drop tests for nointerrupts and noinferiorio.
[deliverable/binutils-gdb.git] / gdb / objc-exp.y
index b0513bd97e779b0dcbf2f1db8ac164ff9b7ffd8d..f6123e6ab1d16ddfd2ed7d9b983f2dab2556b7c6 100644 (file)
@@ -1,39 +1,38 @@
 /* YACC parser for C expressions, for GDB.
-   Copyright (C) 1986, 1989, 1990, 1991, 1993, 1994
-   Free Software Foundation, Inc.
-
-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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-/* Parse a C expression from text in a string,
-   and return the result as a  struct expression  pointer.
-   That structure contains arithmetic operations in reverse polish,
-   with constants represented by operations that are followed by special data.
-   See expression.h for the details of the format.
-   What is important here is that it can be built up sequentially
-   during the process of parsing; the lower levels of the tree always
-   come first in the result.
+
+   Copyright 1986, 1989, 1990, 1991, 1993, 1994, 2002 Free Software
+   Foundation, Inc.
+
+   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 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., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Parse a C expression from text in a string, and return the result
+   as a struct expression pointer.  That structure contains arithmetic
+   operations in reverse polish, with constants represented by
+   operations that are followed by special data.  See expression.h for
+   the details of the format.  What is important here is that it can
+   be built up sequentially during the process of parsing; the lower
+   levels of the tree always come first in the result.
 
    Note that malloc's and realloc's in this file are transformed to
    xmalloc and xrealloc respectively by the same sed command in the
-   makefile that remaps any other malloc/realloc inserted by the parser
-   generator.  Doing this with #defines and trying to control the interaction
-   with include files (<malloc.h> and <stdlib.h> for example) just became
-   too messy, particularly when such includes can be inserted at random
-   times by the parser generator.  */
+   makefile that remaps any other malloc/realloc inserted by the
+   parser generator.  Doing this with #defines and trying to control
+   the interaction with include files (<malloc.h> and <stdlib.h> for
+   example) just became too messy, particularly when such includes can
+   be inserted at random times by the parser generator.  */
    
 %{
 
@@ -42,7 +41,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include <ctype.h>
 #include "expression.h"
 
-#include "objc-lang.h" /* for objc language constructs */
+#include "objc-lang.h" /* For objc language constructs.  */
 
 #include "value.h"
 #include "parser-defs.h"
@@ -50,16 +49,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "c-lang.h"
 #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 "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "top.h"
 #include "completer.h" /* For skip_quoted().  */
+#include "block.h"
 
-/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
-   as well as gratuitiously global symbol names, so we can have multiple
-   yacc generated parsers in gdb.  Note that these are only the variables
-   produced by yacc.  If other parser generators (bison, byacc, etc) produce
-   additional global names that conflict at link time, then those parser
-   generators need to be fixed instead of adding those names to this list. */
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
+   etc), as well as gratuitiously global symbol names, so we can have
+   multiple yacc generated parsers in gdb.  Note that these are only
+   the variables produced by yacc.  If other parser generators (bison,
+   byacc, etc) produce additional global names that conflict at link
+   time, then those parser generators need to be fixed instead of
+   adding those names to this list.  */
 
 #define        yymaxdepth      objc_maxdepth
 #define        yyparse         objc_parse
@@ -103,7 +104,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define yycheck                objc_yycheck
 
 #ifndef YYDEBUG
-#define        YYDEBUG 0               /* Default to no yydebug support */
+#define        YYDEBUG 0               /* Default to no yydebug support */
 #endif
 
 int
@@ -148,7 +149,7 @@ yyerror PARAMS ((char *));
   }
 
 %{
-/* YYSTYPE gets defined by %union */
+/* YYSTYPE gets defined by %union */
 static int
 parse_number PARAMS ((char *, int, int, YYSTYPE *));
 %}
@@ -167,13 +168,12 @@ parse_number PARAMS ((char *, int, int, YYSTYPE *));
 %token <typed_val_int> INT
 %token <typed_val_float> FLOAT
 
-/* Both NAME and TYPENAME tokens represent symbols in the input,
-   and both convey their data as strings.
-   But a TYPENAME is a string that happens to be defined as a typedef
-   or builtin type name (such as int or char)
-   and a NAME is any other symbol.
-   Contexts where this distinction is not important can use the
-   nonterminal "name", which matches either NAME or TYPENAME.  */
+/* Both NAME and TYPENAME tokens represent symbols in the input, and
+   both convey their data as strings.  But a TYPENAME is a string that
+   happens to be defined as a typedef or builtin type name (such as
+   int or char) and a NAME is any other symbol.  Contexts where this
+   distinction is not important can use the nonterminal "name", which
+   matches either NAME or TYPENAME.  */
 
 %token <sval> STRING
 %token <sval> NSSTRING         /* ObjC Foundation "NSString" literal */
@@ -196,17 +196,14 @@ parse_number PARAMS ((char *, int, int, YYSTYPE *));
 %token TEMPLATE
 %token ERROR
 
-/* Special type cases, put in to allow the parser to distinguish different
-   legal basetypes.  */
+/* Special type cases, put in to allow the parser to distinguish
+   different legal basetypes.  */
 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
 
 %token <voidval> VARIABLE
 
 %token <opcode> ASSIGN_MODIFY
 
-/* C++ */
-%token THIS
-
 %left ','
 %left ABOVE_COMMA
 %right '=' ASSIGN_MODIFY
@@ -250,9 +247,11 @@ exp1       :       exp
 /* Expressions, not including the comma operator.  */
 exp    :       '*' exp    %prec UNARY
                        { write_exp_elt_opcode (UNOP_IND); }
+       ;
 
 exp    :       '&' exp    %prec UNARY
                        { write_exp_elt_opcode (UNOP_ADDR); }
+       ;
 
 exp    :       '-' exp    %prec UNARY
                        { write_exp_elt_opcode (UNOP_NEG); }
@@ -345,9 +344,9 @@ exp :       '[' TYPENAME
                          start_msglist();
                        }
                msglist ']'
-                       { write_exp_elt_opcode (OP_MSGCALL);
+                       { write_exp_elt_opcode (OP_OBJC_MSGCALL);
                          end_msglist();
-                         write_exp_elt_opcode (OP_MSGCALL); 
+                         write_exp_elt_opcode (OP_OBJC_MSGCALL); 
                        }
        ;
 
@@ -360,18 +359,18 @@ exp       :       '[' CLASSNAME
                          start_msglist();
                        }
                msglist ']'
-                       { write_exp_elt_opcode (OP_MSGCALL);
+                       { write_exp_elt_opcode (OP_OBJC_MSGCALL);
                          end_msglist();
-                         write_exp_elt_opcode (OP_MSGCALL); 
+                         write_exp_elt_opcode (OP_OBJC_MSGCALL); 
                        }
        ;
 
 exp    :       '[' exp
                        { start_msglist(); }
                msglist ']'
-                       { write_exp_elt_opcode (OP_MSGCALL);
+                       { write_exp_elt_opcode (OP_OBJC_MSGCALL);
                          end_msglist();
-                         write_exp_elt_opcode (OP_MSGCALL); 
+                         write_exp_elt_opcode (OP_OBJC_MSGCALL); 
                        }
        ;
 
@@ -386,9 +385,9 @@ msgarglist :        msgarg
 
 msgarg :       name ':' exp
                        { add_msglist(&$1, 1); }
-       |       ':' exp /* unnamed arg */
+       |       ':' exp /* Unnamed arg.  */
                        { add_msglist(0, 1);   }
-       |       ',' exp /* variable number of args */
+       |       ',' exp /* Variable number of args.  */
                        { add_msglist(0, 0);   }
        ;
 
@@ -564,14 +563,15 @@ exp       :       variable
        ;
 
 exp    :       VARIABLE
-                       /* Already written by write_dollar_variable. */
+                       /* Already written by write_dollar_variable.  */
        ;
 
 exp    :       SELECTOR 
                        {
-                         write_exp_elt_opcode (OP_SELECTOR);
+                         write_exp_elt_opcode (OP_OBJC_SELECTOR);
                          write_exp_string ($1);
-                         write_exp_elt_opcode (OP_SELECTOR); }
+                         write_exp_elt_opcode (OP_OBJC_SELECTOR); }
+       ;
 
 exp    :       SIZEOF '(' type ')'     %prec UNARY
                        { write_exp_elt_opcode (OP_LONG);
@@ -582,11 +582,12 @@ exp       :       SIZEOF '(' type ')'     %prec UNARY
        ;
 
 exp    :       STRING
-                       { /* C strings are converted into array constants with
-                            an explicit null byte added at the end.  Thus
-                            the array upper bound is the string length.
-                            There is no such thing in C as a completely empty
-                            string. */
+                       { /* C strings are converted into array
+                            constants with an explicit null byte
+                            added at the end.  Thus the array upper
+                            bound is the string length.  There is no
+                            such thing in C as a completely empty
+                            string.  */
                          char *sp = $1.ptr; int count = $1.length;
                          while (count-- > 0)
                            {
@@ -606,21 +607,13 @@ exp       :       STRING
        ;
 
 exp     :      NSSTRING        /* ObjC NextStep NSString constant
-                                * of the form '@' '"' string '"'
+                                * of the form '@' '"' string '"'.
                                 */
-                       { write_exp_elt_opcode (OP_NSSTRING);
+                       { write_exp_elt_opcode (OP_OBJC_NSSTRING);
                          write_exp_string ($1);
-                         write_exp_elt_opcode (OP_NSSTRING); }
+                         write_exp_elt_opcode (OP_OBJC_NSSTRING); }
        ;
 
-/* C++.  */
-exp    :       THIS
-                       { write_exp_elt_opcode (OP_THIS);
-                         write_exp_elt_opcode (OP_THIS); }
-       ;
-
-/* end of C++.  */
-
 block  :       BLOCKNAME
                        {
                          if ($1.sym != 0)
@@ -641,7 +634,7 @@ block       :       BLOCKNAME
 block  :       block COLONCOLON name
                        { struct symbol *tem
                            = lookup_symbol (copy_name ($3), $1,
-                                            VAR_NAMESPACE, (int *) NULL,
+                                            VAR_DOMAIN, (int *) NULL,
                                             (struct symtab **) NULL);
                          if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
                            error ("No function \"%s\" in specified context.",
@@ -652,7 +645,7 @@ block       :       block COLONCOLON name
 variable:      block COLONCOLON name
                        { struct symbol *sym;
                          sym = lookup_symbol (copy_name ($3), $1,
-                                              VAR_NAMESPACE, (int *) NULL,
+                                              VAR_DOMAIN, (int *) NULL,
                                               (struct symtab **) NULL);
                          if (sym == 0)
                            error ("No symbol \"%s\" in specified context.",
@@ -712,7 +705,7 @@ variable:   qualified_name
 
                          sym =
                            lookup_symbol (name, (const struct block *) NULL,
-                                          VAR_NAMESPACE, (int *) NULL,
+                                          VAR_DOMAIN, (int *) NULL,
                                           (struct symtab **) NULL);
                          if (sym)
                            {
@@ -767,8 +760,8 @@ variable:   name_not_typename
                              if (innermost_block == 0 || 
                                  contained_in (block_found, innermost_block))
                                innermost_block = block_found;
-                             write_exp_elt_opcode (OP_SELF);
-                             write_exp_elt_opcode (OP_SELF);
+                             write_exp_elt_opcode (OP_OBJC_SELF);
+                             write_exp_elt_opcode (OP_OBJC_SELF);
                              write_exp_elt_opcode (STRUCTOP_PTR);
                              write_exp_string ($1.stoken);
                              write_exp_elt_opcode (STRUCTOP_PTR);
@@ -776,7 +769,7 @@ variable:   name_not_typename
                          else
                            {
                              struct minimal_symbol *msymbol;
-                             register char *arg = copy_name ($1.stoken);
+                             char *arg = copy_name ($1.stoken);
 
                              msymbol =
                                lookup_minimal_symbol (arg, NULL, NULL);
@@ -798,11 +791,11 @@ variable: name_not_typename
 
 
 ptype  :       typebase
-       /* "const" and "volatile" are curently ignored.  A type qualifier
-          before the type is currently handled in the typebase rule.
-          The reason for recognizing these here (shift/reduce conflicts)
-          might be obsolete now that some pointer to member rules have
-          been deleted.  */
+       /* "const" and "volatile" are curently ignored.  A type
+          qualifier before the type is currently handled in the
+          typebase rule.  The reason for recognizing these here
+          (shift/reduce conflicts) might be obsolete now that some
+          pointer to member rules have been deleted.  */
        |       typebase CONST_KEYWORD
        |       typebase VOLATILE_KEYWORD
        |       typebase abs_decl
@@ -853,12 +846,12 @@ array_mod:        '[' ']'
 func_mod:      '(' ')'
                        { $$ = 0; }
        |       '(' nonempty_typelist ')'
-                       { free ((PTR)$2); $$ = 0; }
+                       { free ($2); $$ = 0; }
        ;
 
 /* We used to try to recognize more pointer to member types here, but
-   that didn't work (shift/reduce conflicts meant that these rules never
-   got executed).  The problem is that
+   that didn't work (shift/reduce conflicts meant that these rules
+   never got executed).  The problem is that
      int (foo::bar::baz::bizzle)
    is a function type but
      int (foo::bar::baz::bizzle::*)
@@ -869,7 +862,7 @@ type        :       ptype
                        { $$ = lookup_member_type (builtin_type_int, $1); }
        ;
 
-typebase  /* Implements (approximately): (type-qualifier)* type-specifier */
+typebase  /* Implements (approximately): (type-qualifier)* type-specifier */
        :       TYPENAME
                        { $$ = $1.type; }
        |       CLASSNAME
@@ -930,9 +923,9 @@ typebase  /* Implements (approximately): (type-qualifier)* type-specifier */
                        { $$ = lookup_template_type(copy_name($2), $4,
                                                    expression_context_block);
                        }
-       /* "const" and "volatile" are curently ignored.  A type qualifier
-          after the type is handled in the ptype rule.  I think these could
-          be too.  */
+       /* "const" and "volatile" are curently ignored.  A type
+          qualifier after the type is handled in the ptype rule.  I
+          think these could be too.  */
        |       CONST_KEYWORD typebase { $$ = $2; }
        |       VOLATILE_KEYWORD typebase { $$ = $2; }
        ;
@@ -961,7 +954,7 @@ typename:   TYPENAME
 nonempty_typelist
        :       type
                { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
-                 $<ivec>$[0] = 1;      /* Number of types in vector */
+                 $<ivec>$[0] = 1;      /* Number of types in vector */
                  $$[1] = $1;
                }
        |       nonempty_typelist ',' type
@@ -980,39 +973,40 @@ name      :       NAME        { $$ = $1.stoken; }
 
 name_not_typename :    NAME
        |       BLOCKNAME
-/* These would be useful if name_not_typename was useful, but it is just
-   a fake for "variable", so these cause reduce/reduce conflicts because
-   the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
-   =exp) or just an exp.  If name_not_typename was ever used in an lvalue
-   context where only a name could occur, this might be useful.
-       |       NAME_OR_INT
- */
+/* These would be useful if name_not_typename was useful, but it is
+   just a fake for "variable", so these cause reduce/reduce conflicts
+   because the parser can't tell whether NAME_OR_INT is a
+   name_not_typename (=variable, =exp) or just an exp.  If
+   name_not_typename was ever used in an lvalue context where only a
+   name could occur, this might be useful.  */
+/*     | NAME_OR_INT */
        ;
 
 %%
 
 /* Take care of parsing a number (anything that starts with a digit).
-   Set yylval and return the token type; update lexptr.
-   LEN is the number of characters in it.  */
+   Set yylval and return the token type; update lexptr.  LEN is the
+   number of characters in it.  */
 
-/*** Needs some error checking for the float case ***/
+/*** Needs some error checking for the float case ***/
 
 static int
 parse_number (p, len, parsed_float, putithere)
-     register char *p;
-     register int len;
+     char *p;
+     int len;
      int parsed_float;
      YYSTYPE *putithere;
 {
-  /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
-     here, and we do kind of silly things like cast to unsigned.  */
-  register LONGEST n = 0;
-  register LONGEST prevn = 0;
+  /* FIXME: Shouldn't these be unsigned?  We don't deal with negative
+     values here, and we do kind of silly things like cast to
+     unsigned.  */
+  LONGEST n = 0;
+  LONGEST prevn = 0;
   unsigned LONGEST un;
 
-  register int i = 0;
-  register int c;
-  register int base = input_radix;
+  int i = 0;
+  int c;
+  int base = input_radix;
   int unsigned_p = 0;
 
   /* Number of "L" suffixes encountered.  */
@@ -1032,9 +1026,9 @@ parse_number (p, len, parsed_float, putithere)
       /* It's a float since it contains a point or an exponent.  */
 
       if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
-       sscanf (p, "%g", &putithere->typed_val_float.dval);
+       sscanf (p, "%g", (float *)&putithere->typed_val_float.dval);
       else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
-       sscanf (p, "%lg", &putithere->typed_val_float.dval);
+       sscanf (p, "%lg", (double *)&putithere->typed_val_float.dval);
       else
        {
 #ifdef PRINTF_HAS_LONG_DOUBLE
@@ -1042,7 +1036,7 @@ parse_number (p, len, parsed_float, putithere)
 #else
          /* Scan it into a double, then assign it to the long double.
             This at least wins with values representable in the range
-            of doubles. */
+            of doubles.  */
          double temp;
          sscanf (p, "%lg", &temp);
          putithere->typed_val_float.dval = temp;
@@ -1065,7 +1059,7 @@ parse_number (p, len, parsed_float, putithere)
       return FLOAT;
     }
 
-  /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
+  /* Handle base-switching prefixes 0x, 0t, 0d, and 0.  */
   if (p[0] == '0')
     switch (p[1])
       {
@@ -1128,20 +1122,20 @@ parse_number (p, len, parsed_float, putithere)
              found_suffix = 1;
            }
          else
-           return ERROR;       /* Char not a digit */
+           return ERROR;       /* Char not a digit */
        }
       if (i >= base)
-       return ERROR;           /* Invalid digit in this base */
+       return ERROR;           /* Invalid digit in this base */
 
-      /* Portably test for overflow (only works for nonzero values, so make
-        a second check for zero).  FIXME: Can't we just make n and prevn
-        unsigned and avoid this?  */
+      /* Portably test for overflow (only works for nonzero values, so
+        make a second check for zero).  FIXME: Can't we just make n
+        and prevn unsigned and avoid this?  */
       if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
-       unsigned_p = 1;         /* Try something unsigned */
+       unsigned_p = 1;         /* Try something unsigned */
 
       /* Portably test for unsigned overflow.
-        FIXME: This check is wrong; for example it doesn't find overflow
-        on 0x123456789 when LONGEST is 32 bits.  */
+        FIXME: This check is wrong; for example it doesn't find 
+        overflow on 0x123456789 when LONGEST is 32 bits.  */
       if (c != 'l' && c != 'u' && n != 0)
        {       
          if ((unsigned_p && (unsigned LONGEST) prevn >= (unsigned LONGEST) n))
@@ -1201,7 +1195,7 @@ parse_number (p, len, parsed_float, putithere)
    putithere->typed_val_int.val = n;
 
    /* If the high bit of the worked out type is set then this number
-      has to be unsigned. */
+      has to be unsigned.  */
 
    if (unsigned_p || (n & high_bit)) 
      {
@@ -1287,6 +1281,7 @@ yylex ()
        return tokentab2[i].token;
       }
 
+  c = 0;
   switch (tokchr = *tokstart)
     {
     case 0:
@@ -1299,9 +1294,9 @@ yylex ()
       goto retry;
 
     case '\'':
-      /* We either have a character constant ('0' or '\177' for example)
-        or we have a quoted symbol reference ('foo(int,int)' in C++
-        for example). */
+      /* We either have a character constant ('0' or '\177' for
+        example) or we have a quoted symbol reference ('foo(int,int)'
+        in C++ for example).  */
       lexptr++;
       c = *lexptr++;
       if (c == '\\')
@@ -1315,9 +1310,7 @@ yylex ()
       c = *lexptr++;
       if (c != '\'')
        {
-         namelen = skip_quoted (tokstart, 
-                                get_gdb_completer_word_break_characters())
-           - tokstart;
+         namelen = skip_quoted (tokstart) - tokstart;
          if (namelen > 2)
            {
              lexptr = tokstart + namelen;
@@ -1352,7 +1345,7 @@ yylex ()
     case '.':
       /* Might be a floating point number.  */
       if (lexptr[1] < '0' || lexptr[1] > '9')
-       goto symbol;            /* Nope, must be a symbol. */
+       goto symbol;            /* Nope, must be a symbol.  */
       /* FALL THRU into number case.  */
 
     case '0':
@@ -1368,8 +1361,8 @@ yylex ()
       {
        /* It's a number.  */
        int got_dot = 0, got_e = 0, toktype = FLOAT;
-       /* initialize toktype to anything other than ERROR. */
-       register char *p = tokstart;
+       /* Initialize toktype to anything other than ERROR.  */
+       char *p = tokstart;
        int hex = input_radix > 10;
        int local_radix = input_radix;
        if (tokchr == '0' && (p[1] == 'x' || p[1] == 'X'))
@@ -1393,14 +1386,15 @@ yylex ()
 
            if (!hex && (*p == 'e' || *p == 'E'))
              if (got_e)
-               toktype = ERROR;        /* only one 'e' in a float */
+               toktype = ERROR;        /* Only one 'e' in a float.  */
              else
                got_e = 1;
-           /* This test does not include !hex, because a '.' always indicates
-              a decimal floating point number regardless of the radix.  */
+           /* This test does not include !hex, because a '.' always
+              indicates a decimal floating point number regardless of
+              the radix.  */
            else if (*p == '.')
              if (got_dot)
-               toktype = ERROR;        /* only one '.' in a float */
+               toktype = ERROR;        /* Only one '.' in a float.  */
              else
                got_dot = 1;
            else if (got_e && (p[-1] == 'e' || p[-1] == 'E') &&
@@ -1408,24 +1402,28 @@ yylex ()
              /* This is the sign of the exponent, not the end of the
                 number.  */
              continue;
-           /* Always take decimal digits; parse_number handles radix error */
+           /* Always take decimal digits; parse_number handles radix
+               error.  */
            else if (*p >= '0' && *p <= '9')
              continue;
-           /* We will take letters only if hex is true, and only 
-              up to what the input radix would permit.  FSF was content
-              to rely on parse_number to validate; but it leaks. */
-           else if (*p >= 'a' && *p <= 'z') {
-             if (!hex || *p >= ('a' + local_radix - 10))
-               toktype = ERROR;
-           }
-           else if (*p >= 'A' && *p <= 'Z') {
-             if (!hex || *p >= ('A' + local_radix - 10))
-               toktype = ERROR;
-           }
+           /* We will take letters only if hex is true, and only up
+              to what the input radix would permit.  FSF was content
+              to rely on parse_number to validate; but it leaks.  */
+           else if (*p >= 'a' && *p <= 'z') 
+             {
+               if (!hex || *p >= ('a' + local_radix - 10))
+                 toktype = ERROR;
+             }
+           else if (*p >= 'A' && *p <= 'Z') 
+             {
+               if (!hex || *p >= ('A' + local_radix - 10))
+                 toktype = ERROR;
+             }
            else break;
          }
        if (toktype != ERROR)
-         toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
+         toktype = parse_number (tokstart, p - tokstart, 
+                                 got_dot | got_e, &yylval);
         if (toktype == ERROR)
          {
            char *err_copy = (char *) alloca (p - tokstart + 1);
@@ -1449,7 +1447,7 @@ yylex ()
     case '~':
     case '!':
 #if 0
-    case '@':          /* moved out below */
+    case '@':          /* Moved out below.  */
 #endif
     case '<':
     case '>':
@@ -1473,10 +1471,10 @@ yylex ()
              error ("Missing '(' in @selector(...)");
            }
          tempbufindex = 0;
-         tokptr++;     /* skip the '(' */
+         tokptr++;     /* Skip the '('.  */
          do {
-           /* Grow the static temp buffer if necessary, including allocating
-              the first one on demand. */
+           /* Grow the static temp buffer if necessary, including
+              allocating the first one on demand.  */
            if (tempbufindex + 1 >= tempbufsize)
              {
                tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
@@ -1498,7 +1496,8 @@ yylex ()
           lexptr++;
           return tokchr;
         }
-      /* ObjC NextStep NSString constant: fall thru and parse like STRING */
+      /* ObjC NextStep NSString constant: fall thru and parse like
+         STRING.  */
       tokstart++;
 
     case '"':
@@ -1508,16 +1507,17 @@ yylex ()
         buffer is null byte terminated *only* for the convenience of
         debugging gdb itself and printing the buffer contents when
         the buffer contains no embedded nulls.  Gdb does not depend
-        upon the buffer being null byte terminated, it uses the length
-        string instead.  This allows gdb to handle C strings (as well
-        as strings in other languages) with embedded null bytes */
+        upon the buffer being null byte terminated, it uses the
+        length string instead.  This allows gdb to handle C strings
+        (as well as strings in other languages) with embedded null
+        bytes.  */
 
       tokptr = ++tokstart;
       tempbufindex = 0;
 
       do {
-       /* Grow the static temp buffer if necessary, including allocating
-          the first one on demand. */
+       /* Grow the static temp buffer if necessary, including
+          allocating the first one on demand.  */
        if (tempbufindex + 1 >= tempbufsize)
          {
            tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
@@ -1526,7 +1526,7 @@ yylex ()
          {
          case '\0':
          case '"':
-           /* Do nothing, loop will terminate. */
+           /* Do nothing, loop will terminate.  */
            break;
          case '\\':
            tokptr++;
@@ -1546,7 +1546,7 @@ yylex ()
        {
          error ("Unterminated string in expression.");
        }
-      tempbuf[tempbufindex] = '\0';    /* See note above */
+      tempbuf[tempbufindex] = '\0';    /* See note above */
       yylval.sval.ptr = tempbuf;
       yylval.sval.length = tempbufindex;
       lexptr = tokptr;
@@ -1592,7 +1592,7 @@ yylex ()
       if (STREQN (tokstart, "unsigned", 8))
        return UNSIGNED;
       if (current_language->la_language == language_cplus
-         && STREQN (tokstart, "template", 8))
+         && strncmp (tokstart, "template", 8) == 0)
        return TEMPLATE;
       if (STREQN (tokstart, "volatile", 8))
        return VOLATILE_KEYWORD;
@@ -1609,7 +1609,7 @@ yylex ()
       break;
     case 5:
       if ((current_language->la_language == language_cplus)
-         && STREQN (tokstart, "class", 5))
+         && strncmp (tokstart, "class", 5) == 0)
        return CLASS;
       if (STREQN (tokstart, "union", 5))
        return UNION;
@@ -1623,17 +1623,6 @@ yylex ()
        return ENUM;
       if (STREQN (tokstart, "long", 4))
        return LONG;
-      if (current_language->la_language == language_cplus
-         && STREQN (tokstart, "this", 4))
-       {
-         static const char this_name[] =
-                                { CPLUS_MARKER, 't', 'h', 'i', 's', '\0' };
-
-         if (lookup_symbol (this_name, expression_context_block,
-                            VAR_NAMESPACE, (int *) NULL,
-                            (struct symtab **) NULL))
-           return THIS;
-       }
       break;
     case 3:
       if (STREQN (tokstart, "int", 3))
@@ -1670,12 +1659,12 @@ yylex ()
       need_this = (int *) NULL;
 
     sym = lookup_symbol (tmp, expression_context_block,
-                        VAR_NAMESPACE,
+                        VAR_DOMAIN,
                         need_this,
                         (struct symtab **) NULL);
-    /* Call lookup_symtab, not lookup_partial_symtab, in case there are
-       no psymtabs (coff, xcoff, or some future change to blow away the
-       psymtabs once symbols are read).  */
+    /* Call lookup_symtab, not lookup_partial_symtab, in case there
+       are no psymtabs (coff, xcoff, or some future change to blow
+       away the psymtabs once symbols are read).  */
     if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK) ||
         lookup_symtab (tmp))
       {
@@ -1686,24 +1675,26 @@ yylex ()
     if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
         {
 #if 1
-         /* Despite the following flaw, we need to keep this code enabled.
-            Because we can get called from check_stub_method, if we don't
-            handle nested types then it screws many operations in any
-            program which uses nested types.  */
-         /* In "A::x", if x is a member function of A and there happens
-            to be a type (nested or not, since the stabs don't make that
-            distinction) named x, then this code incorrectly thinks we
-            are dealing with nested types rather than a member function.  */
+         /* Despite the following flaw, we need to keep this code
+            enabled.  Because we can get called from
+            check_stub_method, if we don't handle nested types then
+            it screws many operations in any program which uses
+            nested types.  */
+         /* In "A::x", if x is a member function of A and there
+            happens to be a type (nested or not, since the stabs
+            don't make that distinction) named x, then this code
+            incorrectly thinks we are dealing with nested types
+            rather than a member function.  */
 
          char *p;
          char *namestart;
          struct symbol *best_sym;
 
-         /* Look ahead to detect nested types.  This probably should be
-            done in the grammar, but trying seemed to introduce a lot
-            of shift/reduce and reduce/reduce conflicts.  It's possible
-            that it could be done, though.  Or perhaps a non-grammar, but
-            less ad hoc, approach would work well.  */
+         /* Look ahead to detect nested types.  This probably should
+            be done in the grammar, but trying seemed to introduce a
+            lot of shift/reduce and reduce/reduce conflicts.  It's
+            possible that it could be done, though.  Or perhaps a
+            non-grammar, but less ad hoc, approach would work well.  */
 
          /* Since we do not currently have any way of distinguishing
             a nested type from a non-nested one (the stabs don't tell
@@ -1732,9 +1723,10 @@ yylex ()
                  if (p != namestart)
                    {
                      struct symbol *cur_sym;
-                     /* As big as the whole rest of the expression, which is
-                        at least big enough.  */
-                     char *ncopy = alloca (strlen (tmp)+strlen (namestart)+3);
+                     /* As big as the whole rest of the expression,
+                        which is at least big enough.  */
+                     char *ncopy = alloca (strlen (tmp) +
+                                           strlen (namestart) + 3);
                      char *tmp1;
 
                      tmp1 = ncopy;
@@ -1744,8 +1736,9 @@ yylex ()
                      tmp1 += 2;
                      memcpy (tmp1, namestart, p - namestart);
                      tmp1[p - namestart] = '\0';
-                     cur_sym = lookup_symbol (ncopy, expression_context_block,
-                                              VAR_NAMESPACE, (int *) NULL,
+                     cur_sym = lookup_symbol (ncopy, 
+                                              expression_context_block,
+                                              VAR_DOMAIN, (int *) NULL,
                                               (struct symtab **) NULL);
                      if (cur_sym)
                        {
@@ -1776,14 +1769,16 @@ yylex ()
     if ((yylval.tsym.type = lookup_primitive_typename (tmp)) != 0)
        return TYPENAME;
 
-    if (!sym) /* see if it's an ObjC classname */
+    /* See if it's an ObjC classname.  */
+    if (!sym)
       {
        CORE_ADDR Class = lookup_objc_class(tmp);
        if (Class)
          {
-           extern struct symbol *lookup_struct_typedef();
            yylval.class.class = Class;
-           if ((sym = lookup_struct_typedef (tmp, expression_context_block, 1)))
+           if ((sym = lookup_struct_typedef (tmp, 
+                                             expression_context_block, 
+                                             1)))
              yylval.class.type = SYMBOL_TYPE (sym);
            return CLASSNAME;
          }
@@ -1806,7 +1801,7 @@ yylex ()
          }
       }
 
-    /* Any other kind of symbol */
+    /* Any other kind of symbol */
     yylval.ssym.sym = sym;
     yylval.ssym.is_a_field_of_this = is_a_field_of_this;
     return NAME;
@@ -1820,5 +1815,6 @@ yyerror (msg)
   if (*lexptr == '\0')
     error("A %s near end of expression.",  (msg ? msg : "error"));
   else
-    error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
+    error ("A %s in expression, near `%s'.", (msg ? msg : "error"), 
+          lexptr);
 }
This page took 0.037188 seconds and 4 git commands to generate.