* target.h (struct section_table): Rename to ...
[deliverable/binutils-gdb.git] / gdb / expprint.c
index 1dba437e9a22f79466cb53551edf056923da93c6..6048a387e6d81873cbaad6e916ffdc795ed053f8 100644 (file)
@@ -1,7 +1,7 @@
 /* Print in infix form a struct expression.
 
    Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-   1998, 1999, 2000, 2003, 2007 Free Software Foundation, Inc.
+   1998, 1999, 2000, 2003, 2007, 2008, 2009 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,6 +30,8 @@
 #include "gdb_string.h"
 #include "block.h"
 #include "objfiles.h"
+#include "gdb_assert.h"
+#include "valprint.h"
 
 #ifdef HAVE_CTYPE_H
 #include <ctype.h>
@@ -91,17 +93,25 @@ print_subexp_standard (struct expression *exp, int *pos,
       return;
 
     case OP_LONG:
-      (*pos) += 3;
-      value_print (value_from_longest (exp->elts[pc + 1].type,
-                                      exp->elts[pc + 2].longconst),
-                  stream, 0, Val_no_prettyprint);
+      {
+       struct value_print_options opts;
+       get_raw_print_options (&opts);
+       (*pos) += 3;
+       value_print (value_from_longest (exp->elts[pc + 1].type,
+                                        exp->elts[pc + 2].longconst),
+                    stream, &opts);
+      }
       return;
 
     case OP_DOUBLE:
-      (*pos) += 3;
-      value_print (value_from_double (exp->elts[pc + 1].type,
-                                     exp->elts[pc + 2].doubleconst),
-                  stream, 0, Val_no_prettyprint);
+      {
+       struct value_print_options opts;
+       get_raw_print_options (&opts);
+       (*pos) += 3;
+       value_print (value_from_double (exp->elts[pc + 1].type,
+                                       exp->elts[pc + 2].doubleconst),
+                    stream, &opts);
+      }
       return;
 
     case OP_VAR_VALUE:
@@ -168,12 +178,17 @@ print_subexp_standard (struct expression *exp, int *pos,
       return;
 
     case OP_STRING:
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
-      /* LA_PRINT_STRING will print using the current repeat count threshold.
-         If necessary, we can temporarily set it to zero, or pass it as an
-         additional parameter to LA_PRINT_STRING.  -fnf */
-      LA_PRINT_STRING (stream, &exp->elts[pc + 2].string, nargs, 1, 0);
+      {
+       struct value_print_options opts;
+       nargs = longest_to_int (exp->elts[pc + 1].longconst);
+       (*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
+       /* LA_PRINT_STRING will print using the current repeat count threshold.
+          If necessary, we can temporarily set it to zero, or pass it as an
+          additional parameter to LA_PRINT_STRING.  -fnf */
+       get_user_print_options (&opts);
+       LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char,
+                        &exp->elts[pc + 2].string, nargs, 0, &opts);
+      }
       return;
 
     case OP_BITSTRING:
