gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / expprint.c
index c90690459915e0a1e0fb280145dc16a5a4805b3e..026b775260d88f308833a3cf8806ad5c2a26e406 100644 (file)
@@ -1,6 +1,6 @@
 /* Print in infix form a struct expression.
 
-   Copyright (C) 1986-2018 Free Software Foundation, Inc.
+   Copyright (C) 1986-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,6 +29,7 @@
 #include "block.h"
 #include "objfiles.h"
 #include "valprint.h"
+#include "cli/cli-style.h"
 
 #include <ctype.h>
 
@@ -86,7 +87,7 @@ print_subexp_standard (struct expression *exp, int *pos,
     case OP_SCOPE:
       myprec = PREC_PREFIX;
       assoc = 0;
-      fputs_filtered (type_name_no_tag (exp->elts[pc + 1].type), stream);
+      fputs_filtered (exp->elts[pc + 1].type->name (), stream);
       fputs_filtered ("::", stream);
       nargs = longest_to_int (exp->elts[pc + 2].longconst);
       (*pos) += 4 + BYTES_TO_EXP_ELEM (nargs + 1);
@@ -125,19 +126,19 @@ print_subexp_standard (struct expression *exp, int *pos,
        b = exp->elts[pc + 1].block;
        if (b != NULL
            && BLOCK_FUNCTION (b) != NULL
-           && SYMBOL_PRINT_NAME (BLOCK_FUNCTION (b)) != NULL)
+           && BLOCK_FUNCTION (b)->print_name () != NULL)
          {
-           fputs_filtered (SYMBOL_PRINT_NAME (BLOCK_FUNCTION (b)), stream);
+           fputs_filtered (BLOCK_FUNCTION (b)->print_name (), stream);
            fputs_filtered ("::", stream);
          }
-       fputs_filtered (SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol), stream);
+       fputs_filtered (exp->elts[pc + 2].symbol->print_name (), stream);
       }
       return;
 
     case OP_VAR_MSYM_VALUE:
       {
        (*pos) += 3;
-       fputs_filtered (MSYMBOL_PRINT_NAME (exp->elts[pc + 2].msymbol), stream);
+       fputs_filtered (exp->elts[pc + 2].msymbol->print_name (), stream);
       }
       return;
 
@@ -153,7 +154,7 @@ print_subexp_standard (struct expression *exp, int *pos,
       {
        (*pos) += 2;
        fprintf_filtered (stream, "%s@entry",
-                         SYMBOL_PRINT_NAME (exp->elts[pc + 1].symbol));
+                         exp->elts[pc + 1].symbol->print_name ());
       }
       return;
 
@@ -447,7 +448,7 @@ print_subexp_standard (struct expression *exp, int *pos,
       (*pos) += 2;
       if ((int) prec > (int) PREC_PREFIX)
        fputs_filtered ("(", stream);
-      if (TYPE_CODE (exp->elts[pc + 1].type) == TYPE_CODE_FUNC
+      if (exp->elts[pc + 1].type->code () == TYPE_CODE_FUNC
          && exp->elts[pc + 3].opcode == OP_LONG)
        {
          struct value_print_options opts;
@@ -510,8 +511,9 @@ print_subexp_standard (struct expression *exp, int *pos,
       if (exp->language_defn->la_name_of_this)
        fputs_filtered (exp->language_defn->la_name_of_this, stream);
       else
-       fprintf_filtered (stream, _("<language %s has no 'this'>"),
-                         exp->language_defn->la_name);
+       fprintf_styled (stream, metadata_style.style (),
+                       _("<language %s has no 'this'>"),
+                       exp->language_defn->la_name);
       return;
 
       /* Modula-2 ops */
