Add RAII class for blocking gdb signals
[deliverable/binutils-gdb.git] / gdb / f-exp.y
index b326d09c44e0ecf4c557cca2cceb64aafe362bd8..9784ad57d822b63a4aac773c684a454f24d793c0 100644 (file)
@@ -174,7 +174,7 @@ static int parse_number (struct parser_state *, const char *, int,
 %token <voidval> DOLLAR_VARIABLE
 
 %token <opcode> ASSIGN_MODIFY
-%token <opcode> UNOP_INTRINSIC
+%token <opcode> UNOP_INTRINSIC BINOP_INTRINSIC
 
 %left ','
 %left ABOVE_COMMA
@@ -240,7 +240,7 @@ exp :       SIZEOF exp       %prec UNARY
        ;
 
 exp    :       KIND '(' exp ')'       %prec UNARY
-                       { write_exp_elt_opcode (pstate, UNOP_KIND); }
+                       { write_exp_elt_opcode (pstate, UNOP_FORTRAN_KIND); }
        ;
 
 /* No more explicit array operators, we treat everything in F77 as 
@@ -263,6 +263,10 @@ exp        :       UNOP_INTRINSIC '(' exp ')'
                        { write_exp_elt_opcode (pstate, $1); }
        ;
 
+exp    :       BINOP_INTRINSIC '(' exp ',' exp ')'
+                       { write_exp_elt_opcode (pstate, $1); }
+       ;
+
 arglist        :
        ;
 
@@ -959,7 +963,12 @@ static const struct token f77_keywords[] =
   /* The following correspond to actual functions in Fortran and are case
      insensitive.  */
   { "kind", KIND, BINOP_END, false },
-  { "abs", UNOP_INTRINSIC, UNOP_ABS, false }
+  { "abs", UNOP_INTRINSIC, UNOP_ABS, false },
+  { "mod", BINOP_INTRINSIC, BINOP_MOD, false },
+  { "floor", UNOP_INTRINSIC, UNOP_FORTRAN_FLOOR, false },
+  { "ceiling", UNOP_INTRINSIC, UNOP_FORTRAN_CEILING, false },
+  { "modulo", BINOP_INTRINSIC, BINOP_FORTRAN_MODULO, false },
+  { "cmplx", BINOP_INTRINSIC, BINOP_FORTRAN_CMPLX, false },
 };
 
 /* Implementation of a dynamically expandable buffer for processing input
@@ -1266,7 +1275,6 @@ yylex (void)
   {
     std::string tmp = copy_name (yylval.sval);
     struct block_symbol result;
-    struct field_of_this_result is_a_field_of_this;
     enum domain_enum_tag lookup_domains[] =
     {
       STRUCT_DOMAIN,
@@ -1277,15 +1285,8 @@ yylex (void)
 
     for (int i = 0; i < ARRAY_SIZE (lookup_domains); ++i)
       {
-       /* Initialize this in case we *don't* use it in this call; that
-          way we can refer to it unconditionally below.  */
-       memset (&is_a_field_of_this, 0, sizeof (is_a_field_of_this));
-
        result = lookup_symbol (tmp.c_str (), pstate->expression_context_block,
-                               lookup_domains[i],
-                               pstate->language ()->la_language
-                               == language_cplus
-                                 ? &is_a_field_of_this : NULL);
+                               lookup_domains[i], NULL);
        if (result.symbol && SYMBOL_CLASS (result.symbol) == LOC_TYPEDEF)
          {
            yylval.tsym.type = SYMBOL_TYPE (result.symbol);
@@ -1314,14 +1315,14 @@ yylex (void)
        if (hextype == INT)
          {
            yylval.ssym.sym = result;
-           yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
+           yylval.ssym.is_a_field_of_this = false;
            return NAME_OR_INT;
          }
       }
     
     /* Any other kind of symbol */
     yylval.ssym.sym = result;
-    yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
+    yylval.ssym.is_a_field_of_this = false;
     return NAME;
   }
 }
This page took 0.026007 seconds and 4 git commands to generate.