Home | History | Annotate | Line # | Download | only in gdb
varobj.c revision 1.1
      1  1.1  christos /* Implementation of the GDB variable objects API.
      2  1.1  christos 
      3  1.1  christos    Copyright (C) 1999-2014 Free Software Foundation, Inc.
      4  1.1  christos 
      5  1.1  christos    This program is free software; you can redistribute it and/or modify
      6  1.1  christos    it under the terms of the GNU General Public License as published by
      7  1.1  christos    the Free Software Foundation; either version 3 of the License, or
      8  1.1  christos    (at your option) any later version.
      9  1.1  christos 
     10  1.1  christos    This program is distributed in the hope that it will be useful,
     11  1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  1.1  christos    GNU General Public License for more details.
     14  1.1  christos 
     15  1.1  christos    You should have received a copy of the GNU General Public License
     16  1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     17  1.1  christos 
     18  1.1  christos #include "defs.h"
     19  1.1  christos #include "exceptions.h"
     20  1.1  christos #include "value.h"
     21  1.1  christos #include "expression.h"
     22  1.1  christos #include "frame.h"
     23  1.1  christos #include "language.h"
     24  1.1  christos #include "gdbcmd.h"
     25  1.1  christos #include "block.h"
     26  1.1  christos #include "valprint.h"
     27  1.1  christos 
     28  1.1  christos #include "gdb_assert.h"
     29  1.1  christos #include <string.h>
     30  1.1  christos #include "gdb_regex.h"
     31  1.1  christos 
     32  1.1  christos #include "varobj.h"
     33  1.1  christos #include "vec.h"
     34  1.1  christos #include "gdbthread.h"
     35  1.1  christos #include "inferior.h"
     36  1.1  christos 
     37  1.1  christos #if HAVE_PYTHON
     38  1.1  christos #include "python/python.h"
     39  1.1  christos #include "python/python-internal.h"
     40  1.1  christos #else
     41  1.1  christos typedef int PyObject;
     42  1.1  christos #endif
     43  1.1  christos 
     44  1.1  christos /* Non-zero if we want to see trace of varobj level stuff.  */
     45  1.1  christos 
     46  1.1  christos unsigned int varobjdebug = 0;
     47  1.1  christos static void
     48  1.1  christos show_varobjdebug (struct ui_file *file, int from_tty,
     49  1.1  christos 		  struct cmd_list_element *c, const char *value)
     50  1.1  christos {
     51  1.1  christos   fprintf_filtered (file, _("Varobj debugging is %s.\n"), value);
     52  1.1  christos }
     53  1.1  christos 
     54  1.1  christos /* String representations of gdb's format codes.  */
     55  1.1  christos char *varobj_format_string[] =
     56  1.1  christos   { "natural", "binary", "decimal", "hexadecimal", "octal" };
     57  1.1  christos 
     58  1.1  christos /* True if we want to allow Python-based pretty-printing.  */
     59  1.1  christos static int pretty_printing = 0;
     60  1.1  christos 
     61  1.1  christos void
     62  1.1  christos varobj_enable_pretty_printing (void)
     63  1.1  christos {
     64  1.1  christos   pretty_printing = 1;
     65  1.1  christos }
     66  1.1  christos 
     67  1.1  christos /* Data structures */
     68  1.1  christos 
     69  1.1  christos /* Every root variable has one of these structures saved in its
     70  1.1  christos    varobj.  Members which must be free'd are noted.  */
     71  1.1  christos struct varobj_root
     72  1.1  christos {
     73  1.1  christos 
     74  1.1  christos   /* Alloc'd expression for this parent.  */
     75  1.1  christos   struct expression *exp;
     76  1.1  christos 
     77  1.1  christos   /* Block for which this expression is valid.  */
     78  1.1  christos   const struct block *valid_block;
     79  1.1  christos 
     80  1.1  christos   /* The frame for this expression.  This field is set iff valid_block is
     81  1.1  christos      not NULL.  */
     82  1.1  christos   struct frame_id frame;
     83  1.1  christos 
     84  1.1  christos   /* The thread ID that this varobj_root belong to.  This field
     85  1.1  christos      is only valid if valid_block is not NULL.
     86  1.1  christos      When not 0, indicates which thread 'frame' belongs to.
     87  1.1  christos      When 0, indicates that the thread list was empty when the varobj_root
     88  1.1  christos      was created.  */
     89  1.1  christos   int thread_id;
     90  1.1  christos 
     91  1.1  christos   /* If 1, the -var-update always recomputes the value in the
     92  1.1  christos      current thread and frame.  Otherwise, variable object is
     93  1.1  christos      always updated in the specific scope/thread/frame.  */
     94  1.1  christos   int floating;
     95  1.1  christos 
     96  1.1  christos   /* Flag that indicates validity: set to 0 when this varobj_root refers
     97  1.1  christos      to symbols that do not exist anymore.  */
     98  1.1  christos   int is_valid;
     99  1.1  christos 
    100  1.1  christos   /* Language-related operations for this variable and its
    101  1.1  christos      children.  */
    102  1.1  christos   const struct lang_varobj_ops *lang_ops;
    103  1.1  christos 
    104  1.1  christos   /* The varobj for this root node.  */
    105  1.1  christos   struct varobj *rootvar;
    106  1.1  christos 
    107  1.1  christos   /* Next root variable */
    108  1.1  christos   struct varobj_root *next;
    109  1.1  christos };
    110  1.1  christos 
    111  1.1  christos /* Dynamic part of varobj.  */
    112  1.1  christos 
    113  1.1  christos struct varobj_dynamic
    114  1.1  christos {
    115  1.1  christos   /* Whether the children of this varobj were requested.  This field is
    116  1.1  christos      used to decide if dynamic varobj should recompute their children.
    117  1.1  christos      In the event that the frontend never asked for the children, we
    118  1.1  christos      can avoid that.  */
    119  1.1  christos   int children_requested;
    120  1.1  christos 
    121  1.1  christos   /* The pretty-printer constructor.  If NULL, then the default
    122  1.1  christos      pretty-printer will be looked up.  If None, then no
    123  1.1  christos      pretty-printer will be installed.  */
    124  1.1  christos   PyObject *constructor;
    125  1.1  christos 
    126  1.1  christos   /* The pretty-printer that has been constructed.  If NULL, then a
    127  1.1  christos      new printer object is needed, and one will be constructed.  */
    128  1.1  christos   PyObject *pretty_printer;
    129  1.1  christos 
    130  1.1  christos   /* The iterator returned by the printer's 'children' method, or NULL
    131  1.1  christos      if not available.  */
    132  1.1  christos   PyObject *child_iter;
    133  1.1  christos 
    134  1.1  christos   /* We request one extra item from the iterator, so that we can
    135  1.1  christos      report to the caller whether there are more items than we have
    136  1.1  christos      already reported.  However, we don't want to install this value
    137  1.1  christos      when we read it, because that will mess up future updates.  So,
    138  1.1  christos      we stash it here instead.  */
    139  1.1  christos   PyObject *saved_item;
    140  1.1  christos };
    141  1.1  christos 
    142  1.1  christos struct cpstack
    143  1.1  christos {
    144  1.1  christos   char *name;
    145  1.1  christos   struct cpstack *next;
    146  1.1  christos };
    147  1.1  christos 
    148  1.1  christos /* A list of varobjs */
    149  1.1  christos 
    150  1.1  christos struct vlist
    151  1.1  christos {
    152  1.1  christos   struct varobj *var;
    153  1.1  christos   struct vlist *next;
    154  1.1  christos };
    155  1.1  christos 
    156  1.1  christos /* Private function prototypes */
    157  1.1  christos 
    158  1.1  christos /* Helper functions for the above subcommands.  */
    159  1.1  christos 
    160  1.1  christos static int delete_variable (struct cpstack **, struct varobj *, int);
    161  1.1  christos 
    162  1.1  christos static void delete_variable_1 (struct cpstack **, int *,
    163  1.1  christos 			       struct varobj *, int, int);
    164  1.1  christos 
    165  1.1  christos static int install_variable (struct varobj *);
    166  1.1  christos 
    167  1.1  christos static void uninstall_variable (struct varobj *);
    168  1.1  christos 
    169  1.1  christos static struct varobj *create_child (struct varobj *, int, char *);
    170  1.1  christos 
    171  1.1  christos static struct varobj *
    172  1.1  christos create_child_with_value (struct varobj *parent, int index, char *name,
    173  1.1  christos 			 struct value *value);
    174  1.1  christos 
    175  1.1  christos /* Utility routines */
    176  1.1  christos 
    177  1.1  christos static struct varobj *new_variable (void);
    178  1.1  christos 
    179  1.1  christos static struct varobj *new_root_variable (void);
    180  1.1  christos 
    181  1.1  christos static void free_variable (struct varobj *var);
    182  1.1  christos 
    183  1.1  christos static struct cleanup *make_cleanup_free_variable (struct varobj *var);
    184  1.1  christos 
    185  1.1  christos static enum varobj_display_formats variable_default_display (struct varobj *);
    186  1.1  christos 
    187  1.1  christos static void cppush (struct cpstack **pstack, char *name);
    188  1.1  christos 
    189  1.1  christos static char *cppop (struct cpstack **pstack);
    190  1.1  christos 
    191  1.1  christos static int update_type_if_necessary (struct varobj *var,
    192  1.1  christos 				     struct value *new_value);
    193  1.1  christos 
    194  1.1  christos static int install_new_value (struct varobj *var, struct value *value,
    195  1.1  christos 			      int initial);
    196  1.1  christos 
    197  1.1  christos /* Language-specific routines.  */
    198  1.1  christos 
    199  1.1  christos static int number_of_children (struct varobj *);
    200  1.1  christos 
    201  1.1  christos static char *name_of_variable (struct varobj *);
    202  1.1  christos 
    203  1.1  christos static char *name_of_child (struct varobj *, int);
    204  1.1  christos 
    205  1.1  christos static struct value *value_of_root (struct varobj **var_handle, int *);
    206  1.1  christos 
    207  1.1  christos static struct value *value_of_child (struct varobj *parent, int index);
    208  1.1  christos 
    209  1.1  christos static char *my_value_of_variable (struct varobj *var,
    210  1.1  christos 				   enum varobj_display_formats format);
    211  1.1  christos 
    212  1.1  christos static int is_root_p (struct varobj *var);
    213  1.1  christos 
    214  1.1  christos #if HAVE_PYTHON
    215  1.1  christos 
    216  1.1  christos static struct varobj *varobj_add_child (struct varobj *var,
    217  1.1  christos 					char *name,
    218  1.1  christos 					struct value *value);
    219  1.1  christos 
    220  1.1  christos #endif /* HAVE_PYTHON */
    221  1.1  christos 
    222  1.1  christos /* Private data */
    223  1.1  christos 
    224  1.1  christos /* Mappings of varobj_display_formats enums to gdb's format codes.  */
    225  1.1  christos static int format_code[] = { 0, 't', 'd', 'x', 'o' };
    226  1.1  christos 
    227  1.1  christos /* Header of the list of root variable objects.  */
    228  1.1  christos static struct varobj_root *rootlist;
    229  1.1  christos 
    230  1.1  christos /* Prime number indicating the number of buckets in the hash table.  */
    231  1.1  christos /* A prime large enough to avoid too many colisions.  */
    232  1.1  christos #define VAROBJ_TABLE_SIZE 227
    233  1.1  christos 
    234  1.1  christos /* Pointer to the varobj hash table (built at run time).  */
    235  1.1  christos static struct vlist **varobj_table;
    236  1.1  christos 
    237  1.1  christos 
    238  1.1  christos 
    240  1.1  christos /* API Implementation */
    241  1.1  christos static int
    242  1.1  christos is_root_p (struct varobj *var)
    243  1.1  christos {
    244  1.1  christos   return (var->root->rootvar == var);
    245  1.1  christos }
    246  1.1  christos 
    247  1.1  christos #ifdef HAVE_PYTHON
    248  1.1  christos /* Helper function to install a Python environment suitable for
    249  1.1  christos    use during operations on VAR.  */
    250  1.1  christos static struct cleanup *
    251  1.1  christos varobj_ensure_python_env (struct varobj *var)
    252  1.1  christos {
    253  1.1  christos   return ensure_python_env (var->root->exp->gdbarch,
    254  1.1  christos 			    var->root->exp->language_defn);
    255  1.1  christos }
    256  1.1  christos #endif
    257  1.1  christos 
    258  1.1  christos /* Creates a varobj (not its children).  */
    259  1.1  christos 
    260  1.1  christos /* Return the full FRAME which corresponds to the given CORE_ADDR
    261  1.1  christos    or NULL if no FRAME on the chain corresponds to CORE_ADDR.  */
    262  1.1  christos 
    263  1.1  christos static struct frame_info *
    264  1.1  christos find_frame_addr_in_frame_chain (CORE_ADDR frame_addr)
    265  1.1  christos {
    266  1.1  christos   struct frame_info *frame = NULL;
    267  1.1  christos 
    268  1.1  christos   if (frame_addr == (CORE_ADDR) 0)
    269  1.1  christos     return NULL;
    270  1.1  christos 
    271  1.1  christos   for (frame = get_current_frame ();
    272  1.1  christos        frame != NULL;
    273  1.1  christos        frame = get_prev_frame (frame))
    274  1.1  christos     {
    275  1.1  christos       /* The CORE_ADDR we get as argument was parsed from a string GDB
    276  1.1  christos 	 output as $fp.  This output got truncated to gdbarch_addr_bit.
    277  1.1  christos 	 Truncate the frame base address in the same manner before
    278  1.1  christos 	 comparing it against our argument.  */
    279  1.1  christos       CORE_ADDR frame_base = get_frame_base_address (frame);
    280  1.1  christos       int addr_bit = gdbarch_addr_bit (get_frame_arch (frame));
    281  1.1  christos 
    282  1.1  christos       if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
    283  1.1  christos 	frame_base &= ((CORE_ADDR) 1 << addr_bit) - 1;
    284  1.1  christos 
    285  1.1  christos       if (frame_base == frame_addr)
    286  1.1  christos 	return frame;
    287  1.1  christos     }
    288  1.1  christos 
    289  1.1  christos   return NULL;
    290  1.1  christos }
    291  1.1  christos 
    292  1.1  christos struct varobj *
    293  1.1  christos varobj_create (char *objname,
    294  1.1  christos 	       char *expression, CORE_ADDR frame, enum varobj_type type)
    295  1.1  christos {
    296  1.1  christos   struct varobj *var;
    297  1.1  christos   struct cleanup *old_chain;
    298  1.1  christos 
    299  1.1  christos   /* Fill out a varobj structure for the (root) variable being constructed.  */
    300  1.1  christos   var = new_root_variable ();
    301  1.1  christos   old_chain = make_cleanup_free_variable (var);
    302  1.1  christos 
    303  1.1  christos   if (expression != NULL)
    304  1.1  christos     {
    305  1.1  christos       struct frame_info *fi;
    306  1.1  christos       struct frame_id old_id = null_frame_id;
    307  1.1  christos       struct block *block;
    308  1.1  christos       const char *p;
    309  1.1  christos       struct value *value = NULL;
    310  1.1  christos       volatile struct gdb_exception except;
    311  1.1  christos       CORE_ADDR pc;
    312  1.1  christos 
    313  1.1  christos       /* Parse and evaluate the expression, filling in as much of the
    314  1.1  christos          variable's data as possible.  */
    315  1.1  christos 
    316  1.1  christos       if (has_stack_frames ())
    317  1.1  christos 	{
    318  1.1  christos 	  /* Allow creator to specify context of variable.  */
    319  1.1  christos 	  if ((type == USE_CURRENT_FRAME) || (type == USE_SELECTED_FRAME))
    320  1.1  christos 	    fi = get_selected_frame (NULL);
    321  1.1  christos 	  else
    322  1.1  christos 	    /* FIXME: cagney/2002-11-23: This code should be doing a
    323  1.1  christos 	       lookup using the frame ID and not just the frame's
    324  1.1  christos 	       ``address''.  This, of course, means an interface
    325  1.1  christos 	       change.  However, with out that interface change ISAs,
    326  1.1  christos 	       such as the ia64 with its two stacks, won't work.
    327  1.1  christos 	       Similar goes for the case where there is a frameless
    328  1.1  christos 	       function.  */
    329  1.1  christos 	    fi = find_frame_addr_in_frame_chain (frame);
    330  1.1  christos 	}
    331  1.1  christos       else
    332  1.1  christos 	fi = NULL;
    333  1.1  christos 
    334  1.1  christos       /* frame = -2 means always use selected frame.  */
    335  1.1  christos       if (type == USE_SELECTED_FRAME)
    336  1.1  christos 	var->root->floating = 1;
    337  1.1  christos 
    338  1.1  christos       pc = 0;
    339  1.1  christos       block = NULL;
    340  1.1  christos       if (fi != NULL)
    341  1.1  christos 	{
    342  1.1  christos 	  block = get_frame_block (fi, 0);
    343  1.1  christos 	  pc = get_frame_pc (fi);
    344  1.1  christos 	}
    345  1.1  christos 
    346  1.1  christos       p = expression;
    347  1.1  christos       innermost_block = NULL;
    348  1.1  christos       /* Wrap the call to parse expression, so we can
    349  1.1  christos          return a sensible error.  */
    350  1.1  christos       TRY_CATCH (except, RETURN_MASK_ERROR)
    351  1.1  christos 	{
    352  1.1  christos 	  var->root->exp = parse_exp_1 (&p, pc, block, 0);
    353  1.1  christos 	}
    354  1.1  christos 
    355  1.1  christos       if (except.reason < 0)
    356  1.1  christos 	{
    357  1.1  christos 	  do_cleanups (old_chain);
    358  1.1  christos 	  return NULL;
    359  1.1  christos 	}
    360  1.1  christos 
    361  1.1  christos       /* Don't allow variables to be created for types.  */
    362  1.1  christos       if (var->root->exp->elts[0].opcode == OP_TYPE
    363  1.1  christos 	  || var->root->exp->elts[0].opcode == OP_TYPEOF
    364  1.1  christos 	  || var->root->exp->elts[0].opcode == OP_DECLTYPE)
    365  1.1  christos 	{
    366  1.1  christos 	  do_cleanups (old_chain);
    367  1.1  christos 	  fprintf_unfiltered (gdb_stderr, "Attempt to use a type name"
    368  1.1  christos 			      " as an expression.\n");
    369  1.1  christos 	  return NULL;
    370  1.1  christos 	}
    371  1.1  christos 
    372  1.1  christos       var->format = variable_default_display (var);
    373  1.1  christos       var->root->valid_block = innermost_block;
    374  1.1  christos       var->name = xstrdup (expression);
    375  1.1  christos       /* For a root var, the name and the expr are the same.  */
    376  1.1  christos       var->path_expr = xstrdup (expression);
    377  1.1  christos 
    378  1.1  christos       /* When the frame is different from the current frame,
    379  1.1  christos          we must select the appropriate frame before parsing
    380  1.1  christos          the expression, otherwise the value will not be current.
    381  1.1  christos          Since select_frame is so benign, just call it for all cases.  */
    382  1.1  christos       if (innermost_block)
    383  1.1  christos 	{
    384  1.1  christos 	  /* User could specify explicit FRAME-ADDR which was not found but
    385  1.1  christos 	     EXPRESSION is frame specific and we would not be able to evaluate
    386  1.1  christos 	     it correctly next time.  With VALID_BLOCK set we must also set
    387  1.1  christos 	     FRAME and THREAD_ID.  */
    388  1.1  christos 	  if (fi == NULL)
    389  1.1  christos 	    error (_("Failed to find the specified frame"));
    390  1.1  christos 
    391  1.1  christos 	  var->root->frame = get_frame_id (fi);
    392  1.1  christos 	  var->root->thread_id = pid_to_thread_id (inferior_ptid);
    393  1.1  christos 	  old_id = get_frame_id (get_selected_frame (NULL));
    394  1.1  christos 	  select_frame (fi);
    395  1.1  christos 	}
    396  1.1  christos 
    397  1.1  christos       /* We definitely need to catch errors here.
    398  1.1  christos          If evaluate_expression succeeds we got the value we wanted.
    399  1.1  christos          But if it fails, we still go on with a call to evaluate_type().  */
    400  1.1  christos       TRY_CATCH (except, RETURN_MASK_ERROR)
    401  1.1  christos 	{
    402  1.1  christos 	  value = evaluate_expression (var->root->exp);
    403  1.1  christos 	}
    404  1.1  christos 
    405  1.1  christos       if (except.reason < 0)
    406  1.1  christos 	{
    407  1.1  christos 	  /* Error getting the value.  Try to at least get the
    408  1.1  christos 	     right type.  */
    409  1.1  christos 	  struct value *type_only_value = evaluate_type (var->root->exp);
    410  1.1  christos 
    411  1.1  christos 	  var->type = value_type (type_only_value);
    412  1.1  christos 	}
    413  1.1  christos 	else
    414  1.1  christos 	  {
    415  1.1  christos 	    int real_type_found = 0;
    416  1.1  christos 
    417  1.1  christos 	    var->type = value_actual_type (value, 0, &real_type_found);
    418  1.1  christos 	    if (real_type_found)
    419  1.1  christos 	      value = value_cast (var->type, value);
    420  1.1  christos 	  }
    421  1.1  christos 
    422  1.1  christos       /* Set language info */
    423  1.1  christos       var->root->lang_ops = var->root->exp->language_defn->la_varobj_ops;
    424  1.1  christos 
    425  1.1  christos       install_new_value (var, value, 1 /* Initial assignment */);
    426  1.1  christos 
    427  1.1  christos       /* Set ourselves as our root.  */
    428  1.1  christos       var->root->rootvar = var;
    429  1.1  christos 
    430  1.1  christos       /* Reset the selected frame.  */
    431  1.1  christos       if (frame_id_p (old_id))
    432  1.1  christos 	select_frame (frame_find_by_id (old_id));
    433  1.1  christos     }
    434  1.1  christos 
    435  1.1  christos   /* If the variable object name is null, that means this
    436  1.1  christos      is a temporary variable, so don't install it.  */
    437  1.1  christos 
    438  1.1  christos   if ((var != NULL) && (objname != NULL))
    439  1.1  christos     {
    440  1.1  christos       var->obj_name = xstrdup (objname);
    441  1.1  christos 
    442  1.1  christos       /* If a varobj name is duplicated, the install will fail so
    443  1.1  christos          we must cleanup.  */
    444  1.1  christos       if (!install_variable (var))
    445  1.1  christos 	{
    446  1.1  christos 	  do_cleanups (old_chain);
    447  1.1  christos 	  return NULL;
    448  1.1  christos 	}
    449  1.1  christos     }
    450  1.1  christos 
    451  1.1  christos   discard_cleanups (old_chain);
    452  1.1  christos   return var;
    453  1.1  christos }
    454  1.1  christos 
    455  1.1  christos /* Generates an unique name that can be used for a varobj.  */
    456  1.1  christos 
    457  1.1  christos char *
    458  1.1  christos varobj_gen_name (void)
    459  1.1  christos {
    460  1.1  christos   static int id = 0;
    461  1.1  christos   char *obj_name;
    462  1.1  christos 
    463  1.1  christos   /* Generate a name for this object.  */
    464  1.1  christos   id++;
    465  1.1  christos   obj_name = xstrprintf ("var%d", id);
    466  1.1  christos 
    467  1.1  christos   return obj_name;
    468  1.1  christos }
    469  1.1  christos 
    470  1.1  christos /* Given an OBJNAME, returns the pointer to the corresponding varobj.  Call
    471  1.1  christos    error if OBJNAME cannot be found.  */
    472  1.1  christos 
    473  1.1  christos struct varobj *
    474  1.1  christos varobj_get_handle (char *objname)
    475  1.1  christos {
    476  1.1  christos   struct vlist *cv;
    477  1.1  christos   const char *chp;
    478  1.1  christos   unsigned int index = 0;
    479  1.1  christos   unsigned int i = 1;
    480  1.1  christos 
    481  1.1  christos   for (chp = objname; *chp; chp++)
    482  1.1  christos     {
    483  1.1  christos       index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
    484  1.1  christos     }
    485  1.1  christos 
    486  1.1  christos   cv = *(varobj_table + index);
    487  1.1  christos   while ((cv != NULL) && (strcmp (cv->var->obj_name, objname) != 0))
    488  1.1  christos     cv = cv->next;
    489  1.1  christos 
    490  1.1  christos   if (cv == NULL)
    491  1.1  christos     error (_("Variable object not found"));
    492  1.1  christos 
    493  1.1  christos   return cv->var;
    494  1.1  christos }
    495  1.1  christos 
    496  1.1  christos /* Given the handle, return the name of the object.  */
    497  1.1  christos 
    498  1.1  christos char *
    499  1.1  christos varobj_get_objname (struct varobj *var)
    500  1.1  christos {
    501  1.1  christos   return var->obj_name;
    502  1.1  christos }
    503  1.1  christos 
    504  1.1  christos /* Given the handle, return the expression represented by the object.  */
    505  1.1  christos 
    506  1.1  christos char *
    507  1.1  christos varobj_get_expression (struct varobj *var)
    508  1.1  christos {
    509  1.1  christos   return name_of_variable (var);
    510  1.1  christos }
    511  1.1  christos 
    512  1.1  christos /* Deletes a varobj and all its children if only_children == 0,
    513  1.1  christos    otherwise deletes only the children; returns a malloc'ed list of
    514  1.1  christos    all the (malloc'ed) names of the variables that have been deleted
    515  1.1  christos    (NULL terminated).  */
    516  1.1  christos 
    517  1.1  christos int
    518  1.1  christos varobj_delete (struct varobj *var, char ***dellist, int only_children)
    519  1.1  christos {
    520  1.1  christos   int delcount;
    521  1.1  christos   int mycount;
    522  1.1  christos   struct cpstack *result = NULL;
    523  1.1  christos   char **cp;
    524  1.1  christos 
    525  1.1  christos   /* Initialize a stack for temporary results.  */
    526  1.1  christos   cppush (&result, NULL);
    527  1.1  christos 
    528  1.1  christos   if (only_children)
    529  1.1  christos     /* Delete only the variable children.  */
    530  1.1  christos     delcount = delete_variable (&result, var, 1 /* only the children */ );
    531  1.1  christos   else
    532  1.1  christos     /* Delete the variable and all its children.  */
    533  1.1  christos     delcount = delete_variable (&result, var, 0 /* parent+children */ );
    534  1.1  christos 
    535  1.1  christos   /* We may have been asked to return a list of what has been deleted.  */
    536  1.1  christos   if (dellist != NULL)
    537  1.1  christos     {
    538  1.1  christos       *dellist = xmalloc ((delcount + 1) * sizeof (char *));
    539  1.1  christos 
    540  1.1  christos       cp = *dellist;
    541  1.1  christos       mycount = delcount;
    542  1.1  christos       *cp = cppop (&result);
    543  1.1  christos       while ((*cp != NULL) && (mycount > 0))
    544  1.1  christos 	{
    545  1.1  christos 	  mycount--;
    546  1.1  christos 	  cp++;
    547  1.1  christos 	  *cp = cppop (&result);
    548  1.1  christos 	}
    549  1.1  christos 
    550  1.1  christos       if (mycount || (*cp != NULL))
    551  1.1  christos 	warning (_("varobj_delete: assertion failed - mycount(=%d) <> 0"),
    552  1.1  christos 		 mycount);
    553  1.1  christos     }
    554  1.1  christos 
    555  1.1  christos   return delcount;
    556  1.1  christos }
    557  1.1  christos 
    558  1.1  christos #if HAVE_PYTHON
    559  1.1  christos 
    560  1.1  christos /* Convenience function for varobj_set_visualizer.  Instantiate a
    561  1.1  christos    pretty-printer for a given value.  */
    562  1.1  christos static PyObject *
    563  1.1  christos instantiate_pretty_printer (PyObject *constructor, struct value *value)
    564  1.1  christos {
    565  1.1  christos   PyObject *val_obj = NULL;
    566  1.1  christos   PyObject *printer;
    567  1.1  christos 
    568  1.1  christos   val_obj = value_to_value_object (value);
    569  1.1  christos   if (! val_obj)
    570  1.1  christos     return NULL;
    571  1.1  christos 
    572  1.1  christos   printer = PyObject_CallFunctionObjArgs (constructor, val_obj, NULL);
    573  1.1  christos   Py_DECREF (val_obj);
    574  1.1  christos   return printer;
    575  1.1  christos }
    576  1.1  christos 
    577  1.1  christos #endif
    578  1.1  christos 
    579  1.1  christos /* Set/Get variable object display format.  */
    580  1.1  christos 
    581  1.1  christos enum varobj_display_formats
    582  1.1  christos varobj_set_display_format (struct varobj *var,
    583  1.1  christos 			   enum varobj_display_formats format)
    584  1.1  christos {
    585  1.1  christos   switch (format)
    586  1.1  christos     {
    587  1.1  christos     case FORMAT_NATURAL:
    588  1.1  christos     case FORMAT_BINARY:
    589  1.1  christos     case FORMAT_DECIMAL:
    590  1.1  christos     case FORMAT_HEXADECIMAL:
    591  1.1  christos     case FORMAT_OCTAL:
    592  1.1  christos       var->format = format;
    593  1.1  christos       break;
    594  1.1  christos 
    595  1.1  christos     default:
    596  1.1  christos       var->format = variable_default_display (var);
    597  1.1  christos     }
    598  1.1  christos 
    599  1.1  christos   if (varobj_value_is_changeable_p (var)
    600  1.1  christos       && var->value && !value_lazy (var->value))
    601  1.1  christos     {
    602  1.1  christos       xfree (var->print_value);
    603  1.1  christos       var->print_value = varobj_value_get_print_value (var->value,
    604  1.1  christos 						       var->format, var);
    605  1.1  christos     }
    606  1.1  christos 
    607  1.1  christos   return var->format;
    608  1.1  christos }
    609  1.1  christos 
    610  1.1  christos enum varobj_display_formats
    611  1.1  christos varobj_get_display_format (struct varobj *var)
    612  1.1  christos {
    613  1.1  christos   return var->format;
    614  1.1  christos }
    615  1.1  christos 
    616  1.1  christos char *
    617  1.1  christos varobj_get_display_hint (struct varobj *var)
    618  1.1  christos {
    619  1.1  christos   char *result = NULL;
    620  1.1  christos 
    621  1.1  christos #if HAVE_PYTHON
    622  1.1  christos   struct cleanup *back_to;
    623  1.1  christos 
    624  1.1  christos   if (!gdb_python_initialized)
    625  1.1  christos     return NULL;
    626  1.1  christos 
    627  1.1  christos   back_to = varobj_ensure_python_env (var);
    628  1.1  christos 
    629  1.1  christos   if (var->dynamic->pretty_printer != NULL)
    630  1.1  christos     result = gdbpy_get_display_hint (var->dynamic->pretty_printer);
    631  1.1  christos 
    632  1.1  christos   do_cleanups (back_to);
    633  1.1  christos #endif
    634  1.1  christos 
    635  1.1  christos   return result;
    636  1.1  christos }
    637  1.1  christos 
    638  1.1  christos /* Return true if the varobj has items after TO, false otherwise.  */
    639  1.1  christos 
    640  1.1  christos int
    641  1.1  christos varobj_has_more (struct varobj *var, int to)
    642  1.1  christos {
    643  1.1  christos   if (VEC_length (varobj_p, var->children) > to)
    644  1.1  christos     return 1;
    645  1.1  christos   return ((to == -1 || VEC_length (varobj_p, var->children) == to)
    646  1.1  christos 	  && (var->dynamic->saved_item != NULL));
    647  1.1  christos }
    648  1.1  christos 
    649  1.1  christos /* If the variable object is bound to a specific thread, that
    650  1.1  christos    is its evaluation can always be done in context of a frame
    651  1.1  christos    inside that thread, returns GDB id of the thread -- which
    652  1.1  christos    is always positive.  Otherwise, returns -1.  */
    653  1.1  christos int
    654  1.1  christos varobj_get_thread_id (struct varobj *var)
    655  1.1  christos {
    656  1.1  christos   if (var->root->valid_block && var->root->thread_id > 0)
    657  1.1  christos     return var->root->thread_id;
    658  1.1  christos   else
    659  1.1  christos     return -1;
    660  1.1  christos }
    661  1.1  christos 
    662  1.1  christos void
    663  1.1  christos varobj_set_frozen (struct varobj *var, int frozen)
    664  1.1  christos {
    665  1.1  christos   /* When a variable is unfrozen, we don't fetch its value.
    666  1.1  christos      The 'not_fetched' flag remains set, so next -var-update
    667  1.1  christos      won't complain.
    668  1.1  christos 
    669  1.1  christos      We don't fetch the value, because for structures the client
    670  1.1  christos      should do -var-update anyway.  It would be bad to have different
    671  1.1  christos      client-size logic for structure and other types.  */
    672  1.1  christos   var->frozen = frozen;
    673  1.1  christos }
    674  1.1  christos 
    675  1.1  christos int
    676  1.1  christos varobj_get_frozen (struct varobj *var)
    677  1.1  christos {
    678  1.1  christos   return var->frozen;
    679  1.1  christos }
    680  1.1  christos 
    681  1.1  christos /* A helper function that restricts a range to what is actually
    682  1.1  christos    available in a VEC.  This follows the usual rules for the meaning
    683  1.1  christos    of FROM and TO -- if either is negative, the entire range is
    684  1.1  christos    used.  */
    685  1.1  christos 
    686  1.1  christos void
    687  1.1  christos varobj_restrict_range (VEC (varobj_p) *children, int *from, int *to)
    688  1.1  christos {
    689  1.1  christos   if (*from < 0 || *to < 0)
    690  1.1  christos     {
    691  1.1  christos       *from = 0;
    692  1.1  christos       *to = VEC_length (varobj_p, children);
    693  1.1  christos     }
    694  1.1  christos   else
    695  1.1  christos     {
    696  1.1  christos       if (*from > VEC_length (varobj_p, children))
    697  1.1  christos 	*from = VEC_length (varobj_p, children);
    698  1.1  christos       if (*to > VEC_length (varobj_p, children))
    699  1.1  christos 	*to = VEC_length (varobj_p, children);
    700  1.1  christos       if (*from > *to)
    701  1.1  christos 	*from = *to;
    702  1.1  christos     }
    703  1.1  christos }
    704  1.1  christos 
    705  1.1  christos #if HAVE_PYTHON
    706  1.1  christos 
    707  1.1  christos /* A helper for update_dynamic_varobj_children that installs a new
    708  1.1  christos    child when needed.  */
    709  1.1  christos 
    710  1.1  christos static void
    711  1.1  christos install_dynamic_child (struct varobj *var,
    712  1.1  christos 		       VEC (varobj_p) **changed,
    713  1.1  christos 		       VEC (varobj_p) **type_changed,
    714  1.1  christos 		       VEC (varobj_p) **new,
    715  1.1  christos 		       VEC (varobj_p) **unchanged,
    716  1.1  christos 		       int *cchanged,
    717  1.1  christos 		       int index,
    718  1.1  christos 		       char *name,
    719  1.1  christos 		       struct value *value)
    720  1.1  christos {
    721  1.1  christos   if (VEC_length (varobj_p, var->children) < index + 1)
    722  1.1  christos     {
    723  1.1  christos       /* There's no child yet.  */
    724  1.1  christos       struct varobj *child = varobj_add_child (var, name, value);
    725  1.1  christos 
    726  1.1  christos       if (new)
    727  1.1  christos 	{
    728  1.1  christos 	  VEC_safe_push (varobj_p, *new, child);
    729  1.1  christos 	  *cchanged = 1;
    730  1.1  christos 	}
    731  1.1  christos     }
    732  1.1  christos   else
    733  1.1  christos     {
    734  1.1  christos       varobj_p existing = VEC_index (varobj_p, var->children, index);
    735  1.1  christos       int type_updated = update_type_if_necessary (existing, value);
    736  1.1  christos 
    737  1.1  christos       if (type_updated)
    738  1.1  christos 	{
    739  1.1  christos 	  if (type_changed)
    740  1.1  christos 	    VEC_safe_push (varobj_p, *type_changed, existing);
    741  1.1  christos 	}
    742  1.1  christos       if (install_new_value (existing, value, 0))
    743  1.1  christos 	{
    744  1.1  christos 	  if (!type_updated && changed)
    745  1.1  christos 	    VEC_safe_push (varobj_p, *changed, existing);
    746  1.1  christos 	}
    747  1.1  christos       else if (!type_updated && unchanged)
    748  1.1  christos 	VEC_safe_push (varobj_p, *unchanged, existing);
    749  1.1  christos     }
    750  1.1  christos }
    751  1.1  christos 
    752  1.1  christos static int
    753  1.1  christos dynamic_varobj_has_child_method (struct varobj *var)
    754  1.1  christos {
    755  1.1  christos   struct cleanup *back_to;
    756  1.1  christos   PyObject *printer = var->dynamic->pretty_printer;
    757  1.1  christos   int result;
    758  1.1  christos 
    759  1.1  christos   if (!gdb_python_initialized)
    760  1.1  christos     return 0;
    761  1.1  christos 
    762  1.1  christos   back_to = varobj_ensure_python_env (var);
    763  1.1  christos   result = PyObject_HasAttr (printer, gdbpy_children_cst);
    764  1.1  christos   do_cleanups (back_to);
    765  1.1  christos   return result;
    766  1.1  christos }
    767  1.1  christos 
    768  1.1  christos #endif
    769  1.1  christos 
    770  1.1  christos static int
    771  1.1  christos update_dynamic_varobj_children (struct varobj *var,
    772  1.1  christos 				VEC (varobj_p) **changed,
    773  1.1  christos 				VEC (varobj_p) **type_changed,
    774  1.1  christos 				VEC (varobj_p) **new,
    775  1.1  christos 				VEC (varobj_p) **unchanged,
    776  1.1  christos 				int *cchanged,
    777  1.1  christos 				int update_children,
    778  1.1  christos 				int from,
    779  1.1  christos 				int to)
    780  1.1  christos {
    781  1.1  christos #if HAVE_PYTHON
    782  1.1  christos   struct cleanup *back_to;
    783  1.1  christos   PyObject *children;
    784  1.1  christos   int i;
    785  1.1  christos   PyObject *printer = var->dynamic->pretty_printer;
    786  1.1  christos 
    787  1.1  christos   if (!gdb_python_initialized)
    788  1.1  christos     return 0;
    789  1.1  christos 
    790  1.1  christos   back_to = varobj_ensure_python_env (var);
    791  1.1  christos 
    792  1.1  christos   *cchanged = 0;
    793  1.1  christos   if (!PyObject_HasAttr (printer, gdbpy_children_cst))
    794  1.1  christos     {
    795  1.1  christos       do_cleanups (back_to);
    796  1.1  christos       return 0;
    797  1.1  christos     }
    798  1.1  christos 
    799  1.1  christos   if (update_children || var->dynamic->child_iter == NULL)
    800  1.1  christos     {
    801  1.1  christos       children = PyObject_CallMethodObjArgs (printer, gdbpy_children_cst,
    802  1.1  christos 					     NULL);
    803  1.1  christos 
    804  1.1  christos       if (!children)
    805  1.1  christos 	{
    806  1.1  christos 	  gdbpy_print_stack ();
    807  1.1  christos 	  error (_("Null value returned for children"));
    808  1.1  christos 	}
    809  1.1  christos 
    810  1.1  christos       make_cleanup_py_decref (children);
    811  1.1  christos 
    812  1.1  christos       Py_XDECREF (var->dynamic->child_iter);
    813  1.1  christos       var->dynamic->child_iter = PyObject_GetIter (children);
    814  1.1  christos       if (var->dynamic->child_iter == NULL)
    815  1.1  christos 	{
    816  1.1  christos 	  gdbpy_print_stack ();
    817  1.1  christos 	  error (_("Could not get children iterator"));
    818  1.1  christos 	}
    819  1.1  christos 
    820  1.1  christos       Py_XDECREF (var->dynamic->saved_item);
    821  1.1  christos       var->dynamic->saved_item = NULL;
    822  1.1  christos 
    823  1.1  christos       i = 0;
    824  1.1  christos     }
    825  1.1  christos   else
    826  1.1  christos     i = VEC_length (varobj_p, var->children);
    827  1.1  christos 
    828  1.1  christos   /* We ask for one extra child, so that MI can report whether there
    829  1.1  christos      are more children.  */
    830  1.1  christos   for (; to < 0 || i < to + 1; ++i)
    831  1.1  christos     {
    832  1.1  christos       PyObject *item;
    833  1.1  christos       int force_done = 0;
    834  1.1  christos 
    835  1.1  christos       /* See if there was a leftover from last time.  */
    836  1.1  christos       if (var->dynamic->saved_item)
    837  1.1  christos 	{
    838  1.1  christos 	  item = var->dynamic->saved_item;
    839  1.1  christos 	  var->dynamic->saved_item = NULL;
    840  1.1  christos 	}
    841  1.1  christos       else
    842  1.1  christos 	item = PyIter_Next (var->dynamic->child_iter);
    843  1.1  christos 
    844  1.1  christos       if (!item)
    845  1.1  christos 	{
    846  1.1  christos 	  /* Normal end of iteration.  */
    847  1.1  christos 	  if (!PyErr_Occurred ())
    848  1.1  christos 	    break;
    849  1.1  christos 
    850  1.1  christos 	  /* If we got a memory error, just use the text as the
    851  1.1  christos 	     item.  */
    852  1.1  christos 	  if (PyErr_ExceptionMatches (gdbpy_gdb_memory_error))
    853  1.1  christos 	    {
    854  1.1  christos 	      PyObject *type, *value, *trace;
    855  1.1  christos 	      char *name_str, *value_str;
    856  1.1  christos 
    857  1.1  christos 	      PyErr_Fetch (&type, &value, &trace);
    858  1.1  christos 	      value_str = gdbpy_exception_to_string (type, value);
    859  1.1  christos 	      Py_XDECREF (type);
    860  1.1  christos 	      Py_XDECREF (value);
    861  1.1  christos 	      Py_XDECREF (trace);
    862  1.1  christos 	      if (!value_str)
    863  1.1  christos 		{
    864  1.1  christos 		  gdbpy_print_stack ();
    865  1.1  christos 		  break;
    866  1.1  christos 		}
    867  1.1  christos 
    868  1.1  christos 	      name_str = xstrprintf ("<error at %d>", i);
    869  1.1  christos 	      item = Py_BuildValue ("(ss)", name_str, value_str);
    870  1.1  christos 	      xfree (name_str);
    871  1.1  christos 	      xfree (value_str);
    872  1.1  christos 	      if (!item)
    873  1.1  christos 		{
    874  1.1  christos 		  gdbpy_print_stack ();
    875  1.1  christos 		  break;
    876  1.1  christos 		}
    877  1.1  christos 
    878  1.1  christos 	      force_done = 1;
    879  1.1  christos 	    }
    880  1.1  christos 	  else
    881  1.1  christos 	    {
    882  1.1  christos 	      /* Any other kind of error.  */
    883  1.1  christos 	      gdbpy_print_stack ();
    884  1.1  christos 	      break;
    885  1.1  christos 	    }
    886  1.1  christos 	}
    887  1.1  christos 
    888  1.1  christos       /* We don't want to push the extra child on any report list.  */
    889  1.1  christos       if (to < 0 || i < to)
    890  1.1  christos 	{
    891  1.1  christos 	  PyObject *py_v;
    892  1.1  christos 	  const char *name;
    893  1.1  christos 	  struct value *v;
    894  1.1  christos 	  struct cleanup *inner;
    895  1.1  christos 	  int can_mention = from < 0 || i >= from;
    896  1.1  christos 
    897  1.1  christos 	  inner = make_cleanup_py_decref (item);
    898  1.1  christos 
    899  1.1  christos 	  if (!PyArg_ParseTuple (item, "sO", &name, &py_v))
    900  1.1  christos 	    {
    901  1.1  christos 	      gdbpy_print_stack ();
    902  1.1  christos 	      error (_("Invalid item from the child list"));
    903  1.1  christos 	    }
    904  1.1  christos 
    905  1.1  christos 	  v = convert_value_from_python (py_v);
    906  1.1  christos 	  if (v == NULL)
    907  1.1  christos 	    gdbpy_print_stack ();
    908  1.1  christos 	  install_dynamic_child (var, can_mention ? changed : NULL,
    909  1.1  christos 				 can_mention ? type_changed : NULL,
    910  1.1  christos 				 can_mention ? new : NULL,
    911  1.1  christos 				 can_mention ? unchanged : NULL,
    912  1.1  christos 				 can_mention ? cchanged : NULL, i,
    913  1.1  christos 				 xstrdup (name), v);
    914  1.1  christos 	  do_cleanups (inner);
    915  1.1  christos 	}
    916  1.1  christos       else
    917  1.1  christos 	{
    918  1.1  christos 	  Py_XDECREF (var->dynamic->saved_item);
    919  1.1  christos 	  var->dynamic->saved_item = item;
    920  1.1  christos 
    921  1.1  christos 	  /* We want to truncate the child list just before this
    922  1.1  christos 	     element.  */
    923  1.1  christos 	  break;
    924  1.1  christos 	}
    925  1.1  christos 
    926  1.1  christos       if (force_done)
    927  1.1  christos 	break;
    928  1.1  christos     }
    929  1.1  christos 
    930  1.1  christos   if (i < VEC_length (varobj_p, var->children))
    931  1.1  christos     {
    932  1.1  christos       int j;
    933  1.1  christos 
    934  1.1  christos       *cchanged = 1;
    935  1.1  christos       for (j = i; j < VEC_length (varobj_p, var->children); ++j)
    936  1.1  christos 	varobj_delete (VEC_index (varobj_p, var->children, j), NULL, 0);
    937  1.1  christos       VEC_truncate (varobj_p, var->children, i);
    938  1.1  christos     }
    939  1.1  christos 
    940  1.1  christos   /* If there are fewer children than requested, note that the list of
    941  1.1  christos      children changed.  */
    942  1.1  christos   if (to >= 0 && VEC_length (varobj_p, var->children) < to)
    943  1.1  christos     *cchanged = 1;
    944  1.1  christos 
    945  1.1  christos   var->num_children = VEC_length (varobj_p, var->children);
    946  1.1  christos 
    947  1.1  christos   do_cleanups (back_to);
    948  1.1  christos 
    949  1.1  christos   return 1;
    950  1.1  christos #else
    951  1.1  christos   gdb_assert_not_reached ("should never be called if Python is not enabled");
    952  1.1  christos #endif
    953  1.1  christos }
    954  1.1  christos 
    955  1.1  christos int
    956  1.1  christos varobj_get_num_children (struct varobj *var)
    957  1.1  christos {
    958  1.1  christos   if (var->num_children == -1)
    959  1.1  christos     {
    960  1.1  christos       if (var->dynamic->pretty_printer != NULL)
    961  1.1  christos 	{
    962  1.1  christos 	  int dummy;
    963  1.1  christos 
    964  1.1  christos 	  /* If we have a dynamic varobj, don't report -1 children.
    965  1.1  christos 	     So, try to fetch some children first.  */
    966  1.1  christos 	  update_dynamic_varobj_children (var, NULL, NULL, NULL, NULL, &dummy,
    967  1.1  christos 					  0, 0, 0);
    968  1.1  christos 	}
    969  1.1  christos       else
    970  1.1  christos 	var->num_children = number_of_children (var);
    971  1.1  christos     }
    972  1.1  christos 
    973  1.1  christos   return var->num_children >= 0 ? var->num_children : 0;
    974  1.1  christos }
    975  1.1  christos 
    976  1.1  christos /* Creates a list of the immediate children of a variable object;
    977  1.1  christos    the return code is the number of such children or -1 on error.  */
    978  1.1  christos 
    979  1.1  christos VEC (varobj_p)*
    980  1.1  christos varobj_list_children (struct varobj *var, int *from, int *to)
    981  1.1  christos {
    982  1.1  christos   char *name;
    983  1.1  christos   int i, children_changed;
    984  1.1  christos 
    985  1.1  christos   var->dynamic->children_requested = 1;
    986  1.1  christos 
    987  1.1  christos   if (var->dynamic->pretty_printer != NULL)
    988  1.1  christos     {
    989  1.1  christos       /* This, in theory, can result in the number of children changing without
    990  1.1  christos 	 frontend noticing.  But well, calling -var-list-children on the same
    991  1.1  christos 	 varobj twice is not something a sane frontend would do.  */
    992  1.1  christos       update_dynamic_varobj_children (var, NULL, NULL, NULL, NULL,
    993  1.1  christos 				      &children_changed, 0, 0, *to);
    994  1.1  christos       varobj_restrict_range (var->children, from, to);
    995  1.1  christos       return var->children;
    996  1.1  christos     }
    997  1.1  christos 
    998  1.1  christos   if (var->num_children == -1)
    999  1.1  christos     var->num_children = number_of_children (var);
   1000  1.1  christos 
   1001  1.1  christos   /* If that failed, give up.  */
   1002  1.1  christos   if (var->num_children == -1)
   1003  1.1  christos     return var->children;
   1004  1.1  christos 
   1005  1.1  christos   /* If we're called when the list of children is not yet initialized,
   1006  1.1  christos      allocate enough elements in it.  */
   1007  1.1  christos   while (VEC_length (varobj_p, var->children) < var->num_children)
   1008  1.1  christos     VEC_safe_push (varobj_p, var->children, NULL);
   1009  1.1  christos 
   1010  1.1  christos   for (i = 0; i < var->num_children; i++)
   1011  1.1  christos     {
   1012  1.1  christos       varobj_p existing = VEC_index (varobj_p, var->children, i);
   1013  1.1  christos 
   1014  1.1  christos       if (existing == NULL)
   1015  1.1  christos 	{
   1016  1.1  christos 	  /* Either it's the first call to varobj_list_children for
   1017  1.1  christos 	     this variable object, and the child was never created,
   1018  1.1  christos 	     or it was explicitly deleted by the client.  */
   1019  1.1  christos 	  name = name_of_child (var, i);
   1020  1.1  christos 	  existing = create_child (var, i, name);
   1021  1.1  christos 	  VEC_replace (varobj_p, var->children, i, existing);
   1022  1.1  christos 	}
   1023  1.1  christos     }
   1024  1.1  christos 
   1025  1.1  christos   varobj_restrict_range (var->children, from, to);
   1026  1.1  christos   return var->children;
   1027  1.1  christos }
   1028  1.1  christos 
   1029  1.1  christos #if HAVE_PYTHON
   1030  1.1  christos 
   1031  1.1  christos static struct varobj *
   1032  1.1  christos varobj_add_child (struct varobj *var, char *name, struct value *value)
   1033  1.1  christos {
   1034  1.1  christos   varobj_p v = create_child_with_value (var,
   1035  1.1  christos 					VEC_length (varobj_p, var->children),
   1036  1.1  christos 					name, value);
   1037  1.1  christos 
   1038  1.1  christos   VEC_safe_push (varobj_p, var->children, v);
   1039  1.1  christos   return v;
   1040  1.1  christos }
   1041  1.1  christos 
   1042  1.1  christos #endif /* HAVE_PYTHON */
   1043  1.1  christos 
   1044  1.1  christos /* Obtain the type of an object Variable as a string similar to the one gdb
   1045  1.1  christos    prints on the console.  */
   1046  1.1  christos 
   1047  1.1  christos char *
   1048  1.1  christos varobj_get_type (struct varobj *var)
   1049  1.1  christos {
   1050  1.1  christos   /* For the "fake" variables, do not return a type.  (Its type is
   1051  1.1  christos      NULL, too.)
   1052  1.1  christos      Do not return a type for invalid variables as well.  */
   1053  1.1  christos   if (CPLUS_FAKE_CHILD (var) || !var->root->is_valid)
   1054  1.1  christos     return NULL;
   1055  1.1  christos 
   1056  1.1  christos   return type_to_string (var->type);
   1057  1.1  christos }
   1058  1.1  christos 
   1059  1.1  christos /* Obtain the type of an object variable.  */
   1060  1.1  christos 
   1061  1.1  christos struct type *
   1062  1.1  christos varobj_get_gdb_type (struct varobj *var)
   1063  1.1  christos {
   1064  1.1  christos   return var->type;
   1065  1.1  christos }
   1066  1.1  christos 
   1067  1.1  christos /* Is VAR a path expression parent, i.e., can it be used to construct
   1068  1.1  christos    a valid path expression?  */
   1069  1.1  christos 
   1070  1.1  christos static int
   1071  1.1  christos is_path_expr_parent (struct varobj *var)
   1072  1.1  christos {
   1073  1.1  christos   struct type *type;
   1074  1.1  christos 
   1075  1.1  christos   /* "Fake" children are not path_expr parents.  */
   1076  1.1  christos   if (CPLUS_FAKE_CHILD (var))
   1077  1.1  christos     return 0;
   1078  1.1  christos 
   1079  1.1  christos   type = varobj_get_value_type (var);
   1080  1.1  christos 
   1081  1.1  christos   /* Anonymous unions and structs are also not path_expr parents.  */
   1082  1.1  christos   return !((TYPE_CODE (type) == TYPE_CODE_STRUCT
   1083  1.1  christos 	    || TYPE_CODE (type) == TYPE_CODE_UNION)
   1084  1.1  christos 	   && TYPE_NAME (type) == NULL);
   1085  1.1  christos }
   1086  1.1  christos 
   1087  1.1  christos /* Return the path expression parent for VAR.  */
   1088  1.1  christos 
   1089  1.1  christos struct varobj *
   1090  1.1  christos varobj_get_path_expr_parent (struct varobj *var)
   1091  1.1  christos {
   1092  1.1  christos   struct varobj *parent = var;
   1093  1.1  christos 
   1094  1.1  christos   while (!is_root_p (parent) && !is_path_expr_parent (parent))
   1095  1.1  christos     parent = parent->parent;
   1096  1.1  christos 
   1097  1.1  christos   return parent;
   1098  1.1  christos }
   1099  1.1  christos 
   1100  1.1  christos /* Return a pointer to the full rooted expression of varobj VAR.
   1101  1.1  christos    If it has not been computed yet, compute it.  */
   1102  1.1  christos char *
   1103  1.1  christos varobj_get_path_expr (struct varobj *var)
   1104  1.1  christos {
   1105  1.1  christos   if (var->path_expr != NULL)
   1106  1.1  christos     return var->path_expr;
   1107  1.1  christos   else
   1108  1.1  christos     {
   1109  1.1  christos       /* For root varobjs, we initialize path_expr
   1110  1.1  christos 	 when creating varobj, so here it should be
   1111  1.1  christos 	 child varobj.  */
   1112  1.1  christos       gdb_assert (!is_root_p (var));
   1113  1.1  christos       return (*var->root->lang_ops->path_expr_of_child) (var);
   1114  1.1  christos     }
   1115  1.1  christos }
   1116  1.1  christos 
   1117  1.1  christos const struct language_defn *
   1118  1.1  christos varobj_get_language (struct varobj *var)
   1119  1.1  christos {
   1120  1.1  christos   return var->root->exp->language_defn;
   1121  1.1  christos }
   1122  1.1  christos 
   1123  1.1  christos int
   1124  1.1  christos varobj_get_attributes (struct varobj *var)
   1125  1.1  christos {
   1126  1.1  christos   int attributes = 0;
   1127  1.1  christos 
   1128  1.1  christos   if (varobj_editable_p (var))
   1129  1.1  christos     /* FIXME: define masks for attributes.  */
   1130  1.1  christos     attributes |= 0x00000001;	/* Editable */
   1131  1.1  christos 
   1132  1.1  christos   return attributes;
   1133  1.1  christos }
   1134  1.1  christos 
   1135  1.1  christos int
   1136  1.1  christos varobj_pretty_printed_p (struct varobj *var)
   1137  1.1  christos {
   1138  1.1  christos   return var->dynamic->pretty_printer != NULL;
   1139  1.1  christos }
   1140  1.1  christos 
   1141  1.1  christos char *
   1142  1.1  christos varobj_get_formatted_value (struct varobj *var,
   1143  1.1  christos 			    enum varobj_display_formats format)
   1144  1.1  christos {
   1145  1.1  christos   return my_value_of_variable (var, format);
   1146  1.1  christos }
   1147  1.1  christos 
   1148  1.1  christos char *
   1149  1.1  christos varobj_get_value (struct varobj *var)
   1150  1.1  christos {
   1151  1.1  christos   return my_value_of_variable (var, var->format);
   1152  1.1  christos }
   1153  1.1  christos 
   1154  1.1  christos /* Set the value of an object variable (if it is editable) to the
   1155  1.1  christos    value of the given expression.  */
   1156  1.1  christos /* Note: Invokes functions that can call error().  */
   1157  1.1  christos 
   1158  1.1  christos int
   1159  1.1  christos varobj_set_value (struct varobj *var, char *expression)
   1160  1.1  christos {
   1161  1.1  christos   struct value *val = NULL; /* Initialize to keep gcc happy.  */
   1162  1.1  christos   /* The argument "expression" contains the variable's new value.
   1163  1.1  christos      We need to first construct a legal expression for this -- ugh!  */
   1164  1.1  christos   /* Does this cover all the bases?  */
   1165  1.1  christos   struct expression *exp;
   1166  1.1  christos   struct value *value = NULL; /* Initialize to keep gcc happy.  */
   1167  1.1  christos   int saved_input_radix = input_radix;
   1168  1.1  christos   const char *s = expression;
   1169  1.1  christos   volatile struct gdb_exception except;
   1170  1.1  christos 
   1171  1.1  christos   gdb_assert (varobj_editable_p (var));
   1172  1.1  christos 
   1173  1.1  christos   input_radix = 10;		/* ALWAYS reset to decimal temporarily.  */
   1174  1.1  christos   exp = parse_exp_1 (&s, 0, 0, 0);
   1175  1.1  christos   TRY_CATCH (except, RETURN_MASK_ERROR)
   1176  1.1  christos     {
   1177  1.1  christos       value = evaluate_expression (exp);
   1178  1.1  christos     }
   1179  1.1  christos 
   1180  1.1  christos   if (except.reason < 0)
   1181  1.1  christos     {
   1182  1.1  christos       /* We cannot proceed without a valid expression.  */
   1183  1.1  christos       xfree (exp);
   1184  1.1  christos       return 0;
   1185  1.1  christos     }
   1186  1.1  christos 
   1187  1.1  christos   /* All types that are editable must also be changeable.  */
   1188  1.1  christos   gdb_assert (varobj_value_is_changeable_p (var));
   1189  1.1  christos 
   1190  1.1  christos   /* The value of a changeable variable object must not be lazy.  */
   1191  1.1  christos   gdb_assert (!value_lazy (var->value));
   1192  1.1  christos 
   1193  1.1  christos   /* Need to coerce the input.  We want to check if the
   1194  1.1  christos      value of the variable object will be different
   1195  1.1  christos      after assignment, and the first thing value_assign
   1196  1.1  christos      does is coerce the input.
   1197  1.1  christos      For example, if we are assigning an array to a pointer variable we
   1198  1.1  christos      should compare the pointer with the array's address, not with the
   1199  1.1  christos      array's content.  */
   1200  1.1  christos   value = coerce_array (value);
   1201  1.1  christos 
   1202  1.1  christos   /* The new value may be lazy.  value_assign, or
   1203  1.1  christos      rather value_contents, will take care of this.  */
   1204  1.1  christos   TRY_CATCH (except, RETURN_MASK_ERROR)
   1205  1.1  christos     {
   1206  1.1  christos       val = value_assign (var->value, value);
   1207  1.1  christos     }
   1208  1.1  christos 
   1209  1.1  christos   if (except.reason < 0)
   1210  1.1  christos     return 0;
   1211  1.1  christos 
   1212  1.1  christos   /* If the value has changed, record it, so that next -var-update can
   1213  1.1  christos      report this change.  If a variable had a value of '1', we've set it
   1214  1.1  christos      to '333' and then set again to '1', when -var-update will report this
   1215  1.1  christos      variable as changed -- because the first assignment has set the
   1216  1.1  christos      'updated' flag.  There's no need to optimize that, because return value
   1217  1.1  christos      of -var-update should be considered an approximation.  */
   1218  1.1  christos   var->updated = install_new_value (var, val, 0 /* Compare values.  */);
   1219  1.1  christos   input_radix = saved_input_radix;
   1220  1.1  christos   return 1;
   1221  1.1  christos }
   1222  1.1  christos 
   1223  1.1  christos #if HAVE_PYTHON
   1224  1.1  christos 
   1225  1.1  christos /* A helper function to install a constructor function and visualizer
   1226  1.1  christos    in a varobj_dynamic.  */
   1227  1.1  christos 
   1228  1.1  christos static void
   1229  1.1  christos install_visualizer (struct varobj_dynamic *var, PyObject *constructor,
   1230  1.1  christos 		    PyObject *visualizer)
   1231  1.1  christos {
   1232  1.1  christos   Py_XDECREF (var->constructor);
   1233  1.1  christos   var->constructor = constructor;
   1234  1.1  christos 
   1235  1.1  christos   Py_XDECREF (var->pretty_printer);
   1236  1.1  christos   var->pretty_printer = visualizer;
   1237  1.1  christos 
   1238  1.1  christos   Py_XDECREF (var->child_iter);
   1239  1.1  christos   var->child_iter = NULL;
   1240  1.1  christos }
   1241  1.1  christos 
   1242  1.1  christos /* Install the default visualizer for VAR.  */
   1243  1.1  christos 
   1244  1.1  christos static void
   1245  1.1  christos install_default_visualizer (struct varobj *var)
   1246  1.1  christos {
   1247  1.1  christos   /* Do not install a visualizer on a CPLUS_FAKE_CHILD.  */
   1248  1.1  christos   if (CPLUS_FAKE_CHILD (var))
   1249  1.1  christos     return;
   1250  1.1  christos 
   1251  1.1  christos   if (pretty_printing)
   1252  1.1  christos     {
   1253  1.1  christos       PyObject *pretty_printer = NULL;
   1254  1.1  christos 
   1255  1.1  christos       if (var->value)
   1256  1.1  christos 	{
   1257  1.1  christos 	  pretty_printer = gdbpy_get_varobj_pretty_printer (var->value);
   1258  1.1  christos 	  if (! pretty_printer)
   1259  1.1  christos 	    {
   1260  1.1  christos 	      gdbpy_print_stack ();
   1261  1.1  christos 	      error (_("Cannot instantiate printer for default visualizer"));
   1262  1.1  christos 	    }
   1263  1.1  christos 	}
   1264  1.1  christos 
   1265  1.1  christos       if (pretty_printer == Py_None)
   1266  1.1  christos 	{
   1267  1.1  christos 	  Py_DECREF (pretty_printer);
   1268  1.1  christos 	  pretty_printer = NULL;
   1269  1.1  christos 	}
   1270  1.1  christos 
   1271  1.1  christos       install_visualizer (var->dynamic, NULL, pretty_printer);
   1272  1.1  christos     }
   1273  1.1  christos }
   1274  1.1  christos 
   1275  1.1  christos /* Instantiate and install a visualizer for VAR using CONSTRUCTOR to
   1276  1.1  christos    make a new object.  */
   1277  1.1  christos 
   1278  1.1  christos static void
   1279  1.1  christos construct_visualizer (struct varobj *var, PyObject *constructor)
   1280  1.1  christos {
   1281  1.1  christos   PyObject *pretty_printer;
   1282  1.1  christos 
   1283  1.1  christos   /* Do not install a visualizer on a CPLUS_FAKE_CHILD.  */
   1284  1.1  christos   if (CPLUS_FAKE_CHILD (var))
   1285  1.1  christos     return;
   1286  1.1  christos 
   1287  1.1  christos   Py_INCREF (constructor);
   1288  1.1  christos   if (constructor == Py_None)
   1289  1.1  christos     pretty_printer = NULL;
   1290  1.1  christos   else
   1291  1.1  christos     {
   1292  1.1  christos       pretty_printer = instantiate_pretty_printer (constructor, var->value);
   1293  1.1  christos       if (! pretty_printer)
   1294  1.1  christos 	{
   1295  1.1  christos 	  gdbpy_print_stack ();
   1296  1.1  christos 	  Py_DECREF (constructor);
   1297  1.1  christos 	  constructor = Py_None;
   1298  1.1  christos 	  Py_INCREF (constructor);
   1299  1.1  christos 	}
   1300  1.1  christos 
   1301  1.1  christos       if (pretty_printer == Py_None)
   1302  1.1  christos 	{
   1303  1.1  christos 	  Py_DECREF (pretty_printer);
   1304  1.1  christos 	  pretty_printer = NULL;
   1305  1.1  christos 	}
   1306  1.1  christos     }
   1307  1.1  christos 
   1308  1.1  christos   install_visualizer (var->dynamic, constructor, pretty_printer);
   1309  1.1  christos }
   1310  1.1  christos 
   1311  1.1  christos #endif /* HAVE_PYTHON */
   1312  1.1  christos 
   1313  1.1  christos /* A helper function for install_new_value.  This creates and installs
   1314  1.1  christos    a visualizer for VAR, if appropriate.  */
   1315  1.1  christos 
   1316  1.1  christos static void
   1317  1.1  christos install_new_value_visualizer (struct varobj *var)
   1318  1.1  christos {
   1319  1.1  christos #if HAVE_PYTHON
   1320  1.1  christos   /* If the constructor is None, then we want the raw value.  If VAR
   1321  1.1  christos      does not have a value, just skip this.  */
   1322  1.1  christos   if (!gdb_python_initialized)
   1323  1.1  christos     return;
   1324  1.1  christos 
   1325  1.1  christos   if (var->dynamic->constructor != Py_None && var->value != NULL)
   1326  1.1  christos     {
   1327  1.1  christos       struct cleanup *cleanup;
   1328  1.1  christos 
   1329  1.1  christos       cleanup = varobj_ensure_python_env (var);
   1330  1.1  christos 
   1331  1.1  christos       if (var->dynamic->constructor == NULL)
   1332  1.1  christos 	install_default_visualizer (var);
   1333  1.1  christos       else
   1334  1.1  christos 	construct_visualizer (var, var->dynamic->constructor);
   1335  1.1  christos 
   1336  1.1  christos       do_cleanups (cleanup);
   1337  1.1  christos     }
   1338  1.1  christos #else
   1339  1.1  christos   /* Do nothing.  */
   1340  1.1  christos #endif
   1341  1.1  christos }
   1342  1.1  christos 
   1343  1.1  christos /* When using RTTI to determine variable type it may be changed in runtime when
   1344  1.1  christos    the variable value is changed.  This function checks whether type of varobj
   1345  1.1  christos    VAR will change when a new value NEW_VALUE is assigned and if it is so
   1346  1.1  christos    updates the type of VAR.  */
   1347  1.1  christos 
   1348  1.1  christos static int
   1349  1.1  christos update_type_if_necessary (struct varobj *var, struct value *new_value)
   1350  1.1  christos {
   1351  1.1  christos   if (new_value)
   1352  1.1  christos     {
   1353  1.1  christos       struct value_print_options opts;
   1354  1.1  christos 
   1355  1.1  christos       get_user_print_options (&opts);
   1356  1.1  christos       if (opts.objectprint)
   1357  1.1  christos 	{
   1358  1.1  christos 	  struct type *new_type;
   1359  1.1  christos 	  char *curr_type_str, *new_type_str;
   1360  1.1  christos 	  int rv;
   1361  1.1  christos 
   1362  1.1  christos 	  new_type = value_actual_type (new_value, 0, 0);
   1363  1.1  christos 	  new_type_str = type_to_string (new_type);
   1364  1.1  christos 	  curr_type_str = varobj_get_type (var);
   1365  1.1  christos 	  rv = strcmp (curr_type_str, new_type_str) != 0;
   1366  1.1  christos 	  if (rv)
   1367  1.1  christos 	    {
   1368  1.1  christos 	      var->type = new_type;
   1369  1.1  christos 
   1370  1.1  christos 	      /* This information may be not valid for a new type.  */
   1371  1.1  christos 	      varobj_delete (var, NULL, 1);
   1372  1.1  christos 	      VEC_free (varobj_p, var->children);
   1373  1.1  christos 	      var->num_children = -1;
   1374  1.1  christos 	    }
   1375  1.1  christos 	  xfree (new_type_str);
   1376  1.1  christos 	  xfree (curr_type_str);
   1377  1.1  christos 	  return rv;
   1378  1.1  christos 	}
   1379  1.1  christos     }
   1380  1.1  christos 
   1381  1.1  christos   return 0;
   1382  1.1  christos }
   1383  1.1  christos 
   1384  1.1  christos /* Assign a new value to a variable object.  If INITIAL is non-zero,
   1385  1.1  christos    this is the first assignement after the variable object was just
   1386  1.1  christos    created, or changed type.  In that case, just assign the value
   1387  1.1  christos    and return 0.
   1388  1.1  christos    Otherwise, assign the new value, and return 1 if the value is
   1389  1.1  christos    different from the current one, 0 otherwise.  The comparison is
   1390  1.1  christos    done on textual representation of value.  Therefore, some types
   1391  1.1  christos    need not be compared.  E.g.  for structures the reported value is
   1392  1.1  christos    always "{...}", so no comparison is necessary here.  If the old
   1393  1.1  christos    value was NULL and new one is not, or vice versa, we always return 1.
   1394  1.1  christos 
   1395  1.1  christos    The VALUE parameter should not be released -- the function will
   1396  1.1  christos    take care of releasing it when needed.  */
   1397  1.1  christos static int
   1398  1.1  christos install_new_value (struct varobj *var, struct value *value, int initial)
   1399  1.1  christos {
   1400  1.1  christos   int changeable;
   1401  1.1  christos   int need_to_fetch;
   1402  1.1  christos   int changed = 0;
   1403  1.1  christos   int intentionally_not_fetched = 0;
   1404  1.1  christos   char *print_value = NULL;
   1405  1.1  christos 
   1406  1.1  christos   /* We need to know the varobj's type to decide if the value should
   1407  1.1  christos      be fetched or not.  C++ fake children (public/protected/private)
   1408  1.1  christos      don't have a type.  */
   1409  1.1  christos   gdb_assert (var->type || CPLUS_FAKE_CHILD (var));
   1410  1.1  christos   changeable = varobj_value_is_changeable_p (var);
   1411  1.1  christos 
   1412  1.1  christos   /* If the type has custom visualizer, we consider it to be always
   1413  1.1  christos      changeable.  FIXME: need to make sure this behaviour will not
   1414  1.1  christos      mess up read-sensitive values.  */
   1415  1.1  christos   if (var->dynamic->pretty_printer != NULL)
   1416  1.1  christos     changeable = 1;
   1417  1.1  christos 
   1418  1.1  christos   need_to_fetch = changeable;
   1419  1.1  christos 
   1420  1.1  christos   /* We are not interested in the address of references, and given
   1421  1.1  christos      that in C++ a reference is not rebindable, it cannot
   1422  1.1  christos      meaningfully change.  So, get hold of the real value.  */
   1423  1.1  christos   if (value)
   1424  1.1  christos     value = coerce_ref (value);
   1425  1.1  christos 
   1426  1.1  christos   if (var->type && TYPE_CODE (var->type) == TYPE_CODE_UNION)
   1427  1.1  christos     /* For unions, we need to fetch the value implicitly because
   1428  1.1  christos        of implementation of union member fetch.  When gdb
   1429  1.1  christos        creates a value for a field and the value of the enclosing
   1430  1.1  christos        structure is not lazy,  it immediately copies the necessary
   1431  1.1  christos        bytes from the enclosing values.  If the enclosing value is
   1432  1.1  christos        lazy, the call to value_fetch_lazy on the field will read
   1433  1.1  christos        the data from memory.  For unions, that means we'll read the
   1434  1.1  christos        same memory more than once, which is not desirable.  So
   1435  1.1  christos        fetch now.  */
   1436  1.1  christos     need_to_fetch = 1;
   1437  1.1  christos 
   1438  1.1  christos   /* The new value might be lazy.  If the type is changeable,
   1439  1.1  christos      that is we'll be comparing values of this type, fetch the
   1440  1.1  christos      value now.  Otherwise, on the next update the old value
   1441  1.1  christos      will be lazy, which means we've lost that old value.  */
   1442  1.1  christos   if (need_to_fetch && value && value_lazy (value))
   1443  1.1  christos     {
   1444  1.1  christos       struct varobj *parent = var->parent;
   1445  1.1  christos       int frozen = var->frozen;
   1446  1.1  christos 
   1447  1.1  christos       for (; !frozen && parent; parent = parent->parent)
   1448  1.1  christos 	frozen |= parent->frozen;
   1449  1.1  christos 
   1450  1.1  christos       if (frozen && initial)
   1451  1.1  christos 	{
   1452  1.1  christos 	  /* For variables that are frozen, or are children of frozen
   1453  1.1  christos 	     variables, we don't do fetch on initial assignment.
   1454  1.1  christos 	     For non-initial assignemnt we do the fetch, since it means we're
   1455  1.1  christos 	     explicitly asked to compare the new value with the old one.  */
   1456  1.1  christos 	  intentionally_not_fetched = 1;
   1457  1.1  christos 	}
   1458  1.1  christos       else
   1459  1.1  christos 	{
   1460  1.1  christos 	  volatile struct gdb_exception except;
   1461  1.1  christos 
   1462  1.1  christos 	  TRY_CATCH (except, RETURN_MASK_ERROR)
   1463  1.1  christos 	    {
   1464  1.1  christos 	      value_fetch_lazy (value);
   1465  1.1  christos 	    }
   1466  1.1  christos 
   1467  1.1  christos 	  if (except.reason < 0)
   1468  1.1  christos 	    {
   1469  1.1  christos 	      /* Set the value to NULL, so that for the next -var-update,
   1470  1.1  christos 		 we don't try to compare the new value with this value,
   1471  1.1  christos 		 that we couldn't even read.  */
   1472  1.1  christos 	      value = NULL;
   1473  1.1  christos 	    }
   1474  1.1  christos 	}
   1475  1.1  christos     }
   1476  1.1  christos 
   1477  1.1  christos   /* Get a reference now, before possibly passing it to any Python
   1478  1.1  christos      code that might release it.  */
   1479  1.1  christos   if (value != NULL)
   1480  1.1  christos     value_incref (value);
   1481  1.1  christos 
   1482  1.1  christos   /* Below, we'll be comparing string rendering of old and new
   1483  1.1  christos      values.  Don't get string rendering if the value is
   1484  1.1  christos      lazy -- if it is, the code above has decided that the value
   1485  1.1  christos      should not be fetched.  */
   1486  1.1  christos   if (value != NULL && !value_lazy (value)
   1487  1.1  christos       && var->dynamic->pretty_printer == NULL)
   1488  1.1  christos     print_value = varobj_value_get_print_value (value, var->format, var);
   1489  1.1  christos 
   1490  1.1  christos   /* If the type is changeable, compare the old and the new values.
   1491  1.1  christos      If this is the initial assignment, we don't have any old value
   1492  1.1  christos      to compare with.  */
   1493  1.1  christos   if (!initial && changeable)
   1494  1.1  christos     {
   1495  1.1  christos       /* If the value of the varobj was changed by -var-set-value,
   1496  1.1  christos 	 then the value in the varobj and in the target is the same.
   1497  1.1  christos 	 However, that value is different from the value that the
   1498  1.1  christos 	 varobj had after the previous -var-update.  So need to the
   1499  1.1  christos 	 varobj as changed.  */
   1500  1.1  christos       if (var->updated)
   1501  1.1  christos 	{
   1502  1.1  christos 	  changed = 1;
   1503  1.1  christos 	}
   1504  1.1  christos       else if (var->dynamic->pretty_printer == NULL)
   1505  1.1  christos 	{
   1506  1.1  christos 	  /* Try to compare the values.  That requires that both
   1507  1.1  christos 	     values are non-lazy.  */
   1508  1.1  christos 	  if (var->not_fetched && value_lazy (var->value))
   1509  1.1  christos 	    {
   1510  1.1  christos 	      /* This is a frozen varobj and the value was never read.
   1511  1.1  christos 		 Presumably, UI shows some "never read" indicator.
   1512  1.1  christos 		 Now that we've fetched the real value, we need to report
   1513  1.1  christos 		 this varobj as changed so that UI can show the real
   1514  1.1  christos 		 value.  */
   1515  1.1  christos 	      changed = 1;
   1516  1.1  christos 	    }
   1517  1.1  christos           else  if (var->value == NULL && value == NULL)
   1518  1.1  christos 	    /* Equal.  */
   1519  1.1  christos 	    ;
   1520  1.1  christos 	  else if (var->value == NULL || value == NULL)
   1521  1.1  christos 	    {
   1522  1.1  christos 	      changed = 1;
   1523  1.1  christos 	    }
   1524  1.1  christos 	  else
   1525  1.1  christos 	    {
   1526  1.1  christos 	      gdb_assert (!value_lazy (var->value));
   1527  1.1  christos 	      gdb_assert (!value_lazy (value));
   1528  1.1  christos 
   1529  1.1  christos 	      gdb_assert (var->print_value != NULL && print_value != NULL);
   1530  1.1  christos 	      if (strcmp (var->print_value, print_value) != 0)
   1531  1.1  christos 		changed = 1;
   1532  1.1  christos 	    }
   1533  1.1  christos 	}
   1534  1.1  christos     }
   1535  1.1  christos 
   1536  1.1  christos   if (!initial && !changeable)
   1537  1.1  christos     {
   1538  1.1  christos       /* For values that are not changeable, we don't compare the values.
   1539  1.1  christos 	 However, we want to notice if a value was not NULL and now is NULL,
   1540  1.1  christos 	 or vise versa, so that we report when top-level varobjs come in scope
   1541  1.1  christos 	 and leave the scope.  */
   1542  1.1  christos       changed = (var->value != NULL) != (value != NULL);
   1543  1.1  christos     }
   1544  1.1  christos 
   1545  1.1  christos   /* We must always keep the new value, since children depend on it.  */
   1546  1.1  christos   if (var->value != NULL && var->value != value)
   1547  1.1  christos     value_free (var->value);
   1548  1.1  christos   var->value = value;
   1549  1.1  christos   if (value && value_lazy (value) && intentionally_not_fetched)
   1550  1.1  christos     var->not_fetched = 1;
   1551  1.1  christos   else
   1552  1.1  christos     var->not_fetched = 0;
   1553  1.1  christos   var->updated = 0;
   1554  1.1  christos 
   1555  1.1  christos   install_new_value_visualizer (var);
   1556  1.1  christos 
   1557  1.1  christos   /* If we installed a pretty-printer, re-compare the printed version
   1558  1.1  christos      to see if the variable changed.  */
   1559  1.1  christos   if (var->dynamic->pretty_printer != NULL)
   1560  1.1  christos     {
   1561  1.1  christos       xfree (print_value);
   1562  1.1  christos       print_value = varobj_value_get_print_value (var->value, var->format,
   1563  1.1  christos 						  var);
   1564  1.1  christos       if ((var->print_value == NULL && print_value != NULL)
   1565  1.1  christos 	  || (var->print_value != NULL && print_value == NULL)
   1566  1.1  christos 	  || (var->print_value != NULL && print_value != NULL
   1567  1.1  christos 	      && strcmp (var->print_value, print_value) != 0))
   1568  1.1  christos 	changed = 1;
   1569  1.1  christos     }
   1570  1.1  christos   if (var->print_value)
   1571  1.1  christos     xfree (var->print_value);
   1572  1.1  christos   var->print_value = print_value;
   1573  1.1  christos 
   1574  1.1  christos   gdb_assert (!var->value || value_type (var->value));
   1575  1.1  christos 
   1576  1.1  christos   return changed;
   1577  1.1  christos }
   1578  1.1  christos 
   1579  1.1  christos /* Return the requested range for a varobj.  VAR is the varobj.  FROM
   1580  1.1  christos    and TO are out parameters; *FROM and *TO will be set to the
   1581  1.1  christos    selected sub-range of VAR.  If no range was selected using
   1582  1.1  christos    -var-set-update-range, then both will be -1.  */
   1583  1.1  christos void
   1584  1.1  christos varobj_get_child_range (struct varobj *var, int *from, int *to)
   1585  1.1  christos {
   1586  1.1  christos   *from = var->from;
   1587  1.1  christos   *to = var->to;
   1588  1.1  christos }
   1589  1.1  christos 
   1590  1.1  christos /* Set the selected sub-range of children of VAR to start at index
   1591  1.1  christos    FROM and end at index TO.  If either FROM or TO is less than zero,
   1592  1.1  christos    this is interpreted as a request for all children.  */
   1593  1.1  christos void
   1594  1.1  christos varobj_set_child_range (struct varobj *var, int from, int to)
   1595  1.1  christos {
   1596  1.1  christos   var->from = from;
   1597  1.1  christos   var->to = to;
   1598  1.1  christos }
   1599  1.1  christos 
   1600  1.1  christos void
   1601  1.1  christos varobj_set_visualizer (struct varobj *var, const char *visualizer)
   1602  1.1  christos {
   1603  1.1  christos #if HAVE_PYTHON
   1604  1.1  christos   PyObject *mainmod, *globals, *constructor;
   1605  1.1  christos   struct cleanup *back_to;
   1606  1.1  christos 
   1607  1.1  christos   if (!gdb_python_initialized)
   1608  1.1  christos     return;
   1609  1.1  christos 
   1610  1.1  christos   back_to = varobj_ensure_python_env (var);
   1611  1.1  christos 
   1612  1.1  christos   mainmod = PyImport_AddModule ("__main__");
   1613  1.1  christos   globals = PyModule_GetDict (mainmod);
   1614  1.1  christos   Py_INCREF (globals);
   1615  1.1  christos   make_cleanup_py_decref (globals);
   1616  1.1  christos 
   1617  1.1  christos   constructor = PyRun_String (visualizer, Py_eval_input, globals, globals);
   1618  1.1  christos 
   1619  1.1  christos   if (! constructor)
   1620  1.1  christos     {
   1621  1.1  christos       gdbpy_print_stack ();
   1622  1.1  christos       error (_("Could not evaluate visualizer expression: %s"), visualizer);
   1623  1.1  christos     }
   1624  1.1  christos 
   1625  1.1  christos   construct_visualizer (var, constructor);
   1626  1.1  christos   Py_XDECREF (constructor);
   1627  1.1  christos 
   1628  1.1  christos   /* If there are any children now, wipe them.  */
   1629  1.1  christos   varobj_delete (var, NULL, 1 /* children only */);
   1630  1.1  christos   var->num_children = -1;
   1631  1.1  christos 
   1632  1.1  christos   do_cleanups (back_to);
   1633  1.1  christos #else
   1634  1.1  christos   error (_("Python support required"));
   1635  1.1  christos #endif
   1636  1.1  christos }
   1637  1.1  christos 
   1638  1.1  christos /* If NEW_VALUE is the new value of the given varobj (var), return
   1639  1.1  christos    non-zero if var has mutated.  In other words, if the type of
   1640  1.1  christos    the new value is different from the type of the varobj's old
   1641  1.1  christos    value.
   1642  1.1  christos 
   1643  1.1  christos    NEW_VALUE may be NULL, if the varobj is now out of scope.  */
   1644  1.1  christos 
   1645  1.1  christos static int
   1646  1.1  christos varobj_value_has_mutated (struct varobj *var, struct value *new_value,
   1647  1.1  christos 			  struct type *new_type)
   1648  1.1  christos {
   1649  1.1  christos   /* If we haven't previously computed the number of children in var,
   1650  1.1  christos      it does not matter from the front-end's perspective whether
   1651  1.1  christos      the type has mutated or not.  For all intents and purposes,
   1652  1.1  christos      it has not mutated.  */
   1653  1.1  christos   if (var->num_children < 0)
   1654  1.1  christos     return 0;
   1655  1.1  christos 
   1656  1.1  christos   if (var->root->lang_ops->value_has_mutated)
   1657  1.1  christos     return var->root->lang_ops->value_has_mutated (var, new_value, new_type);
   1658  1.1  christos   else
   1659  1.1  christos     return 0;
   1660  1.1  christos }
   1661  1.1  christos 
   1662  1.1  christos /* Update the values for a variable and its children.  This is a
   1663  1.1  christos    two-pronged attack.  First, re-parse the value for the root's
   1664  1.1  christos    expression to see if it's changed.  Then go all the way
   1665  1.1  christos    through its children, reconstructing them and noting if they've
   1666  1.1  christos    changed.
   1667  1.1  christos 
   1668  1.1  christos    The EXPLICIT parameter specifies if this call is result
   1669  1.1  christos    of MI request to update this specific variable, or
   1670  1.1  christos    result of implicit -var-update *.  For implicit request, we don't
   1671  1.1  christos    update frozen variables.
   1672  1.1  christos 
   1673  1.1  christos    NOTE: This function may delete the caller's varobj.  If it
   1674  1.1  christos    returns TYPE_CHANGED, then it has done this and VARP will be modified
   1675  1.1  christos    to point to the new varobj.  */
   1676  1.1  christos 
   1677  1.1  christos VEC(varobj_update_result) *
   1678  1.1  christos varobj_update (struct varobj **varp, int explicit)
   1679  1.1  christos {
   1680  1.1  christos   int type_changed = 0;
   1681  1.1  christos   int i;
   1682  1.1  christos   struct value *new;
   1683  1.1  christos   VEC (varobj_update_result) *stack = NULL;
   1684  1.1  christos   VEC (varobj_update_result) *result = NULL;
   1685  1.1  christos 
   1686  1.1  christos   /* Frozen means frozen -- we don't check for any change in
   1687  1.1  christos      this varobj, including its going out of scope, or
   1688  1.1  christos      changing type.  One use case for frozen varobjs is
   1689  1.1  christos      retaining previously evaluated expressions, and we don't
   1690  1.1  christos      want them to be reevaluated at all.  */
   1691  1.1  christos   if (!explicit && (*varp)->frozen)
   1692  1.1  christos     return result;
   1693  1.1  christos 
   1694  1.1  christos   if (!(*varp)->root->is_valid)
   1695  1.1  christos     {
   1696  1.1  christos       varobj_update_result r = {0};
   1697  1.1  christos 
   1698  1.1  christos       r.varobj = *varp;
   1699  1.1  christos       r.status = VAROBJ_INVALID;
   1700  1.1  christos       VEC_safe_push (varobj_update_result, result, &r);
   1701  1.1  christos       return result;
   1702  1.1  christos     }
   1703  1.1  christos 
   1704  1.1  christos   if ((*varp)->root->rootvar == *varp)
   1705  1.1  christos     {
   1706  1.1  christos       varobj_update_result r = {0};
   1707  1.1  christos 
   1708  1.1  christos       r.varobj = *varp;
   1709  1.1  christos       r.status = VAROBJ_IN_SCOPE;
   1710  1.1  christos 
   1711  1.1  christos       /* Update the root variable.  value_of_root can return NULL
   1712  1.1  christos 	 if the variable is no longer around, i.e. we stepped out of
   1713  1.1  christos 	 the frame in which a local existed.  We are letting the
   1714  1.1  christos 	 value_of_root variable dispose of the varobj if the type
   1715  1.1  christos 	 has changed.  */
   1716  1.1  christos       new = value_of_root (varp, &type_changed);
   1717  1.1  christos       if (update_type_if_necessary(*varp, new))
   1718  1.1  christos 	  type_changed = 1;
   1719  1.1  christos       r.varobj = *varp;
   1720  1.1  christos       r.type_changed = type_changed;
   1721  1.1  christos       if (install_new_value ((*varp), new, type_changed))
   1722  1.1  christos 	r.changed = 1;
   1723  1.1  christos 
   1724  1.1  christos       if (new == NULL)
   1725  1.1  christos 	r.status = VAROBJ_NOT_IN_SCOPE;
   1726  1.1  christos       r.value_installed = 1;
   1727  1.1  christos 
   1728  1.1  christos       if (r.status == VAROBJ_NOT_IN_SCOPE)
   1729  1.1  christos 	{
   1730  1.1  christos 	  if (r.type_changed || r.changed)
   1731  1.1  christos 	    VEC_safe_push (varobj_update_result, result, &r);
   1732  1.1  christos 	  return result;
   1733  1.1  christos 	}
   1734  1.1  christos 
   1735  1.1  christos       VEC_safe_push (varobj_update_result, stack, &r);
   1736  1.1  christos     }
   1737  1.1  christos   else
   1738  1.1  christos     {
   1739  1.1  christos       varobj_update_result r = {0};
   1740  1.1  christos 
   1741  1.1  christos       r.varobj = *varp;
   1742  1.1  christos       VEC_safe_push (varobj_update_result, stack, &r);
   1743  1.1  christos     }
   1744  1.1  christos 
   1745  1.1  christos   /* Walk through the children, reconstructing them all.  */
   1746  1.1  christos   while (!VEC_empty (varobj_update_result, stack))
   1747  1.1  christos     {
   1748  1.1  christos       varobj_update_result r = *(VEC_last (varobj_update_result, stack));
   1749  1.1  christos       struct varobj *v = r.varobj;
   1750  1.1  christos 
   1751  1.1  christos       VEC_pop (varobj_update_result, stack);
   1752  1.1  christos 
   1753  1.1  christos       /* Update this variable, unless it's a root, which is already
   1754  1.1  christos 	 updated.  */
   1755  1.1  christos       if (!r.value_installed)
   1756  1.1  christos 	{
   1757  1.1  christos 	  struct type *new_type;
   1758  1.1  christos 
   1759  1.1  christos 	  new = value_of_child (v->parent, v->index);
   1760  1.1  christos 	  if (update_type_if_necessary(v, new))
   1761  1.1  christos 	    r.type_changed = 1;
   1762  1.1  christos 	  if (new)
   1763  1.1  christos 	    new_type = value_type (new);
   1764  1.1  christos 	  else
   1765  1.1  christos 	    new_type = v->root->lang_ops->type_of_child (v->parent, v->index);
   1766  1.1  christos 
   1767  1.1  christos 	  if (varobj_value_has_mutated (v, new, new_type))
   1768  1.1  christos 	    {
   1769  1.1  christos 	      /* The children are no longer valid; delete them now.
   1770  1.1  christos 	         Report the fact that its type changed as well.  */
   1771  1.1  christos 	      varobj_delete (v, NULL, 1 /* only_children */);
   1772  1.1  christos 	      v->num_children = -1;
   1773  1.1  christos 	      v->to = -1;
   1774  1.1  christos 	      v->from = -1;
   1775  1.1  christos 	      v->type = new_type;
   1776  1.1  christos 	      r.type_changed = 1;
   1777  1.1  christos 	    }
   1778  1.1  christos 
   1779  1.1  christos 	  if (install_new_value (v, new, r.type_changed))
   1780  1.1  christos 	    {
   1781  1.1  christos 	      r.changed = 1;
   1782  1.1  christos 	      v->updated = 0;
   1783  1.1  christos 	    }
   1784  1.1  christos 	}
   1785  1.1  christos 
   1786  1.1  christos       /* We probably should not get children of a varobj that has a
   1787  1.1  christos 	 pretty-printer, but for which -var-list-children was never
   1788  1.1  christos 	 invoked.  */
   1789  1.1  christos       if (v->dynamic->pretty_printer != NULL)
   1790  1.1  christos 	{
   1791  1.1  christos 	  VEC (varobj_p) *changed = 0, *type_changed = 0, *unchanged = 0;
   1792  1.1  christos 	  VEC (varobj_p) *new = 0;
   1793  1.1  christos 	  int i, children_changed = 0;
   1794  1.1  christos 
   1795  1.1  christos 	  if (v->frozen)
   1796  1.1  christos 	    continue;
   1797  1.1  christos 
   1798  1.1  christos 	  if (!v->dynamic->children_requested)
   1799  1.1  christos 	    {
   1800  1.1  christos 	      int dummy;
   1801  1.1  christos 
   1802  1.1  christos 	      /* If we initially did not have potential children, but
   1803  1.1  christos 		 now we do, consider the varobj as changed.
   1804  1.1  christos 		 Otherwise, if children were never requested, consider
   1805  1.1  christos 		 it as unchanged -- presumably, such varobj is not yet
   1806  1.1  christos 		 expanded in the UI, so we need not bother getting
   1807  1.1  christos 		 it.  */
   1808  1.1  christos 	      if (!varobj_has_more (v, 0))
   1809  1.1  christos 		{
   1810  1.1  christos 		  update_dynamic_varobj_children (v, NULL, NULL, NULL, NULL,
   1811  1.1  christos 						  &dummy, 0, 0, 0);
   1812  1.1  christos 		  if (varobj_has_more (v, 0))
   1813  1.1  christos 		    r.changed = 1;
   1814  1.1  christos 		}
   1815  1.1  christos 
   1816  1.1  christos 	      if (r.changed)
   1817  1.1  christos 		VEC_safe_push (varobj_update_result, result, &r);
   1818  1.1  christos 
   1819  1.1  christos 	      continue;
   1820  1.1  christos 	    }
   1821  1.1  christos 
   1822  1.1  christos 	  /* If update_dynamic_varobj_children returns 0, then we have
   1823  1.1  christos 	     a non-conforming pretty-printer, so we skip it.  */
   1824  1.1  christos 	  if (update_dynamic_varobj_children (v, &changed, &type_changed, &new,
   1825  1.1  christos 					      &unchanged, &children_changed, 1,
   1826  1.1  christos 					      v->from, v->to))
   1827  1.1  christos 	    {
   1828  1.1  christos 	      if (children_changed || new)
   1829  1.1  christos 		{
   1830  1.1  christos 		  r.children_changed = 1;
   1831  1.1  christos 		  r.new = new;
   1832  1.1  christos 		}
   1833  1.1  christos 	      /* Push in reverse order so that the first child is
   1834  1.1  christos 		 popped from the work stack first, and so will be
   1835  1.1  christos 		 added to result first.  This does not affect
   1836  1.1  christos 		 correctness, just "nicer".  */
   1837  1.1  christos 	      for (i = VEC_length (varobj_p, type_changed) - 1; i >= 0; --i)
   1838  1.1  christos 		{
   1839  1.1  christos 		  varobj_p tmp = VEC_index (varobj_p, type_changed, i);
   1840  1.1  christos 		  varobj_update_result r = {0};
   1841  1.1  christos 
   1842  1.1  christos 		  /* Type may change only if value was changed.  */
   1843  1.1  christos 		  r.varobj = tmp;
   1844  1.1  christos 		  r.changed = 1;
   1845  1.1  christos 		  r.type_changed = 1;
   1846  1.1  christos 		  r.value_installed = 1;
   1847  1.1  christos 		  VEC_safe_push (varobj_update_result, stack, &r);
   1848  1.1  christos 		}
   1849  1.1  christos 	      for (i = VEC_length (varobj_p, changed) - 1; i >= 0; --i)
   1850  1.1  christos 		{
   1851  1.1  christos 		  varobj_p tmp = VEC_index (varobj_p, changed, i);
   1852  1.1  christos 		  varobj_update_result r = {0};
   1853  1.1  christos 
   1854  1.1  christos 		  r.varobj = tmp;
   1855  1.1  christos 		  r.changed = 1;
   1856  1.1  christos 		  r.value_installed = 1;
   1857  1.1  christos 		  VEC_safe_push (varobj_update_result, stack, &r);
   1858  1.1  christos 		}
   1859  1.1  christos 	      for (i = VEC_length (varobj_p, unchanged) - 1; i >= 0; --i)
   1860  1.1  christos 	      	{
   1861  1.1  christos 		  varobj_p tmp = VEC_index (varobj_p, unchanged, i);
   1862  1.1  christos 
   1863  1.1  christos 	      	  if (!tmp->frozen)
   1864  1.1  christos 	      	    {
   1865  1.1  christos 	      	      varobj_update_result r = {0};
   1866  1.1  christos 
   1867  1.1  christos 		      r.varobj = tmp;
   1868  1.1  christos 	      	      r.value_installed = 1;
   1869  1.1  christos 	      	      VEC_safe_push (varobj_update_result, stack, &r);
   1870  1.1  christos 	      	    }
   1871  1.1  christos 	      	}
   1872  1.1  christos 	      if (r.changed || r.children_changed)
   1873  1.1  christos 		VEC_safe_push (varobj_update_result, result, &r);
   1874  1.1  christos 
   1875  1.1  christos 	      /* Free CHANGED, TYPE_CHANGED and UNCHANGED, but not NEW,
   1876  1.1  christos 		 because NEW has been put into the result vector.  */
   1877  1.1  christos 	      VEC_free (varobj_p, changed);
   1878  1.1  christos 	      VEC_free (varobj_p, type_changed);
   1879  1.1  christos 	      VEC_free (varobj_p, unchanged);
   1880  1.1  christos 
   1881  1.1  christos 	      continue;
   1882  1.1  christos 	    }
   1883  1.1  christos 	}
   1884  1.1  christos 
   1885  1.1  christos       /* Push any children.  Use reverse order so that the first
   1886  1.1  christos 	 child is popped from the work stack first, and so
   1887  1.1  christos 	 will be added to result first.  This does not
   1888  1.1  christos 	 affect correctness, just "nicer".  */
   1889  1.1  christos       for (i = VEC_length (varobj_p, v->children)-1; i >= 0; --i)
   1890  1.1  christos 	{
   1891  1.1  christos 	  varobj_p c = VEC_index (varobj_p, v->children, i);
   1892  1.1  christos 
   1893  1.1  christos 	  /* Child may be NULL if explicitly deleted by -var-delete.  */
   1894  1.1  christos 	  if (c != NULL && !c->frozen)
   1895  1.1  christos 	    {
   1896  1.1  christos 	      varobj_update_result r = {0};
   1897  1.1  christos 
   1898  1.1  christos 	      r.varobj = c;
   1899  1.1  christos 	      VEC_safe_push (varobj_update_result, stack, &r);
   1900  1.1  christos 	    }
   1901  1.1  christos 	}
   1902  1.1  christos 
   1903  1.1  christos       if (r.changed || r.type_changed)
   1904  1.1  christos 	VEC_safe_push (varobj_update_result, result, &r);
   1905  1.1  christos     }
   1906  1.1  christos 
   1907  1.1  christos   VEC_free (varobj_update_result, stack);
   1908  1.1  christos 
   1909  1.1  christos   return result;
   1910  1.1  christos }
   1911  1.1  christos 
   1912  1.1  christos 
   1914  1.1  christos /* Helper functions */
   1915  1.1  christos 
   1916  1.1  christos /*
   1917  1.1  christos  * Variable object construction/destruction
   1918  1.1  christos  */
   1919  1.1  christos 
   1920  1.1  christos static int
   1921  1.1  christos delete_variable (struct cpstack **resultp, struct varobj *var,
   1922  1.1  christos 		 int only_children_p)
   1923  1.1  christos {
   1924  1.1  christos   int delcount = 0;
   1925  1.1  christos 
   1926  1.1  christos   delete_variable_1 (resultp, &delcount, var,
   1927  1.1  christos 		     only_children_p, 1 /* remove_from_parent_p */ );
   1928  1.1  christos 
   1929  1.1  christos   return delcount;
   1930  1.1  christos }
   1931  1.1  christos 
   1932  1.1  christos /* Delete the variable object VAR and its children.  */
   1933  1.1  christos /* IMPORTANT NOTE: If we delete a variable which is a child
   1934  1.1  christos    and the parent is not removed we dump core.  It must be always
   1935  1.1  christos    initially called with remove_from_parent_p set.  */
   1936  1.1  christos static void
   1937  1.1  christos delete_variable_1 (struct cpstack **resultp, int *delcountp,
   1938  1.1  christos 		   struct varobj *var, int only_children_p,
   1939  1.1  christos 		   int remove_from_parent_p)
   1940  1.1  christos {
   1941  1.1  christos   int i;
   1942  1.1  christos 
   1943  1.1  christos   /* Delete any children of this variable, too.  */
   1944  1.1  christos   for (i = 0; i < VEC_length (varobj_p, var->children); ++i)
   1945  1.1  christos     {
   1946  1.1  christos       varobj_p child = VEC_index (varobj_p, var->children, i);
   1947  1.1  christos 
   1948  1.1  christos       if (!child)
   1949  1.1  christos 	continue;
   1950  1.1  christos       if (!remove_from_parent_p)
   1951  1.1  christos 	child->parent = NULL;
   1952  1.1  christos       delete_variable_1 (resultp, delcountp, child, 0, only_children_p);
   1953  1.1  christos     }
   1954  1.1  christos   VEC_free (varobj_p, var->children);
   1955  1.1  christos 
   1956  1.1  christos   /* if we were called to delete only the children we are done here.  */
   1957  1.1  christos   if (only_children_p)
   1958  1.1  christos     return;
   1959  1.1  christos 
   1960  1.1  christos   /* Otherwise, add it to the list of deleted ones and proceed to do so.  */
   1961  1.1  christos   /* If the name is null, this is a temporary variable, that has not
   1962  1.1  christos      yet been installed, don't report it, it belongs to the caller...  */
   1963  1.1  christos   if (var->obj_name != NULL)
   1964  1.1  christos     {
   1965  1.1  christos       cppush (resultp, xstrdup (var->obj_name));
   1966  1.1  christos       *delcountp = *delcountp + 1;
   1967  1.1  christos     }
   1968  1.1  christos 
   1969  1.1  christos   /* If this variable has a parent, remove it from its parent's list.  */
   1970  1.1  christos   /* OPTIMIZATION: if the parent of this variable is also being deleted,
   1971  1.1  christos      (as indicated by remove_from_parent_p) we don't bother doing an
   1972  1.1  christos      expensive list search to find the element to remove when we are
   1973  1.1  christos      discarding the list afterwards.  */
   1974  1.1  christos   if ((remove_from_parent_p) && (var->parent != NULL))
   1975  1.1  christos     {
   1976  1.1  christos       VEC_replace (varobj_p, var->parent->children, var->index, NULL);
   1977  1.1  christos     }
   1978  1.1  christos 
   1979  1.1  christos   if (var->obj_name != NULL)
   1980  1.1  christos     uninstall_variable (var);
   1981  1.1  christos 
   1982  1.1  christos   /* Free memory associated with this variable.  */
   1983  1.1  christos   free_variable (var);
   1984  1.1  christos }
   1985  1.1  christos 
   1986  1.1  christos /* Install the given variable VAR with the object name VAR->OBJ_NAME.  */
   1987  1.1  christos static int
   1988  1.1  christos install_variable (struct varobj *var)
   1989  1.1  christos {
   1990  1.1  christos   struct vlist *cv;
   1991  1.1  christos   struct vlist *newvl;
   1992  1.1  christos   const char *chp;
   1993  1.1  christos   unsigned int index = 0;
   1994  1.1  christos   unsigned int i = 1;
   1995  1.1  christos 
   1996  1.1  christos   for (chp = var->obj_name; *chp; chp++)
   1997  1.1  christos     {
   1998  1.1  christos       index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
   1999  1.1  christos     }
   2000  1.1  christos 
   2001  1.1  christos   cv = *(varobj_table + index);
   2002  1.1  christos   while ((cv != NULL) && (strcmp (cv->var->obj_name, var->obj_name) != 0))
   2003  1.1  christos     cv = cv->next;
   2004  1.1  christos 
   2005  1.1  christos   if (cv != NULL)
   2006  1.1  christos     error (_("Duplicate variable object name"));
   2007  1.1  christos 
   2008  1.1  christos   /* Add varobj to hash table.  */
   2009  1.1  christos   newvl = xmalloc (sizeof (struct vlist));
   2010  1.1  christos   newvl->next = *(varobj_table + index);
   2011  1.1  christos   newvl->var = var;
   2012  1.1  christos   *(varobj_table + index) = newvl;
   2013  1.1  christos 
   2014  1.1  christos   /* If root, add varobj to root list.  */
   2015  1.1  christos   if (is_root_p (var))
   2016  1.1  christos     {
   2017  1.1  christos       /* Add to list of root variables.  */
   2018  1.1  christos       if (rootlist == NULL)
   2019  1.1  christos 	var->root->next = NULL;
   2020  1.1  christos       else
   2021  1.1  christos 	var->root->next = rootlist;
   2022  1.1  christos       rootlist = var->root;
   2023  1.1  christos     }
   2024  1.1  christos 
   2025  1.1  christos   return 1;			/* OK */
   2026  1.1  christos }
   2027  1.1  christos 
   2028  1.1  christos /* Unistall the object VAR.  */
   2029  1.1  christos static void
   2030  1.1  christos uninstall_variable (struct varobj *var)
   2031  1.1  christos {
   2032  1.1  christos   struct vlist *cv;
   2033  1.1  christos   struct vlist *prev;
   2034  1.1  christos   struct varobj_root *cr;
   2035  1.1  christos   struct varobj_root *prer;
   2036  1.1  christos   const char *chp;
   2037  1.1  christos   unsigned int index = 0;
   2038  1.1  christos   unsigned int i = 1;
   2039  1.1  christos 
   2040  1.1  christos   /* Remove varobj from hash table.  */
   2041  1.1  christos   for (chp = var->obj_name; *chp; chp++)
   2042  1.1  christos     {
   2043  1.1  christos       index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
   2044  1.1  christos     }
   2045  1.1  christos 
   2046  1.1  christos   cv = *(varobj_table + index);
   2047  1.1  christos   prev = NULL;
   2048  1.1  christos   while ((cv != NULL) && (strcmp (cv->var->obj_name, var->obj_name) != 0))
   2049  1.1  christos     {
   2050  1.1  christos       prev = cv;
   2051  1.1  christos       cv = cv->next;
   2052  1.1  christos     }
   2053  1.1  christos 
   2054  1.1  christos   if (varobjdebug)
   2055  1.1  christos     fprintf_unfiltered (gdb_stdlog, "Deleting %s\n", var->obj_name);
   2056  1.1  christos 
   2057  1.1  christos   if (cv == NULL)
   2058  1.1  christos     {
   2059  1.1  christos       warning
   2060  1.1  christos 	("Assertion failed: Could not find variable object \"%s\" to delete",
   2061  1.1  christos 	 var->obj_name);
   2062  1.1  christos       return;
   2063  1.1  christos     }
   2064  1.1  christos 
   2065  1.1  christos   if (prev == NULL)
   2066  1.1  christos     *(varobj_table + index) = cv->next;
   2067  1.1  christos   else
   2068  1.1  christos     prev->next = cv->next;
   2069  1.1  christos 
   2070  1.1  christos   xfree (cv);
   2071  1.1  christos 
   2072  1.1  christos   /* If root, remove varobj from root list.  */
   2073  1.1  christos   if (is_root_p (var))
   2074  1.1  christos     {
   2075  1.1  christos       /* Remove from list of root variables.  */
   2076  1.1  christos       if (rootlist == var->root)
   2077  1.1  christos 	rootlist = var->root->next;
   2078  1.1  christos       else
   2079  1.1  christos 	{
   2080  1.1  christos 	  prer = NULL;
   2081  1.1  christos 	  cr = rootlist;
   2082  1.1  christos 	  while ((cr != NULL) && (cr->rootvar != var))
   2083  1.1  christos 	    {
   2084  1.1  christos 	      prer = cr;
   2085  1.1  christos 	      cr = cr->next;
   2086  1.1  christos 	    }
   2087  1.1  christos 	  if (cr == NULL)
   2088  1.1  christos 	    {
   2089  1.1  christos 	      warning (_("Assertion failed: Could not find "
   2090  1.1  christos 		         "varobj \"%s\" in root list"),
   2091  1.1  christos 		       var->obj_name);
   2092  1.1  christos 	      return;
   2093  1.1  christos 	    }
   2094  1.1  christos 	  if (prer == NULL)
   2095  1.1  christos 	    rootlist = NULL;
   2096  1.1  christos 	  else
   2097  1.1  christos 	    prer->next = cr->next;
   2098  1.1  christos 	}
   2099  1.1  christos     }
   2100  1.1  christos 
   2101  1.1  christos }
   2102  1.1  christos 
   2103  1.1  christos /* Create and install a child of the parent of the given name.  */
   2104  1.1  christos static struct varobj *
   2105  1.1  christos create_child (struct varobj *parent, int index, char *name)
   2106  1.1  christos {
   2107  1.1  christos   return create_child_with_value (parent, index, name,
   2108  1.1  christos 				  value_of_child (parent, index));
   2109  1.1  christos }
   2110  1.1  christos 
   2111  1.1  christos static struct varobj *
   2112  1.1  christos create_child_with_value (struct varobj *parent, int index, char *name,
   2113  1.1  christos 			 struct value *value)
   2114  1.1  christos {
   2115  1.1  christos   struct varobj *child;
   2116  1.1  christos   char *childs_name;
   2117  1.1  christos 
   2118  1.1  christos   child = new_variable ();
   2119  1.1  christos 
   2120  1.1  christos   /* NAME is allocated by caller.  */
   2121  1.1  christos   child->name = name;
   2122  1.1  christos   child->index = index;
   2123  1.1  christos   child->parent = parent;
   2124  1.1  christos   child->root = parent->root;
   2125  1.1  christos 
   2126  1.1  christos   if (varobj_is_anonymous_child (child))
   2127  1.1  christos     childs_name = xstrprintf ("%s.%d_anonymous", parent->obj_name, index);
   2128  1.1  christos   else
   2129  1.1  christos     childs_name = xstrprintf ("%s.%s", parent->obj_name, name);
   2130  1.1  christos   child->obj_name = childs_name;
   2131  1.1  christos 
   2132  1.1  christos   install_variable (child);
   2133  1.1  christos 
   2134  1.1  christos   /* Compute the type of the child.  Must do this before
   2135  1.1  christos      calling install_new_value.  */
   2136  1.1  christos   if (value != NULL)
   2137  1.1  christos     /* If the child had no evaluation errors, var->value
   2138  1.1  christos        will be non-NULL and contain a valid type.  */
   2139  1.1  christos     child->type = value_actual_type (value, 0, NULL);
   2140  1.1  christos   else
   2141  1.1  christos     /* Otherwise, we must compute the type.  */
   2142  1.1  christos     child->type = (*child->root->lang_ops->type_of_child) (child->parent,
   2143  1.1  christos 							   child->index);
   2144  1.1  christos   install_new_value (child, value, 1);
   2145  1.1  christos 
   2146  1.1  christos   return child;
   2147  1.1  christos }
   2148  1.1  christos 
   2149  1.1  christos 
   2151  1.1  christos /*
   2152  1.1  christos  * Miscellaneous utility functions.
   2153  1.1  christos  */
   2154  1.1  christos 
   2155  1.1  christos /* Allocate memory and initialize a new variable.  */
   2156  1.1  christos static struct varobj *
   2157  1.1  christos new_variable (void)
   2158  1.1  christos {
   2159  1.1  christos   struct varobj *var;
   2160  1.1  christos 
   2161  1.1  christos   var = (struct varobj *) xmalloc (sizeof (struct varobj));
   2162  1.1  christos   var->name = NULL;
   2163  1.1  christos   var->path_expr = NULL;
   2164  1.1  christos   var->obj_name = NULL;
   2165  1.1  christos   var->index = -1;
   2166  1.1  christos   var->type = NULL;
   2167  1.1  christos   var->value = NULL;
   2168  1.1  christos   var->num_children = -1;
   2169  1.1  christos   var->parent = NULL;
   2170  1.1  christos   var->children = NULL;
   2171  1.1  christos   var->format = 0;
   2172  1.1  christos   var->root = NULL;
   2173  1.1  christos   var->updated = 0;
   2174  1.1  christos   var->print_value = NULL;
   2175  1.1  christos   var->frozen = 0;
   2176  1.1  christos   var->not_fetched = 0;
   2177  1.1  christos   var->dynamic
   2178  1.1  christos     = (struct varobj_dynamic *) xmalloc (sizeof (struct varobj_dynamic));
   2179  1.1  christos   var->dynamic->children_requested = 0;
   2180  1.1  christos   var->from = -1;
   2181  1.1  christos   var->to = -1;
   2182  1.1  christos   var->dynamic->constructor = 0;
   2183  1.1  christos   var->dynamic->pretty_printer = 0;
   2184  1.1  christos   var->dynamic->child_iter = 0;
   2185  1.1  christos   var->dynamic->saved_item = 0;
   2186  1.1  christos 
   2187  1.1  christos   return var;
   2188  1.1  christos }
   2189  1.1  christos 
   2190  1.1  christos /* Allocate memory and initialize a new root variable.  */
   2191  1.1  christos static struct varobj *
   2192  1.1  christos new_root_variable (void)
   2193  1.1  christos {
   2194  1.1  christos   struct varobj *var = new_variable ();
   2195  1.1  christos 
   2196  1.1  christos   var->root = (struct varobj_root *) xmalloc (sizeof (struct varobj_root));
   2197  1.1  christos   var->root->lang_ops = NULL;
   2198  1.1  christos   var->root->exp = NULL;
   2199  1.1  christos   var->root->valid_block = NULL;
   2200  1.1  christos   var->root->frame = null_frame_id;
   2201  1.1  christos   var->root->floating = 0;
   2202  1.1  christos   var->root->rootvar = NULL;
   2203  1.1  christos   var->root->is_valid = 1;
   2204  1.1  christos 
   2205  1.1  christos   return var;
   2206  1.1  christos }
   2207  1.1  christos 
   2208  1.1  christos /* Free any allocated memory associated with VAR.  */
   2209  1.1  christos static void
   2210  1.1  christos free_variable (struct varobj *var)
   2211  1.1  christos {
   2212  1.1  christos #if HAVE_PYTHON
   2213  1.1  christos   if (var->dynamic->pretty_printer != NULL)
   2214  1.1  christos     {
   2215  1.1  christos       struct cleanup *cleanup = varobj_ensure_python_env (var);
   2216  1.1  christos 
   2217  1.1  christos       Py_XDECREF (var->dynamic->constructor);
   2218  1.1  christos       Py_XDECREF (var->dynamic->pretty_printer);
   2219  1.1  christos       Py_XDECREF (var->dynamic->child_iter);
   2220  1.1  christos       Py_XDECREF (var->dynamic->saved_item);
   2221  1.1  christos       do_cleanups (cleanup);
   2222  1.1  christos     }
   2223  1.1  christos #endif
   2224  1.1  christos 
   2225  1.1  christos   value_free (var->value);
   2226  1.1  christos 
   2227  1.1  christos   /* Free the expression if this is a root variable.  */
   2228  1.1  christos   if (is_root_p (var))
   2229  1.1  christos     {
   2230  1.1  christos       xfree (var->root->exp);
   2231  1.1  christos       xfree (var->root);
   2232  1.1  christos     }
   2233  1.1  christos 
   2234  1.1  christos   xfree (var->name);
   2235  1.1  christos   xfree (var->obj_name);
   2236  1.1  christos   xfree (var->print_value);
   2237  1.1  christos   xfree (var->path_expr);
   2238  1.1  christos   xfree (var->dynamic);
   2239  1.1  christos   xfree (var);
   2240  1.1  christos }
   2241  1.1  christos 
   2242  1.1  christos static void
   2243  1.1  christos do_free_variable_cleanup (void *var)
   2244  1.1  christos {
   2245  1.1  christos   free_variable (var);
   2246  1.1  christos }
   2247  1.1  christos 
   2248  1.1  christos static struct cleanup *
   2249  1.1  christos make_cleanup_free_variable (struct varobj *var)
   2250  1.1  christos {
   2251  1.1  christos   return make_cleanup (do_free_variable_cleanup, var);
   2252  1.1  christos }
   2253  1.1  christos 
   2254  1.1  christos /* Return the type of the value that's stored in VAR,
   2255  1.1  christos    or that would have being stored there if the
   2256  1.1  christos    value were accessible.
   2257  1.1  christos 
   2258  1.1  christos    This differs from VAR->type in that VAR->type is always
   2259  1.1  christos    the true type of the expession in the source language.
   2260  1.1  christos    The return value of this function is the type we're
   2261  1.1  christos    actually storing in varobj, and using for displaying
   2262  1.1  christos    the values and for comparing previous and new values.
   2263  1.1  christos 
   2264  1.1  christos    For example, top-level references are always stripped.  */
   2265  1.1  christos struct type *
   2266  1.1  christos varobj_get_value_type (struct varobj *var)
   2267  1.1  christos {
   2268  1.1  christos   struct type *type;
   2269  1.1  christos 
   2270  1.1  christos   if (var->value)
   2271  1.1  christos     type = value_type (var->value);
   2272  1.1  christos   else
   2273  1.1  christos     type = var->type;
   2274  1.1  christos 
   2275  1.1  christos   type = check_typedef (type);
   2276  1.1  christos 
   2277  1.1  christos   if (TYPE_CODE (type) == TYPE_CODE_REF)
   2278  1.1  christos     type = get_target_type (type);
   2279  1.1  christos 
   2280  1.1  christos   type = check_typedef (type);
   2281  1.1  christos 
   2282  1.1  christos   return type;
   2283  1.1  christos }
   2284  1.1  christos 
   2285  1.1  christos /* What is the default display for this variable? We assume that
   2286  1.1  christos    everything is "natural".  Any exceptions?  */
   2287  1.1  christos static enum varobj_display_formats
   2288  1.1  christos variable_default_display (struct varobj *var)
   2289  1.1  christos {
   2290  1.1  christos   return FORMAT_NATURAL;
   2291  1.1  christos }
   2292  1.1  christos 
   2293  1.1  christos /* FIXME: The following should be generic for any pointer.  */
   2294  1.1  christos static void
   2295  1.1  christos cppush (struct cpstack **pstack, char *name)
   2296  1.1  christos {
   2297  1.1  christos   struct cpstack *s;
   2298  1.1  christos 
   2299  1.1  christos   s = (struct cpstack *) xmalloc (sizeof (struct cpstack));
   2300  1.1  christos   s->name = name;
   2301  1.1  christos   s->next = *pstack;
   2302  1.1  christos   *pstack = s;
   2303  1.1  christos }
   2304  1.1  christos 
   2305  1.1  christos /* FIXME: The following should be generic for any pointer.  */
   2306  1.1  christos static char *
   2307  1.1  christos cppop (struct cpstack **pstack)
   2308  1.1  christos {
   2309  1.1  christos   struct cpstack *s;
   2310  1.1  christos   char *v;
   2311  1.1  christos 
   2312  1.1  christos   if ((*pstack)->name == NULL && (*pstack)->next == NULL)
   2313  1.1  christos     return NULL;
   2314  1.1  christos 
   2315  1.1  christos   s = *pstack;
   2316  1.1  christos   v = s->name;
   2317  1.1  christos   *pstack = (*pstack)->next;
   2318  1.1  christos   xfree (s);
   2319  1.1  christos 
   2320  1.1  christos   return v;
   2321  1.1  christos }
   2322  1.1  christos 
   2323  1.1  christos /*
   2325  1.1  christos  * Language-dependencies
   2326  1.1  christos  */
   2327  1.1  christos 
   2328  1.1  christos /* Common entry points */
   2329  1.1  christos 
   2330  1.1  christos /* Return the number of children for a given variable.
   2331  1.1  christos    The result of this function is defined by the language
   2332  1.1  christos    implementation.  The number of children returned by this function
   2333  1.1  christos    is the number of children that the user will see in the variable
   2334  1.1  christos    display.  */
   2335  1.1  christos static int
   2336  1.1  christos number_of_children (struct varobj *var)
   2337  1.1  christos {
   2338  1.1  christos   return (*var->root->lang_ops->number_of_children) (var);
   2339  1.1  christos }
   2340  1.1  christos 
   2341  1.1  christos /* What is the expression for the root varobj VAR? Returns a malloc'd
   2342  1.1  christos    string.  */
   2343  1.1  christos static char *
   2344  1.1  christos name_of_variable (struct varobj *var)
   2345  1.1  christos {
   2346  1.1  christos   return (*var->root->lang_ops->name_of_variable) (var);
   2347  1.1  christos }
   2348  1.1  christos 
   2349  1.1  christos /* What is the name of the INDEX'th child of VAR? Returns a malloc'd
   2350  1.1  christos    string.  */
   2351  1.1  christos static char *
   2352  1.1  christos name_of_child (struct varobj *var, int index)
   2353  1.1  christos {
   2354  1.1  christos   return (*var->root->lang_ops->name_of_child) (var, index);
   2355  1.1  christos }
   2356  1.1  christos 
   2357  1.1  christos /* If frame associated with VAR can be found, switch
   2358  1.1  christos    to it and return 1.  Otherwise, return 0.  */
   2359  1.1  christos 
   2360  1.1  christos static int
   2361  1.1  christos check_scope (struct varobj *var)
   2362  1.1  christos {
   2363  1.1  christos   struct frame_info *fi;
   2364  1.1  christos   int scope;
   2365  1.1  christos 
   2366  1.1  christos   fi = frame_find_by_id (var->root->frame);
   2367  1.1  christos   scope = fi != NULL;
   2368  1.1  christos 
   2369  1.1  christos   if (fi)
   2370  1.1  christos     {
   2371  1.1  christos       CORE_ADDR pc = get_frame_pc (fi);
   2372  1.1  christos 
   2373  1.1  christos       if (pc <  BLOCK_START (var->root->valid_block) ||
   2374  1.1  christos 	  pc >= BLOCK_END (var->root->valid_block))
   2375  1.1  christos 	scope = 0;
   2376  1.1  christos       else
   2377  1.1  christos 	select_frame (fi);
   2378  1.1  christos     }
   2379  1.1  christos   return scope;
   2380  1.1  christos }
   2381  1.1  christos 
   2382  1.1  christos /* Helper function to value_of_root.  */
   2383  1.1  christos 
   2384  1.1  christos static struct value *
   2385  1.1  christos value_of_root_1 (struct varobj **var_handle)
   2386  1.1  christos {
   2387  1.1  christos   struct value *new_val = NULL;
   2388  1.1  christos   struct varobj *var = *var_handle;
   2389  1.1  christos   int within_scope = 0;
   2390  1.1  christos   struct cleanup *back_to;
   2391  1.1  christos 
   2392  1.1  christos   /*  Only root variables can be updated...  */
   2393  1.1  christos   if (!is_root_p (var))
   2394  1.1  christos     /* Not a root var.  */
   2395  1.1  christos     return NULL;
   2396  1.1  christos 
   2397  1.1  christos   back_to = make_cleanup_restore_current_thread ();
   2398  1.1  christos 
   2399  1.1  christos   /* Determine whether the variable is still around.  */
   2400  1.1  christos   if (var->root->valid_block == NULL || var->root->floating)
   2401  1.1  christos     within_scope = 1;
   2402  1.1  christos   else if (var->root->thread_id == 0)
   2403  1.1  christos     {
   2404  1.1  christos       /* The program was single-threaded when the variable object was
   2405  1.1  christos 	 created.  Technically, it's possible that the program became
   2406  1.1  christos 	 multi-threaded since then, but we don't support such
   2407  1.1  christos 	 scenario yet.  */
   2408  1.1  christos       within_scope = check_scope (var);
   2409  1.1  christos     }
   2410  1.1  christos   else
   2411  1.1  christos     {
   2412  1.1  christos       ptid_t ptid = thread_id_to_pid (var->root->thread_id);
   2413  1.1  christos       if (in_thread_list (ptid))
   2414  1.1  christos 	{
   2415  1.1  christos 	  switch_to_thread (ptid);
   2416  1.1  christos 	  within_scope = check_scope (var);
   2417  1.1  christos 	}
   2418  1.1  christos     }
   2419  1.1  christos 
   2420  1.1  christos   if (within_scope)
   2421  1.1  christos     {
   2422  1.1  christos       volatile struct gdb_exception except;
   2423  1.1  christos 
   2424  1.1  christos       /* We need to catch errors here, because if evaluate
   2425  1.1  christos          expression fails we want to just return NULL.  */
   2426  1.1  christos       TRY_CATCH (except, RETURN_MASK_ERROR)
   2427  1.1  christos 	{
   2428  1.1  christos 	  new_val = evaluate_expression (var->root->exp);
   2429  1.1  christos 	}
   2430  1.1  christos     }
   2431  1.1  christos 
   2432  1.1  christos   do_cleanups (back_to);
   2433  1.1  christos 
   2434  1.1  christos   return new_val;
   2435  1.1  christos }
   2436  1.1  christos 
   2437  1.1  christos /* What is the ``struct value *'' of the root variable VAR?
   2438  1.1  christos    For floating variable object, evaluation can get us a value
   2439  1.1  christos    of different type from what is stored in varobj already.  In
   2440  1.1  christos    that case:
   2441  1.1  christos    - *type_changed will be set to 1
   2442  1.1  christos    - old varobj will be freed, and new one will be
   2443  1.1  christos    created, with the same name.
   2444  1.1  christos    - *var_handle will be set to the new varobj
   2445  1.1  christos    Otherwise, *type_changed will be set to 0.  */
   2446  1.1  christos static struct value *
   2447  1.1  christos value_of_root (struct varobj **var_handle, int *type_changed)
   2448  1.1  christos {
   2449  1.1  christos   struct varobj *var;
   2450  1.1  christos 
   2451  1.1  christos   if (var_handle == NULL)
   2452  1.1  christos     return NULL;
   2453  1.1  christos 
   2454  1.1  christos   var = *var_handle;
   2455  1.1  christos 
   2456  1.1  christos   /* This should really be an exception, since this should
   2457  1.1  christos      only get called with a root variable.  */
   2458  1.1  christos 
   2459  1.1  christos   if (!is_root_p (var))
   2460  1.1  christos     return NULL;
   2461  1.1  christos 
   2462  1.1  christos   if (var->root->floating)
   2463  1.1  christos     {
   2464  1.1  christos       struct varobj *tmp_var;
   2465  1.1  christos       char *old_type, *new_type;
   2466  1.1  christos 
   2467  1.1  christos       tmp_var = varobj_create (NULL, var->name, (CORE_ADDR) 0,
   2468  1.1  christos 			       USE_SELECTED_FRAME);
   2469  1.1  christos       if (tmp_var == NULL)
   2470  1.1  christos 	{
   2471  1.1  christos 	  return NULL;
   2472  1.1  christos 	}
   2473  1.1  christos       old_type = varobj_get_type (var);
   2474  1.1  christos       new_type = varobj_get_type (tmp_var);
   2475  1.1  christos       if (strcmp (old_type, new_type) == 0)
   2476  1.1  christos 	{
   2477  1.1  christos 	  /* The expression presently stored inside var->root->exp
   2478  1.1  christos 	     remembers the locations of local variables relatively to
   2479  1.1  christos 	     the frame where the expression was created (in DWARF location
   2480  1.1  christos 	     button, for example).  Naturally, those locations are not
   2481  1.1  christos 	     correct in other frames, so update the expression.  */
   2482  1.1  christos 
   2483  1.1  christos          struct expression *tmp_exp = var->root->exp;
   2484  1.1  christos 
   2485  1.1  christos          var->root->exp = tmp_var->root->exp;
   2486  1.1  christos          tmp_var->root->exp = tmp_exp;
   2487  1.1  christos 
   2488  1.1  christos 	  varobj_delete (tmp_var, NULL, 0);
   2489  1.1  christos 	  *type_changed = 0;
   2490  1.1  christos 	}
   2491  1.1  christos       else
   2492  1.1  christos 	{
   2493  1.1  christos 	  tmp_var->obj_name = xstrdup (var->obj_name);
   2494  1.1  christos 	  tmp_var->from = var->from;
   2495  1.1  christos 	  tmp_var->to = var->to;
   2496  1.1  christos 	  varobj_delete (var, NULL, 0);
   2497  1.1  christos 
   2498  1.1  christos 	  install_variable (tmp_var);
   2499  1.1  christos 	  *var_handle = tmp_var;
   2500  1.1  christos 	  var = *var_handle;
   2501  1.1  christos 	  *type_changed = 1;
   2502  1.1  christos 	}
   2503  1.1  christos       xfree (old_type);
   2504  1.1  christos       xfree (new_type);
   2505  1.1  christos     }
   2506  1.1  christos   else
   2507  1.1  christos     {
   2508  1.1  christos       *type_changed = 0;
   2509  1.1  christos     }
   2510  1.1  christos 
   2511  1.1  christos   {
   2512  1.1  christos     struct value *value;
   2513  1.1  christos 
   2514  1.1  christos     value = value_of_root_1 (var_handle);
   2515  1.1  christos     if (var->value == NULL || value == NULL)
   2516  1.1  christos       {
   2517  1.1  christos 	/* For root varobj-s, a NULL value indicates a scoping issue.
   2518  1.1  christos 	   So, nothing to do in terms of checking for mutations.  */
   2519  1.1  christos       }
   2520  1.1  christos     else if (varobj_value_has_mutated (var, value, value_type (value)))
   2521  1.1  christos       {
   2522  1.1  christos 	/* The type has mutated, so the children are no longer valid.
   2523  1.1  christos 	   Just delete them, and tell our caller that the type has
   2524  1.1  christos 	   changed.  */
   2525  1.1  christos 	varobj_delete (var, NULL, 1 /* only_children */);
   2526  1.1  christos 	var->num_children = -1;
   2527  1.1  christos 	var->to = -1;
   2528  1.1  christos 	var->from = -1;
   2529  1.1  christos 	*type_changed = 1;
   2530  1.1  christos       }
   2531  1.1  christos     return value;
   2532  1.1  christos   }
   2533  1.1  christos }
   2534  1.1  christos 
   2535  1.1  christos /* What is the ``struct value *'' for the INDEX'th child of PARENT?  */
   2536  1.1  christos static struct value *
   2537  1.1  christos value_of_child (struct varobj *parent, int index)
   2538  1.1  christos {
   2539  1.1  christos   struct value *value;
   2540  1.1  christos 
   2541  1.1  christos   value = (*parent->root->lang_ops->value_of_child) (parent, index);
   2542  1.1  christos 
   2543  1.1  christos   return value;
   2544  1.1  christos }
   2545  1.1  christos 
   2546  1.1  christos /* GDB already has a command called "value_of_variable".  Sigh.  */
   2547  1.1  christos static char *
   2548  1.1  christos my_value_of_variable (struct varobj *var, enum varobj_display_formats format)
   2549  1.1  christos {
   2550  1.1  christos   if (var->root->is_valid)
   2551  1.1  christos     {
   2552  1.1  christos       if (var->dynamic->pretty_printer != NULL)
   2553  1.1  christos 	return varobj_value_get_print_value (var->value, var->format, var);
   2554  1.1  christos       return (*var->root->lang_ops->value_of_variable) (var, format);
   2555  1.1  christos     }
   2556  1.1  christos   else
   2557  1.1  christos     return NULL;
   2558  1.1  christos }
   2559  1.1  christos 
   2560  1.1  christos void
   2561  1.1  christos varobj_formatted_print_options (struct value_print_options *opts,
   2562  1.1  christos 				enum varobj_display_formats format)
   2563  1.1  christos {
   2564  1.1  christos   get_formatted_print_options (opts, format_code[(int) format]);
   2565  1.1  christos   opts->deref_ref = 0;
   2566  1.1  christos   opts->raw = 1;
   2567  1.1  christos }
   2568  1.1  christos 
   2569  1.1  christos char *
   2570  1.1  christos varobj_value_get_print_value (struct value *value,
   2571  1.1  christos 			      enum varobj_display_formats format,
   2572  1.1  christos 			      struct varobj *var)
   2573  1.1  christos {
   2574  1.1  christos   struct ui_file *stb;
   2575  1.1  christos   struct cleanup *old_chain;
   2576  1.1  christos   char *thevalue = NULL;
   2577  1.1  christos   struct value_print_options opts;
   2578  1.1  christos   struct type *type = NULL;
   2579  1.1  christos   long len = 0;
   2580  1.1  christos   char *encoding = NULL;
   2581  1.1  christos   struct gdbarch *gdbarch = NULL;
   2582  1.1  christos   /* Initialize it just to avoid a GCC false warning.  */
   2583  1.1  christos   CORE_ADDR str_addr = 0;
   2584  1.1  christos   int string_print = 0;
   2585  1.1  christos 
   2586  1.1  christos   if (value == NULL)
   2587  1.1  christos     return NULL;
   2588  1.1  christos 
   2589  1.1  christos   stb = mem_fileopen ();
   2590  1.1  christos   old_chain = make_cleanup_ui_file_delete (stb);
   2591  1.1  christos 
   2592  1.1  christos   gdbarch = get_type_arch (value_type (value));
   2593  1.1  christos #if HAVE_PYTHON
   2594  1.1  christos   if (gdb_python_initialized)
   2595  1.1  christos     {
   2596  1.1  christos       PyObject *value_formatter =  var->dynamic->pretty_printer;
   2597  1.1  christos 
   2598  1.1  christos       varobj_ensure_python_env (var);
   2599  1.1  christos 
   2600  1.1  christos       if (value_formatter)
   2601  1.1  christos 	{
   2602  1.1  christos 	  /* First check to see if we have any children at all.  If so,
   2603  1.1  christos 	     we simply return {...}.  */
   2604  1.1  christos 	  if (dynamic_varobj_has_child_method (var))
   2605  1.1  christos 	    {
   2606  1.1  christos 	      do_cleanups (old_chain);
   2607  1.1  christos 	      return xstrdup ("{...}");
   2608  1.1  christos 	    }
   2609  1.1  christos 
   2610  1.1  christos 	  if (PyObject_HasAttr (value_formatter, gdbpy_to_string_cst))
   2611  1.1  christos 	    {
   2612  1.1  christos 	      struct value *replacement;
   2613  1.1  christos 	      PyObject *output = NULL;
   2614  1.1  christos 
   2615  1.1  christos 	      output = apply_varobj_pretty_printer (value_formatter,
   2616  1.1  christos 						    &replacement,
   2617  1.1  christos 						    stb);
   2618  1.1  christos 
   2619  1.1  christos 	      /* If we have string like output ...  */
   2620  1.1  christos 	      if (output)
   2621  1.1  christos 		{
   2622  1.1  christos 		  make_cleanup_py_decref (output);
   2623  1.1  christos 
   2624  1.1  christos 		  /* If this is a lazy string, extract it.  For lazy
   2625  1.1  christos 		     strings we always print as a string, so set
   2626  1.1  christos 		     string_print.  */
   2627  1.1  christos 		  if (gdbpy_is_lazy_string (output))
   2628  1.1  christos 		    {
   2629  1.1  christos 		      gdbpy_extract_lazy_string (output, &str_addr, &type,
   2630  1.1  christos 						 &len, &encoding);
   2631  1.1  christos 		      make_cleanup (free_current_contents, &encoding);
   2632  1.1  christos 		      string_print = 1;
   2633  1.1  christos 		    }
   2634  1.1  christos 		  else
   2635  1.1  christos 		    {
   2636  1.1  christos 		      /* If it is a regular (non-lazy) string, extract
   2637  1.1  christos 			 it and copy the contents into THEVALUE.  If the
   2638  1.1  christos 			 hint says to print it as a string, set
   2639  1.1  christos 			 string_print.  Otherwise just return the extracted
   2640  1.1  christos 			 string as a value.  */
   2641  1.1  christos 
   2642  1.1  christos 		      char *s = python_string_to_target_string (output);
   2643  1.1  christos 
   2644  1.1  christos 		      if (s)
   2645  1.1  christos 			{
   2646  1.1  christos 			  char *hint;
   2647  1.1  christos 
   2648  1.1  christos 			  hint = gdbpy_get_display_hint (value_formatter);
   2649  1.1  christos 			  if (hint)
   2650  1.1  christos 			    {
   2651  1.1  christos 			      if (!strcmp (hint, "string"))
   2652  1.1  christos 				string_print = 1;
   2653  1.1  christos 			      xfree (hint);
   2654  1.1  christos 			    }
   2655  1.1  christos 
   2656  1.1  christos 			  len = strlen (s);
   2657  1.1  christos 			  thevalue = xmemdup (s, len + 1, len + 1);
   2658  1.1  christos 			  type = builtin_type (gdbarch)->builtin_char;
   2659  1.1  christos 			  xfree (s);
   2660  1.1  christos 
   2661  1.1  christos 			  if (!string_print)
   2662  1.1  christos 			    {
   2663  1.1  christos 			      do_cleanups (old_chain);
   2664  1.1  christos 			      return thevalue;
   2665  1.1  christos 			    }
   2666  1.1  christos 
   2667  1.1  christos 			  make_cleanup (xfree, thevalue);
   2668  1.1  christos 			}
   2669  1.1  christos 		      else
   2670  1.1  christos 			gdbpy_print_stack ();
   2671  1.1  christos 		    }
   2672  1.1  christos 		}
   2673  1.1  christos 	      /* If the printer returned a replacement value, set VALUE
   2674  1.1  christos 		 to REPLACEMENT.  If there is not a replacement value,
   2675  1.1  christos 		 just use the value passed to this function.  */
   2676  1.1  christos 	      if (replacement)
   2677  1.1  christos 		value = replacement;
   2678  1.1  christos 	    }
   2679  1.1  christos 	}
   2680  1.1  christos     }
   2681  1.1  christos #endif
   2682  1.1  christos 
   2683  1.1  christos   varobj_formatted_print_options (&opts, format);
   2684  1.1  christos 
   2685  1.1  christos   /* If the THEVALUE has contents, it is a regular string.  */
   2686  1.1  christos   if (thevalue)
   2687  1.1  christos     LA_PRINT_STRING (stb, type, (gdb_byte *) thevalue, len, encoding, 0, &opts);
   2688  1.1  christos   else if (string_print)
   2689  1.1  christos     /* Otherwise, if string_print is set, and it is not a regular
   2690  1.1  christos        string, it is a lazy string.  */
   2691  1.1  christos     val_print_string (type, encoding, str_addr, len, stb, &opts);
   2692  1.1  christos   else
   2693  1.1  christos     /* All other cases.  */
   2694  1.1  christos     common_val_print (value, stb, 0, &opts, current_language);
   2695  1.1  christos 
   2696  1.1  christos   thevalue = ui_file_xstrdup (stb, NULL);
   2697  1.1  christos 
   2698  1.1  christos   do_cleanups (old_chain);
   2699  1.1  christos   return thevalue;
   2700  1.1  christos }
   2701  1.1  christos 
   2702  1.1  christos int
   2703  1.1  christos varobj_editable_p (struct varobj *var)
   2704  1.1  christos {
   2705  1.1  christos   struct type *type;
   2706  1.1  christos 
   2707  1.1  christos   if (!(var->root->is_valid && var->value && VALUE_LVAL (var->value)))
   2708  1.1  christos     return 0;
   2709  1.1  christos 
   2710  1.1  christos   type = varobj_get_value_type (var);
   2711  1.1  christos 
   2712  1.1  christos   switch (TYPE_CODE (type))
   2713  1.1  christos     {
   2714  1.1  christos     case TYPE_CODE_STRUCT:
   2715  1.1  christos     case TYPE_CODE_UNION:
   2716  1.1  christos     case TYPE_CODE_ARRAY:
   2717  1.1  christos     case TYPE_CODE_FUNC:
   2718  1.1  christos     case TYPE_CODE_METHOD:
   2719  1.1  christos       return 0;
   2720  1.1  christos       break;
   2721  1.1  christos 
   2722  1.1  christos     default:
   2723  1.1  christos       return 1;
   2724  1.1  christos       break;
   2725  1.1  christos     }
   2726  1.1  christos }
   2727  1.1  christos 
   2728  1.1  christos /* Call VAR's value_is_changeable_p language-specific callback.  */
   2729  1.1  christos 
   2730  1.1  christos int
   2731  1.1  christos varobj_value_is_changeable_p (struct varobj *var)
   2732  1.1  christos {
   2733  1.1  christos   return var->root->lang_ops->value_is_changeable_p (var);
   2734  1.1  christos }
   2735  1.1  christos 
   2736  1.1  christos /* Return 1 if that varobj is floating, that is is always evaluated in the
   2737  1.1  christos    selected frame, and not bound to thread/frame.  Such variable objects
   2738  1.1  christos    are created using '@' as frame specifier to -var-create.  */
   2739  1.1  christos int
   2740  1.1  christos varobj_floating_p (struct varobj *var)
   2741  1.1  christos {
   2742  1.1  christos   return var->root->floating;
   2743  1.1  christos }
   2744  1.1  christos 
   2745  1.1  christos /* Implement the "value_is_changeable_p" varobj callback for most
   2746  1.1  christos    languages.  */
   2747  1.1  christos 
   2748  1.1  christos int
   2749  1.1  christos varobj_default_value_is_changeable_p (struct varobj *var)
   2750  1.1  christos {
   2751  1.1  christos   int r;
   2752  1.1  christos   struct type *type;
   2753  1.1  christos 
   2754  1.1  christos   if (CPLUS_FAKE_CHILD (var))
   2755  1.1  christos     return 0;
   2756  1.1  christos 
   2757  1.1  christos   type = varobj_get_value_type (var);
   2758  1.1  christos 
   2759  1.1  christos   switch (TYPE_CODE (type))
   2760  1.1  christos     {
   2761  1.1  christos     case TYPE_CODE_STRUCT:
   2762  1.1  christos     case TYPE_CODE_UNION:
   2763  1.1  christos     case TYPE_CODE_ARRAY:
   2764  1.1  christos       r = 0;
   2765  1.1  christos       break;
   2766  1.1  christos 
   2767  1.1  christos     default:
   2768  1.1  christos       r = 1;
   2769  1.1  christos     }
   2770  1.1  christos 
   2771  1.1  christos   return r;
   2772  1.1  christos }
   2773  1.1  christos 
   2774  1.1  christos /* Iterate all the existing _root_ VAROBJs and call the FUNC callback for them
   2775  1.1  christos    with an arbitrary caller supplied DATA pointer.  */
   2776  1.1  christos 
   2777  1.1  christos void
   2778  1.1  christos all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data)
   2779  1.1  christos {
   2780  1.1  christos   struct varobj_root *var_root, *var_root_next;
   2781  1.1  christos 
   2782  1.1  christos   /* Iterate "safely" - handle if the callee deletes its passed VAROBJ.  */
   2783  1.1  christos 
   2784  1.1  christos   for (var_root = rootlist; var_root != NULL; var_root = var_root_next)
   2785  1.1  christos     {
   2786  1.1  christos       var_root_next = var_root->next;
   2787  1.1  christos 
   2788  1.1  christos       (*func) (var_root->rootvar, data);
   2789  1.1  christos     }
   2790  1.1  christos }
   2791  1.1  christos 
   2792  1.1  christos extern void _initialize_varobj (void);
   2794  1.1  christos void
   2795  1.1  christos _initialize_varobj (void)
   2796  1.1  christos {
   2797  1.1  christos   int sizeof_table = sizeof (struct vlist *) * VAROBJ_TABLE_SIZE;
   2798  1.1  christos 
   2799  1.1  christos   varobj_table = xmalloc (sizeof_table);
   2800  1.1  christos   memset (varobj_table, 0, sizeof_table);
   2801  1.1  christos 
   2802  1.1  christos   add_setshow_zuinteger_cmd ("debugvarobj", class_maintenance,
   2803  1.1  christos 			     &varobjdebug,
   2804  1.1  christos 			     _("Set varobj debugging."),
   2805  1.1  christos 			     _("Show varobj debugging."),
   2806  1.1  christos 			     _("When non-zero, varobj debugging is enabled."),
   2807  1.1  christos 			     NULL, show_varobjdebug,
   2808  1.1  christos 			     &setlist, &showlist);
   2809  1.1  christos }
   2810  1.1  christos 
   2811  1.1  christos /* Invalidate varobj VAR if it is tied to locals and re-create it if it is
   2812  1.1  christos    defined on globals.  It is a helper for varobj_invalidate.
   2813  1.1  christos 
   2814  1.1  christos    This function is called after changing the symbol file, in this case the
   2815  1.1  christos    pointers to "struct type" stored by the varobj are no longer valid.  All
   2816  1.1  christos    varobj must be either re-evaluated, or marked as invalid here.  */
   2817  1.1  christos 
   2818  1.1  christos static void
   2819  1.1  christos varobj_invalidate_iter (struct varobj *var, void *unused)
   2820  1.1  christos {
   2821  1.1  christos   /* global and floating var must be re-evaluated.  */
   2822  1.1  christos   if (var->root->floating || var->root->valid_block == NULL)
   2823  1.1  christos     {
   2824  1.1  christos       struct varobj *tmp_var;
   2825  1.1  christos 
   2826  1.1  christos       /* Try to create a varobj with same expression.  If we succeed
   2827  1.1  christos 	 replace the old varobj, otherwise invalidate it.  */
   2828  1.1  christos       tmp_var = varobj_create (NULL, var->name, (CORE_ADDR) 0,
   2829  1.1  christos 			       USE_CURRENT_FRAME);
   2830  1.1  christos       if (tmp_var != NULL)
   2831  1.1  christos 	{
   2832  1.1  christos 	  tmp_var->obj_name = xstrdup (var->obj_name);
   2833  1.1  christos 	  varobj_delete (var, NULL, 0);
   2834  1.1  christos 	  install_variable (tmp_var);
   2835  1.1  christos 	}
   2836  1.1  christos       else
   2837  1.1  christos 	var->root->is_valid = 0;
   2838  1.1  christos     }
   2839  1.1  christos   else /* locals must be invalidated.  */
   2840  1.1  christos     var->root->is_valid = 0;
   2841  1.1  christos }
   2842  1.1  christos 
   2843  1.1  christos /* Invalidate the varobjs that are tied to locals and re-create the ones that
   2844  1.1  christos    are defined on globals.
   2845  1.1  christos    Invalidated varobjs will be always printed in_scope="invalid".  */
   2846  1.1  christos 
   2847                void
   2848                varobj_invalidate (void)
   2849                {
   2850                  all_root_varobjs (varobj_invalidate_iter, NULL);
   2851                }
   2852