@@ -184,11 +199,16 @@ print_subexp_standard (struct expression *exp, int *pos,
       return;
 
     case OP_OBJC_NSSTRING:     /* Objective-C Foundation Class NSString constant.  */
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
-      fputs_filtered ("@\"", stream);
-      LA_PRINT_STRING (stream, &exp->elts[pc + 2].string, nargs, 1, 0);
-      fputs_filtered ("\"", stream);
+      {
+       struct value_print_options opts;
+       nargs = longest_to_int (exp->elts[pc + 1].longconst);
+       (*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
+       fputs_filtered ("@\"", stream);
+       get_user_print_options (&opts);
+       LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char,
+                        &exp->elts[pc + 2].string, nargs, 0, &opts);
+       fputs_filtered ("\"", stream);
+      }
       return;
 
     case OP_OBJC_MSGCALL:
@@ -212,6 +232,7 @@ print_subexp_standard (struct expression *exp, int *pos,
            for (tem = 0; tem < nargs; tem++)
              {
                nextS = strchr (s, ':');
+               gdb_assert (nextS);     /* Make sure we found ':'.  */
                *nextS = '\0';
                fprintf_unfiltered (stream, " %s: ", s);
                s = nextS + 1;
@@ -235,7 +256,8 @@ print_subexp_standard (struct expression *exp, int *pos,
       nargs++;
       tem = 0;
       if (exp->elts[pc + 4].opcode == OP_LONG
-         && exp->elts[pc + 5].type == builtin_type_char
+         && exp->elts[pc + 5].type
+            == builtin_type (exp->gdbarch)->builtin_char
          && exp->language_defn->la_language == language_c)
        {
          /* Attempt to print C character arrays using string syntax.
@@ -250,7 +272,8 @@ print_subexp_standard (struct expression *exp, int *pos,
          while (tem < nargs)
            {
              if (exp->elts[pc].opcode != OP_LONG
-                 || exp->elts[pc + 1].type != builtin_type_char)
+                 || exp->elts[pc + 1].type
+                    != builtin_type (exp->gdbarch)->builtin_char)
                {
                  /* Not a simple array of char, use regular array printing. */
                  tem = 0;
@@ -266,7 +289,10 @@ print_subexp_standard (struct expression *exp, int *pos,
        }
       if (tem > 0)
        {
-         LA_PRINT_STRING (stream, tempstr, nargs - 1, 1, 0);
+         struct value_print_options opts;
+         get_user_print_options (&opts);
+         LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char,
+                          tempstr, nargs - 1, 0, &opts);
          (*pos) = pc;
        }
       else
@@ -390,6 +416,8 @@ print_subexp_standard (struct expression *exp, int *pos,
       if (TYPE_CODE (exp->elts[pc + 1].type) == TYPE_CODE_FUNC &&
          exp->elts[pc + 3].opcode == OP_LONG)
        {
+         struct value_print_options opts;
+
          /* We have a minimal symbol fn, probably.  It's encoded
             as a UNOP_MEMVAL (function-type) of an OP_LONG (int, address).
             Swallow the OP_LONG (including both its opcodes); ignore
@@ -397,7 +425,8 @@ print_subexp_standard (struct expression *exp, int *pos,
          (*pos) += 4;
          val = value_at_lazy (exp->elts[pc + 1].type,
                               (CORE_ADDR) exp->elts[pc + 5].longconst);
-         value_print (val, stream, 0, Val_no_prettyprint);
+         get_raw_print_options (&opts);
+         value_print (val, stream, &opts);
        }
       else
        {
@@ -773,6 +802,9 @@ op_name_standard (enum exp_opcode opcode)
     }
 }
 
+/* Print a raw dump of expression EXP to STREAM.
+   NOTE, if non-NULL, is printed as extra explanatory text.  */
+
 void
 dump_raw_expression (struct expression *exp, struct ui_file *stream,
                     char *note)
@@ -784,7 +816,9 @@ dump_raw_expression (struct expression *exp, struct ui_file *stream,
 
   fprintf_filtered (stream, "Dump of expression @ ");
   gdb_print_host_address (exp, stream);
-  fprintf_filtered (stream, "'\n\tLanguage %s, %d elements, %ld bytes each.\n",
+  if (note)
+    fprintf_filtered (stream, ", %s:", note);
+  fprintf_filtered (stream, "\n\tLanguage %s, %d elements, %ld bytes each.\n",
                    exp->language_defn->la_name, exp->nelts,
                    (long) sizeof (union exp_element));
   fprintf_filtered (stream, "\t%5s  %20s  %16s  %s\n", "Index", "Opcode",
@@ -952,7 +986,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)",
-                       DEPRECATED_SYMBOL_NAME (exp->elts[elt + 1].symbol));
+                       SYMBOL_PRINT_NAME (exp->elts[elt + 1].symbol));
       elt += 3;
       break;
     case OP_LAST:
This page took 0.027553 seconds and 4 git commands to generate.