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