* configure: Regenerate to track ../common/common.m4 changes.
[deliverable/binutils-gdb.git] / gdb / m2-exp.y
index 201ba8223993451d5c6f2923dec1c051bcaf60f9..951f778bf8dae59c2b002a0a7d93f164a45a52d2 100644 (file)
@@ -1,6 +1,6 @@
 /* YACC grammar for Modula-2 expressions, for GDB.
    Copyright (C) 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999,
-   2000, 2007 Free Software Foundation, Inc.
+   2000, 2007, 2008 Free Software Foundation, Inc.
    Generated from expread.y (now c-exp.y) and contributed by the Department
    of Computer Science at the State University of New York at Buffalo, 1991.
 
@@ -174,6 +174,7 @@ static struct block *modblock=0;
 %token <sval> TYPENAME
 
 %token SIZE CAP ORD HIGH ABS MIN_FUNC MAX_FUNC FLOAT_FUNC VAL CHR ODD TRUNC
+%token TSIZE
 %token INC DEC INCL EXCL
 
 /* The GDB scope operator */
@@ -288,6 +289,10 @@ exp        :       TRUNC '(' exp ')'
                        { write_exp_elt_opcode (UNOP_TRUNC); }
        ;
 
+exp    :       TSIZE '(' exp ')'
+                       { write_exp_elt_opcode (UNOP_SIZEOF); }
+       ;
+
 exp    :       SIZE exp       %prec UNARY
                        { write_exp_elt_opcode (UNOP_SIZEOF); }
        ;
@@ -353,6 +358,10 @@ exp     :       exp '['
                          write_exp_elt_opcode (MULTI_SUBSCRIPT); }
         ;
 
+exp    :       exp '[' exp ']'
+                       { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
+       ;
+
 exp    :       exp '('
                        /* This is to save the value of arglist_len
                           being accumulated by an outer function call.  */
@@ -541,7 +550,7 @@ block       :       fblock
 fblock :       BLOCKNAME
                        { struct symbol *sym
                            = lookup_symbol (copy_name ($1), expression_context_block,
-                                            VAR_DOMAIN, 0, NULL);
+                                            VAR_DOMAIN, 0);
                          $$ = sym;}
        ;
                             
@@ -550,7 +559,7 @@ fblock      :       BLOCKNAME
 fblock :       block COLONCOLON BLOCKNAME
                        { struct symbol *tem
                            = lookup_symbol (copy_name ($3), $1,
-                                            VAR_DOMAIN, 0, NULL);
+                                            VAR_DOMAIN, 0);
                          if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
                            error ("No function \"%s\" in specified context.",
                                   copy_name ($3));
@@ -574,7 +583,7 @@ variable:   INTERNAL_VAR
 variable:      block COLONCOLON NAME
                        { struct symbol *sym;
                          sym = lookup_symbol (copy_name ($3), $1,
-                                              VAR_DOMAIN, 0, NULL);
+                                              VAR_DOMAIN, 0);
                          if (sym == 0)
                            error ("No symbol \"%s\" in specified context.",
                                   copy_name ($3));
@@ -594,8 +603,7 @@ variable:   NAME
                          sym = lookup_symbol (copy_name ($1),
                                               expression_context_block,
                                               VAR_DOMAIN,
-                                              &is_a_field_of_this,
-                                              NULL);
+                                              &is_a_field_of_this);
                          if (sym)
                            {
                              if (symbol_read_needs_frame (sym))
@@ -809,6 +817,7 @@ static struct keyword keytab[] =
     {"SIZE",  SIZE       },
     {"FLOAT", FLOAT_FUNC },
     {"TRUNC", TRUNC     },
+    {"TSIZE", SIZE       },
 };
 
 
@@ -835,7 +844,7 @@ yylex ()
 
   /* See if it is a special token of length 2 */
   for( i = 0 ; i < (int) (sizeof tokentab2 / sizeof tokentab2[0]) ; i++)
-     if(DEPRECATED_STREQN(tokentab2[i].name, tokstart, 2))
+     if (strncmp (tokentab2[i].name, tokstart, 2) == 0)
      {
        lexptr += 2;
        return tokentab2[i].token;
@@ -992,7 +1001,8 @@ yylex ()
 
   /*  Lookup special keywords */
   for(i = 0 ; i < (int) (sizeof(keytab) / sizeof(keytab[0])) ; i++)
-     if(namelen == strlen(keytab[i].keyw) && DEPRECATED_STREQN(tokstart,keytab[i].keyw,namelen))
+     if (namelen == strlen (keytab[i].keyw)
+        && strncmp (tokstart, keytab[i].keyw, namelen) == 0)
           return keytab[i].token;
 
   yylval.sval.ptr = tokstart;
@@ -1017,8 +1027,7 @@ yylex ()
 
     if (lookup_partial_symtab (tmp))
       return BLOCKNAME;
-    sym = lookup_symbol (tmp, expression_context_block,
-                        VAR_DOMAIN, 0, NULL);
+    sym = lookup_symbol (tmp, expression_context_block, VAR_DOMAIN, 0);
     if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
       return BLOCKNAME;
     if (lookup_typename (copy_name (yylval.sval), expression_context_block, 1))
@@ -1032,17 +1041,12 @@ yylex ()
        case LOC_REGISTER:
        case LOC_ARG:
        case LOC_REF_ARG:
-       case LOC_REGPARM:
        case LOC_REGPARM_ADDR:
        case LOC_LOCAL:
-       case LOC_LOCAL_ARG:
-       case LOC_BASEREG:
-       case LOC_BASEREG_ARG:
        case LOC_CONST:
        case LOC_CONST_BYTES:
        case LOC_OPTIMIZED_OUT:
        case LOC_COMPUTED:
-       case LOC_COMPUTED_ARG:
          return NAME;
 
        case LOC_TYPEDEF:
@@ -1066,12 +1070,12 @@ yylex ()
     else
     {
        /* Built-in BOOLEAN type.  This is sort of a hack. */
-       if(DEPRECATED_STREQN(tokstart,"TRUE",4))
+       if (strncmp (tokstart, "TRUE", 4) == 0)
        {
          yylval.ulval = 1;
          return M2_TRUE;
        }
-       else if(DEPRECATED_STREQN(tokstart,"FALSE",5))
+       else if (strncmp (tokstart, "FALSE", 5) == 0)
        {
          yylval.ulval = 0;
          return M2_FALSE;
This page took 0.027114 seconds and 4 git commands to generate.