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