add xfail for "print u_var" test in gdb.ada/packed_array.exp
[deliverable/binutils-gdb.git] / gdb / jv-exp.y
index a904c3295f5e971c34ab16429393f2d74c6a1979..80d440801f426a1a883d59ca4a301ccce479efb2 100644 (file)
@@ -1,5 +1,5 @@
 /* YACC parser for Java expressions, for GDB.
-   Copyright (C) 1997, 1998, 1999, 2000, 2006, 2007, 2008, 2009, 2010
+   Copyright (C) 1997, 1998, 1999, 2000, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -57,7 +57,7 @@
    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. */
+   generators need to be fixed instead of adding those names to this list.  */
 
 #define        yymaxdepth java_maxdepth
 #define        yyparse java_parse
@@ -337,7 +337,7 @@ QualifiedName:
                { $$.length = $1.length + $3.length + 1;
                  if ($1.ptr + $1.length + 1 == $3.ptr
                      && $1.ptr[$1.length] == '.')
-                   $$.ptr = $1.ptr;  /* Optimization. */
+                   $$.ptr = $1.ptr;  /* Optimization.  */
                  else
                    {
                      $$.ptr = (char *) malloc ($$.length + 1);
@@ -495,7 +495,7 @@ PostfixExpression:
 |      Name
                { push_expression_name ($1); }
 |      VARIABLE
-               /* Already written by write_dollar_variable. */
+               /* Already written by write_dollar_variable.  */
 |      PostIncrementExpression
 |      PostDecrementExpression
 ;
@@ -547,7 +547,6 @@ CastExpression:
                  write_exp_elt_opcode (UNOP_CAST); }
 |      '(' Expression ')' UnaryExpressionNotPlusMinus
                {
-                 int exp_size = expout_ptr;
                  int last_exp_size = length_of_subexp(expout, expout_ptr);
                  struct type *type;
                  int i;
@@ -556,7 +555,7 @@ CastExpression:
                    error (_("Invalid cast expression"));
                  type = expout->elts[base+1].type;
                  /* Remove the 'Expression' and slide the
-                    UnaryExpressionNotPlusMinus down to replace it. */
+                    UnaryExpressionNotPlusMinus down to replace it.  */
                  for (i = 0;  i < last_exp_size;  i++)
                    expout->elts[base + i] = expout->elts[base + i + 3];
                  expout_ptr -= 3;
@@ -674,7 +673,7 @@ LeftHandSide:
        ForcedName
                { push_expression_name ($1); }
 |      VARIABLE
-               /* Already written by write_dollar_variable. */
+               /* Already written by write_dollar_variable.  */
 |      FieldAccess
 |      ArrayAccess
 ;
@@ -704,25 +703,28 @@ parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
 
   if (parsed_float)
     {
-      /* It's a float since it contains a point or an exponent.  */
-      char c;
-      int num = 0;     /* number of tokens scanned by scanf */
-      char saved_char = p[len];
-
-      p[len] = 0;      /* null-terminate the token */
-      num = sscanf (p, "%" DOUBLEST_SCAN_FORMAT "%c",
-                   &putithere->typed_val_float.dval, &c);
-      p[len] = saved_char;     /* restore the input stream */
-      if (num != 1)            /* check scanf found ONLY a float ... */
+      const char *suffix;
+      int suffix_len;
+
+      if (! parse_float (p, len, &putithere->typed_val_float.dval, &suffix))
        return ERROR;
-      /* See if it has `f' or `d' suffix (float or double).  */
 
-      c = tolower (p[len - 1]);
+      suffix_len = p + len - suffix;
 
-      if (c == 'f' || c == 'F')
-       putithere->typed_val_float.type = parse_type->builtin_float;
-      else if (isdigit (c) || c == '.' || c == 'd' || c == 'D')
+      if (suffix_len == 0)
        putithere->typed_val_float.type = parse_type->builtin_double;
+      else if (suffix_len == 1)
+       {
+         /* See if it has `f' or `d' suffix (float or double).  */
+         if (tolower (*suffix) == 'f')
+           putithere->typed_val_float.type =
+             parse_type->builtin_float;
+         else if (tolower (*suffix) == 'd')
+           putithere->typed_val_float.type =
+             parse_type->builtin_double;
+         else
+           return ERROR;
+       }
       else
        return ERROR;
 
@@ -761,7 +763,7 @@ parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
       }
 
   c = p[len-1];
-  /* A paranoid calculation of (1<<64)-1. */
+  /* A paranoid calculation of (1<<64)-1.  */
   limit = (ULONGEST)0xffffffff;
   limit = ((limit << 16) << 16) | limit;
   if (c == 'l' || c == 'L')
@@ -894,7 +896,7 @@ yylex (void)
     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). */
+        for example).  */
       lexptr++;
       c = *lexptr++;
       if (c == '\\')
@@ -943,7 +945,7 @@ yylex (void)
     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':
@@ -1048,7 +1050,7 @@ yylex (void)
 
       do {
        /* Grow the static temp buffer if necessary, including allocating
-          the first one on demand. */
+          the first one on demand.  */
        if (tempbufindex + 1 >= tempbufsize)
          {
            tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
@@ -1057,7 +1059,7 @@ yylex (void)
          {
          case '\0':
          case '"':
-           /* Do nothing, loop will terminate. */
+           /* Do nothing, loop will terminate.  */
            break;
          case '\\':
            tokptr++;
@@ -1214,7 +1216,7 @@ java_type_from_name (struct stoken name)
 }
 
 /* If NAME is a valid variable name in this scope, push it and return 1.
-   Otherwise, return 0. */
+   Otherwise, return 0.  */
 
 static int
 push_variable (struct stoken name)
@@ -1260,7 +1262,7 @@ push_variable (struct stoken name)
 
 /* Assuming a reference expression has been pushed, emit the
    STRUCTOP_PTR ops to access the field named NAME.  If NAME is a
-   qualified name (has '.'), generate a field access for each part. */
+   qualified name (has '.'), generate a field access for each part.  */
 
 static void
 push_fieldnames (struct stoken name)
@@ -1272,7 +1274,7 @@ push_fieldnames (struct stoken name)
     {
       if (i == name.length || name.ptr[i] == '.')
        {
-         /* token.ptr is start of current field name. */
+         /* token.ptr is start of current field name.  */
          token.length = &name.ptr[i] - token.ptr;
          write_exp_elt_opcode (STRUCTOP_PTR);
          write_exp_string (token);
@@ -1351,27 +1353,26 @@ push_qualified_expression_name (struct stoken name, int dot_index)
 }
 
 /* Handle Name in an expression (or LHS).
-   Handle VAR, TYPE, TYPE.FIELD1....FIELDN and VAR.FIELD1....FIELDN. */
+   Handle VAR, TYPE, TYPE.FIELD1....FIELDN and VAR.FIELD1....FIELDN.  */
 
 static void
 push_expression_name (struct stoken name)
 {
   char *tmp;
   struct type *typ;
-  char *ptr;
   int i;
 
   for (i = 0;  i < name.length;  i++)
     {
       if (name.ptr[i] == '.')
        {
-         /* It's a Qualified Expression Name. */
+         /* It's a Qualified Expression Name.  */
          push_qualified_expression_name (name, i);
          return;
        }
     }
 
-  /* It's a Simple Expression Name. */
+  /* It's a Simple Expression Name.  */
   
   if (push_variable (name))
     return;
This page took 0.032416 seconds and 4 git commands to generate.