* config/tc-h8300.c (get_operand): Fix typos in ldm/stm support.
[deliverable/binutils-gdb.git] / gdb / c-exp.y
index 4753973829e508c70a77220bc9ec5a095f1a0944..a6d21aebdd4531364ae68aa9922cdd103cd3f709 100644 (file)
@@ -214,6 +214,7 @@ parse_number PARAMS ((char *, int, int, YYSTYPE *));
 %right UNARY INCREMENT DECREMENT
 %right ARROW '.' '[' '('
 %token <ssym> BLOCKNAME 
+%token <bval> FILENAME
 %type <bval> block
 %left COLONCOLON
 
@@ -298,15 +299,6 @@ exp        :       exp '.' name
                          write_exp_elt_opcode (STRUCTOP_STRUCT); }
        ;
 
-/* start-sanitize-gm
-Need to find a better way to do this...
-exp    :       exp '@' name
-                       { write_exp_elt_opcode (STRUCTOP_FIELD);
-                         write_exp_string ($3);
-                         write_exp_elt_opcode (STRUCTOP_FIELD);
-                       }
- end-sanitize-gm */
-
 exp    :       exp '.' qualified_name
                        { /* exp.type::name becomes exp.*(&type::name) */
                          /* Note: this doesn't work if name is a
@@ -540,18 +532,15 @@ exp       :       THIS
 
 block  :       BLOCKNAME
                        {
-                         if ($1.sym != 0)
-                             $$ = SYMBOL_BLOCK_VALUE ($1.sym);
+                         if ($1.sym)
+                           $$ = SYMBOL_BLOCK_VALUE ($1.sym);
                          else
-                           {
-                             struct symtab *tem =
-                                 lookup_symtab (copy_name ($1.stoken));
-                             if (tem)
-                               $$ = BLOCKVECTOR_BLOCK (BLOCKVECTOR (tem), STATIC_BLOCK);
-                             else
-                               error ("No file or function \"%s\".",
-                                      copy_name ($1.stoken));
-                           }
+                           error ("No file or function \"%s\".",
+                                  copy_name ($1.stoken));
+                       }
+       |       FILENAME
+                       {
+                         $$ = $1;
                        }
        ;
 
@@ -945,7 +934,7 @@ parse_number (p, len, parsed_float, putithere)
        num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval,&c);
       else
        {
-#ifdef PRINTF_HAS_LONG_DOUBLE
+#ifdef SCANF_HAS_LONG_DOUBLE
          num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval,&c);
 #else
          /* Scan it into a double, then assign it to the long double.
@@ -1535,13 +1524,25 @@ yylex ()
     /* 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 once symbols are read).  */
-    if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK) ||
-        lookup_symtab (tmp))
+    if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
       {
        yylval.ssym.sym = sym;
        yylval.ssym.is_a_field_of_this = is_a_field_of_this;
        return BLOCKNAME;
       }
+    else if (!sym)
+      {                                /* See if it's a file name. */
+       struct symtab *symtab;
+
+       symtab = lookup_symtab (tmp);
+
+       if (symtab)
+         {
+           yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
+           return FILENAME;
+         }
+      }
+
     if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
         {
 #if 1
This page took 0.025224 seconds and 4 git commands to generate.