@@ -578,9 +580,13 @@ print_subexp_standard (struct expression *exp, int *pos,
          longest_to_int (exp->elts[pc + 1].longconst);
        *pos += 2;
 
+       if (range_type == NONE_BOUND_DEFAULT_EXCLUSIVE
+           || range_type == LOW_BOUND_DEFAULT_EXCLUSIVE)
+         fputs_filtered ("EXCLUSIVE_", stream);
        fputs_filtered ("RANGE(", stream);
        if (range_type == HIGH_BOUND_DEFAULT
-           || range_type == NONE_BOUND_DEFAULT)
+           || range_type == NONE_BOUND_DEFAULT
+           || range_type == NONE_BOUND_DEFAULT_EXCLUSIVE)
          print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
        fputs_filtered ("..", stream);
        if (range_type == LOW_BOUND_DEFAULT
@@ -683,6 +689,13 @@ static int dump_subexp_body (struct expression *exp, struct ui_file *, int);
 const char *
 op_name (struct expression *exp, enum exp_opcode opcode)
 {
+  if (opcode >= OP_UNUSED_LAST)
+    {
+      char *cell = get_print_cell ();
+      xsnprintf (cell, PRINT_CELL_SIZE, "unknown opcode: %u",
+                unsigned (opcode));
+      return cell;
+    }
   return exp->language_defn->la_exp_desc->op_name (opcode);
 }
 
@@ -846,6 +859,7 @@ dump_subexp_body_standard (struct expression *exp,
     case UNOP_PREDECREMENT:
     case UNOP_POSTDECREMENT:
     case UNOP_SIZEOF:
+    case UNOP_ALIGNOF:
     case UNOP_PLUS:
     case UNOP_CAP:
     case UNOP_CHR:
@@ -885,7 +899,7 @@ dump_subexp_body_standard (struct expression *exp,
       fprintf_filtered (stream, ", symbol @");
       gdb_print_host_address (exp->elts[elt + 1].symbol, stream);
       fprintf_filtered (stream, " (%s)",
-                       SYMBOL_PRINT_NAME (exp->elts[elt + 1].symbol));
+                       exp->elts[elt + 1].symbol->print_name ());
       elt += 3;
       break;
     case OP_VAR_MSYM_VALUE:
@@ -894,14 +908,14 @@ dump_subexp_body_standard (struct expression *exp,
       fprintf_filtered (stream, ", msymbol @");
       gdb_print_host_address (exp->elts[elt + 1].msymbol, stream);
       fprintf_filtered (stream, " (%s)",
-                       MSYMBOL_PRINT_NAME (exp->elts[elt + 1].msymbol));
+                       exp->elts[elt + 1].msymbol->print_name ());
       elt += 3;
       break;
     case OP_VAR_ENTRY_VALUE:
       fprintf_filtered (stream, "Entry value of symbol @");
       gdb_print_host_address (exp->elts[elt].symbol, stream);
       fprintf_filtered (stream, " (%s)",
-                       SYMBOL_PRINT_NAME (exp->elts[elt].symbol));
+                       exp->elts[elt].symbol->print_name ());
       elt += 2;
       break;
     case OP_LAST:
@@ -1099,12 +1113,18 @@ dump_subexp_body_standard (struct expression *exp,
          case LOW_BOUND_DEFAULT:
            fputs_filtered ("Range '..EXP'", stream);
            break;
+         case LOW_BOUND_DEFAULT_EXCLUSIVE:
+           fputs_filtered ("ExclusiveRange '..EXP'", stream);
+           break;
          case HIGH_BOUND_DEFAULT:
            fputs_filtered ("Range 'EXP..'", stream);
            break;
          case NONE_BOUND_DEFAULT:
            fputs_filtered ("Range 'EXP..EXP'", stream);
            break;
+         case NONE_BOUND_DEFAULT_EXCLUSIVE:
+           fputs_filtered ("ExclusiveRange 'EXP..EXP'", stream);
+           break;
          default:
            fputs_filtered ("Invalid Range!", stream);
            break;
This page took 0.027276 seconds and 4 git commands to generate.