]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/python/py-prettyprint.c
Update year range in copyright notice of all files owned by the GDB project.
[thirdparty/binutils-gdb.git] / gdb / python / py-prettyprint.c
1 /* Python pretty-printing
2
3 Copyright (C) 2008-2015 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "objfiles.h"
22 #include "symtab.h"
23 #include "language.h"
24 #include "valprint.h"
25 #include "extension-priv.h"
26 #include "python.h"
27 #include "python-internal.h"
28
29 /* Return type of print_string_repr. */
30
31 enum string_repr_result
32 {
33 /* The string method returned None. */
34 string_repr_none,
35 /* The string method had an error. */
36 string_repr_error,
37 /* Everything ok. */
38 string_repr_ok
39 };
40
41 /* Helper function for find_pretty_printer which iterates over a list,
42 calls each function and inspects output. This will return a
43 printer object if one recognizes VALUE. If no printer is found, it
44 will return None. On error, it will set the Python error and
45 return NULL. */
46
47 static PyObject *
48 search_pp_list (PyObject *list, PyObject *value)
49 {
50 Py_ssize_t pp_list_size, list_index;
51 PyObject *function, *printer = NULL;
52
53 pp_list_size = PyList_Size (list);
54 for (list_index = 0; list_index < pp_list_size; list_index++)
55 {
56 function = PyList_GetItem (list, list_index);
57 if (! function)
58 return NULL;
59
60 /* Skip if disabled. */
61 if (PyObject_HasAttr (function, gdbpy_enabled_cst))
62 {
63 PyObject *attr = PyObject_GetAttr (function, gdbpy_enabled_cst);
64 int cmp;
65
66 if (!attr)
67 return NULL;
68 cmp = PyObject_IsTrue (attr);
69 Py_DECREF (attr);
70 if (cmp == -1)
71 return NULL;
72
73 if (!cmp)
74 continue;
75 }
76
77 printer = PyObject_CallFunctionObjArgs (function, value, NULL);
78 if (! printer)
79 return NULL;
80 else if (printer != Py_None)
81 return printer;
82
83 Py_DECREF (printer);
84 }
85
86 Py_RETURN_NONE;
87 }
88
89 /* Subroutine of find_pretty_printer to simplify it.
90 Look for a pretty-printer to print VALUE in all objfiles.
91 The result is NULL if there's an error and the search should be terminated.
92 The result is Py_None, suitably inc-ref'd, if no pretty-printer was found.
93 Otherwise the result is the pretty-printer function, suitably inc-ref'd. */
94
95 static PyObject *
96 find_pretty_printer_from_objfiles (PyObject *value)
97 {
98 PyObject *pp_list;
99 PyObject *function;
100 struct objfile *obj;
101
102 ALL_OBJFILES (obj)
103 {
104 PyObject *objf = objfile_to_objfile_object (obj);
105 if (!objf)
106 {
107 /* Ignore the error and continue. */
108 PyErr_Clear ();
109 continue;
110 }
111
112 pp_list = objfpy_get_printers (objf, NULL);
113 function = search_pp_list (pp_list, value);
114 Py_XDECREF (pp_list);
115
116 /* If there is an error in any objfile list, abort the search and exit. */
117 if (! function)
118 return NULL;
119
120 if (function != Py_None)
121 return function;
122
123 Py_DECREF (function);
124 }
125
126 Py_RETURN_NONE;
127 }
128
129 /* Subroutine of find_pretty_printer to simplify it.
130 Look for a pretty-printer to print VALUE in the current program space.
131 The result is NULL if there's an error and the search should be terminated.
132 The result is Py_None, suitably inc-ref'd, if no pretty-printer was found.
133 Otherwise the result is the pretty-printer function, suitably inc-ref'd. */
134
135 static PyObject *
136 find_pretty_printer_from_progspace (PyObject *value)
137 {
138 PyObject *pp_list;
139 PyObject *function;
140 PyObject *obj = pspace_to_pspace_object (current_program_space);
141
142 if (!obj)
143 return NULL;
144 pp_list = pspy_get_printers (obj, NULL);
145 function = search_pp_list (pp_list, value);
146 Py_XDECREF (pp_list);
147 return function;
148 }
149
150 /* Subroutine of find_pretty_printer to simplify it.
151 Look for a pretty-printer to print VALUE in the gdb module.
152 The result is NULL if there's an error and the search should be terminated.
153 The result is Py_None, suitably inc-ref'd, if no pretty-printer was found.
154 Otherwise the result is the pretty-printer function, suitably inc-ref'd. */
155
156 static PyObject *
157 find_pretty_printer_from_gdb (PyObject *value)
158 {
159 PyObject *pp_list;
160 PyObject *function;
161
162 /* Fetch the global pretty printer list. */
163 if (gdb_python_module == NULL
164 || ! PyObject_HasAttrString (gdb_python_module, "pretty_printers"))
165 Py_RETURN_NONE;
166 pp_list = PyObject_GetAttrString (gdb_python_module, "pretty_printers");
167 if (pp_list == NULL || ! PyList_Check (pp_list))
168 {
169 Py_XDECREF (pp_list);
170 Py_RETURN_NONE;
171 }
172
173 function = search_pp_list (pp_list, value);
174 Py_XDECREF (pp_list);
175 return function;
176 }
177
178 /* Find the pretty-printing constructor function for VALUE. If no
179 pretty-printer exists, return None. If one exists, return a new
180 reference. On error, set the Python error and return NULL. */
181
182 static PyObject *
183 find_pretty_printer (PyObject *value)
184 {
185 PyObject *function;
186
187 /* Look at the pretty-printer list for each objfile
188 in the current program-space. */
189 function = find_pretty_printer_from_objfiles (value);
190 if (function == NULL || function != Py_None)
191 return function;
192 Py_DECREF (function);
193
194 /* Look at the pretty-printer list for the current program-space. */
195 function = find_pretty_printer_from_progspace (value);
196 if (function == NULL || function != Py_None)
197 return function;
198 Py_DECREF (function);
199
200 /* Look at the pretty-printer list in the gdb module. */
201 function = find_pretty_printer_from_gdb (value);
202 return function;
203 }
204
205 /* Pretty-print a single value, via the printer object PRINTER.
206 If the function returns a string, a PyObject containing the string
207 is returned. If the function returns Py_NONE that means the pretty
208 printer returned the Python None as a value. Otherwise, if the
209 function returns a value, *OUT_VALUE is set to the value, and NULL
210 is returned. On error, *OUT_VALUE is set to NULL, NULL is
211 returned, with a python exception set. */
212
213 static PyObject *
214 pretty_print_one_value (PyObject *printer, struct value **out_value)
215 {
216 volatile struct gdb_exception except;
217 PyObject *result = NULL;
218
219 *out_value = NULL;
220 TRY_CATCH (except, RETURN_MASK_ALL)
221 {
222 result = PyObject_CallMethodObjArgs (printer, gdbpy_to_string_cst, NULL);
223 if (result)
224 {
225 if (! gdbpy_is_string (result) && ! gdbpy_is_lazy_string (result)
226 && result != Py_None)
227 {
228 *out_value = convert_value_from_python (result);
229 if (PyErr_Occurred ())
230 *out_value = NULL;
231 Py_DECREF (result);
232 result = NULL;
233 }
234 }
235 }
236
237 return result;
238 }
239
240 /* Return the display hint for the object printer, PRINTER. Return
241 NULL if there is no display_hint method, or if the method did not
242 return a string. On error, print stack trace and return NULL. On
243 success, return an xmalloc()d string. */
244 char *
245 gdbpy_get_display_hint (PyObject *printer)
246 {
247 PyObject *hint;
248 char *result = NULL;
249
250 if (! PyObject_HasAttr (printer, gdbpy_display_hint_cst))
251 return NULL;
252
253 hint = PyObject_CallMethodObjArgs (printer, gdbpy_display_hint_cst, NULL);
254 if (hint)
255 {
256 if (gdbpy_is_string (hint))
257 {
258 result = python_string_to_host_string (hint);
259 if (result == NULL)
260 gdbpy_print_stack ();
261 }
262 Py_DECREF (hint);
263 }
264 else
265 gdbpy_print_stack ();
266
267 return result;
268 }
269
270 /* A wrapper for gdbpy_print_stack that ignores MemoryError. */
271
272 static void
273 print_stack_unless_memory_error (struct ui_file *stream)
274 {
275 if (PyErr_ExceptionMatches (gdbpy_gdb_memory_error))
276 {
277 struct cleanup *cleanup;
278 PyObject *type, *value, *trace;
279 char *msg;
280
281 PyErr_Fetch (&type, &value, &trace);
282 cleanup = make_cleanup_py_decref (type);
283 make_cleanup_py_decref (value);
284 make_cleanup_py_decref (trace);
285
286 msg = gdbpy_exception_to_string (type, value);
287 make_cleanup (xfree, msg);
288
289 if (msg == NULL || *msg == '\0')
290 fprintf_filtered (stream, _("<error reading variable>"));
291 else
292 fprintf_filtered (stream, _("<error reading variable: %s>"), msg);
293
294 do_cleanups (cleanup);
295 }
296 else
297 gdbpy_print_stack ();
298 }
299
300 /* Helper for gdbpy_apply_val_pretty_printer which calls to_string and
301 formats the result. */
302
303 static enum string_repr_result
304 print_string_repr (PyObject *printer, const char *hint,
305 struct ui_file *stream, int recurse,
306 const struct value_print_options *options,
307 const struct language_defn *language,
308 struct gdbarch *gdbarch)
309 {
310 struct value *replacement = NULL;
311 PyObject *py_str = NULL;
312 enum string_repr_result result = string_repr_ok;
313
314 py_str = pretty_print_one_value (printer, &replacement);
315 if (py_str)
316 {
317 struct cleanup *cleanup = make_cleanup_py_decref (py_str);
318
319 if (py_str == Py_None)
320 result = string_repr_none;
321 else if (gdbpy_is_lazy_string (py_str))
322 {
323 CORE_ADDR addr;
324 long length;
325 struct type *type;
326 char *encoding = NULL;
327 struct value_print_options local_opts = *options;
328
329 make_cleanup (free_current_contents, &encoding);
330 gdbpy_extract_lazy_string (py_str, &addr, &type,
331 &length, &encoding);
332
333 local_opts.addressprint = 0;
334 val_print_string (type, encoding, addr, (int) length,
335 stream, &local_opts);
336 }
337 else
338 {
339 PyObject *string;
340
341 string = python_string_to_target_python_string (py_str);
342 if (string)
343 {
344 char *output;
345 long length;
346 struct type *type;
347
348 make_cleanup_py_decref (string);
349 #ifdef IS_PY3K
350 output = PyBytes_AS_STRING (string);
351 length = PyBytes_GET_SIZE (string);
352 #else
353 output = PyString_AsString (string);
354 length = PyString_Size (string);
355 #endif
356 type = builtin_type (gdbarch)->builtin_char;
357
358 if (hint && !strcmp (hint, "string"))
359 LA_PRINT_STRING (stream, type, (gdb_byte *) output,
360 length, NULL, 0, options);
361 else
362 fputs_filtered (output, stream);
363 }
364 else
365 {
366 result = string_repr_error;
367 print_stack_unless_memory_error (stream);
368 }
369 }
370
371 do_cleanups (cleanup);
372 }
373 else if (replacement)
374 {
375 struct value_print_options opts = *options;
376
377 opts.addressprint = 0;
378 common_val_print (replacement, stream, recurse, &opts, language);
379 }
380 else
381 {
382 result = string_repr_error;
383 print_stack_unless_memory_error (stream);
384 }
385
386 return result;
387 }
388
389 #ifndef IS_PY3K
390 static void
391 py_restore_tstate (void *p)
392 {
393 PyFrameObject *frame = p;
394 PyThreadState *tstate = PyThreadState_GET ();
395
396 tstate->frame = frame;
397 }
398
399 /* Create a dummy PyFrameObject, needed to work around
400 a Python-2.4 bug with generators. */
401 static PyObject *
402 push_dummy_python_frame (void)
403 {
404 PyObject *empty_string, *null_tuple, *globals;
405 PyCodeObject *code;
406 PyFrameObject *frame;
407 PyThreadState *tstate;
408
409 empty_string = PyString_FromString ("");
410 if (!empty_string)
411 return NULL;
412
413 null_tuple = PyTuple_New (0);
414 if (!null_tuple)
415 {
416 Py_DECREF (empty_string);
417 return NULL;
418 }
419
420 code = PyCode_New (0, /* argcount */
421 0, /* nlocals */
422 0, /* stacksize */
423 0, /* flags */
424 empty_string, /* code */
425 null_tuple, /* consts */
426 null_tuple, /* names */
427 null_tuple, /* varnames */
428 #if PYTHON_API_VERSION >= 1010
429 null_tuple, /* freevars */
430 null_tuple, /* cellvars */
431 #endif
432 empty_string, /* filename */
433 empty_string, /* name */
434 1, /* firstlineno */
435 empty_string /* lnotab */
436 );
437
438 Py_DECREF (empty_string);
439 Py_DECREF (null_tuple);
440
441 if (!code)
442 return NULL;
443
444 globals = PyDict_New ();
445 if (!globals)
446 {
447 Py_DECREF (code);
448 return NULL;
449 }
450
451 tstate = PyThreadState_GET ();
452
453 frame = PyFrame_New (tstate, code, globals, NULL);
454
455 Py_DECREF (globals);
456 Py_DECREF (code);
457
458 if (!frame)
459 return NULL;
460
461 tstate->frame = frame;
462 make_cleanup (py_restore_tstate, frame->f_back);
463 return (PyObject *) frame;
464 }
465 #endif
466
467 /* Helper for gdbpy_apply_val_pretty_printer that formats children of the
468 printer, if any exist. If is_py_none is true, then nothing has
469 been printed by to_string, and format output accordingly. */
470 static void
471 print_children (PyObject *printer, const char *hint,
472 struct ui_file *stream, int recurse,
473 const struct value_print_options *options,
474 const struct language_defn *language,
475 int is_py_none)
476 {
477 int is_map, is_array, done_flag, pretty;
478 unsigned int i;
479 PyObject *children, *iter;
480 #ifndef IS_PY3K
481 PyObject *frame;
482 #endif
483 struct cleanup *cleanups;
484
485 if (! PyObject_HasAttr (printer, gdbpy_children_cst))
486 return;
487
488 /* If we are printing a map or an array, we want some special
489 formatting. */
490 is_map = hint && ! strcmp (hint, "map");
491 is_array = hint && ! strcmp (hint, "array");
492
493 children = PyObject_CallMethodObjArgs (printer, gdbpy_children_cst,
494 NULL);
495 if (! children)
496 {
497 print_stack_unless_memory_error (stream);
498 return;
499 }
500
501 cleanups = make_cleanup_py_decref (children);
502
503 iter = PyObject_GetIter (children);
504 if (!iter)
505 {
506 print_stack_unless_memory_error (stream);
507 goto done;
508 }
509 make_cleanup_py_decref (iter);
510
511 /* Use the prettyformat_arrays option if we are printing an array,
512 and the pretty option otherwise. */
513 if (is_array)
514 pretty = options->prettyformat_arrays;
515 else
516 {
517 if (options->prettyformat == Val_prettyformat)
518 pretty = 1;
519 else
520 pretty = options->prettyformat_structs;
521 }
522
523 /* Manufacture a dummy Python frame to work around Python 2.4 bug,
524 where it insists on having a non-NULL tstate->frame when
525 a generator is called. */
526 #ifndef IS_PY3K
527 frame = push_dummy_python_frame ();
528 if (!frame)
529 {
530 gdbpy_print_stack ();
531 goto done;
532 }
533 make_cleanup_py_decref (frame);
534 #endif
535
536 done_flag = 0;
537 for (i = 0; i < options->print_max; ++i)
538 {
539 PyObject *py_v, *item = PyIter_Next (iter);
540 const char *name;
541 struct cleanup *inner_cleanup;
542
543 if (! item)
544 {
545 if (PyErr_Occurred ())
546 print_stack_unless_memory_error (stream);
547 /* Set a flag so we can know whether we printed all the
548 available elements. */
549 else
550 done_flag = 1;
551 break;
552 }
553
554 if (! PyArg_ParseTuple (item, "sO", &name, &py_v))
555 {
556 gdbpy_print_stack ();
557 Py_DECREF (item);
558 continue;
559 }
560 inner_cleanup = make_cleanup_py_decref (item);
561
562 /* Print initial "{". For other elements, there are three
563 cases:
564 1. Maps. Print a "," after each value element.
565 2. Arrays. Always print a ",".
566 3. Other. Always print a ",". */
567 if (i == 0)
568 {
569 if (is_py_none)
570 fputs_filtered ("{", stream);
571 else
572 fputs_filtered (" = {", stream);
573 }
574
575 else if (! is_map || i % 2 == 0)
576 fputs_filtered (pretty ? "," : ", ", stream);
577
578 /* In summary mode, we just want to print "= {...}" if there is
579 a value. */
580 if (options->summary)
581 {
582 /* This increment tricks the post-loop logic to print what
583 we want. */
584 ++i;
585 /* Likewise. */
586 pretty = 0;
587 break;
588 }
589
590 if (! is_map || i % 2 == 0)
591 {
592 if (pretty)
593 {
594 fputs_filtered ("\n", stream);
595 print_spaces_filtered (2 + 2 * recurse, stream);
596 }
597 else
598 wrap_here (n_spaces (2 + 2 *recurse));
599 }
600
601 if (is_map && i % 2 == 0)
602 fputs_filtered ("[", stream);
603 else if (is_array)
604 {
605 /* We print the index, not whatever the child method
606 returned as the name. */
607 if (options->print_array_indexes)
608 fprintf_filtered (stream, "[%d] = ", i);
609 }
610 else if (! is_map)
611 {
612 fputs_filtered (name, stream);
613 fputs_filtered (" = ", stream);
614 }
615
616 if (gdbpy_is_lazy_string (py_v))
617 {
618 CORE_ADDR addr;
619 struct type *type;
620 long length;
621 char *encoding = NULL;
622 struct value_print_options local_opts = *options;
623
624 make_cleanup (free_current_contents, &encoding);
625 gdbpy_extract_lazy_string (py_v, &addr, &type, &length, &encoding);
626
627 local_opts.addressprint = 0;
628 val_print_string (type, encoding, addr, (int) length, stream,
629 &local_opts);
630 }
631 else if (gdbpy_is_string (py_v))
632 {
633 char *output;
634
635 output = python_string_to_host_string (py_v);
636 if (!output)
637 gdbpy_print_stack ();
638 else
639 {
640 fputs_filtered (output, stream);
641 xfree (output);
642 }
643 }
644 else
645 {
646 struct value *value = convert_value_from_python (py_v);
647
648 if (value == NULL)
649 {
650 gdbpy_print_stack ();
651 error (_("Error while executing Python code."));
652 }
653 else
654 common_val_print (value, stream, recurse + 1, options, language);
655 }
656
657 if (is_map && i % 2 == 0)
658 fputs_filtered ("] = ", stream);
659
660 do_cleanups (inner_cleanup);
661 }
662
663 if (i)
664 {
665 if (!done_flag)
666 {
667 if (pretty)
668 {
669 fputs_filtered ("\n", stream);
670 print_spaces_filtered (2 + 2 * recurse, stream);
671 }
672 fputs_filtered ("...", stream);
673 }
674 if (pretty)
675 {
676 fputs_filtered ("\n", stream);
677 print_spaces_filtered (2 * recurse, stream);
678 }
679 fputs_filtered ("}", stream);
680 }
681
682 done:
683 do_cleanups (cleanups);
684 }
685
686 enum ext_lang_rc
687 gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang,
688 struct type *type, const gdb_byte *valaddr,
689 int embedded_offset, CORE_ADDR address,
690 struct ui_file *stream, int recurse,
691 const struct value *val,
692 const struct value_print_options *options,
693 const struct language_defn *language)
694 {
695 struct gdbarch *gdbarch = get_type_arch (type);
696 PyObject *printer = NULL;
697 PyObject *val_obj = NULL;
698 struct value *value;
699 char *hint = NULL;
700 struct cleanup *cleanups;
701 enum ext_lang_rc result = EXT_LANG_RC_NOP;
702 enum string_repr_result print_result;
703
704 /* No pretty-printer support for unavailable values. */
705 if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type)))
706 return EXT_LANG_RC_NOP;
707
708 if (!gdb_python_initialized)
709 return EXT_LANG_RC_NOP;
710
711 cleanups = ensure_python_env (gdbarch, language);
712
713 /* Instantiate the printer. */
714 if (valaddr)
715 valaddr += embedded_offset;
716 value = value_from_contents_and_address (type, valaddr,
717 address + embedded_offset);
718
719 set_value_component_location (value, val);
720 /* set_value_component_location resets the address, so we may
721 need to set it again. */
722 if (VALUE_LVAL (value) != lval_internalvar
723 && VALUE_LVAL (value) != lval_internalvar_component
724 && VALUE_LVAL (value) != lval_computed)
725 set_value_address (value, address + embedded_offset);
726
727 val_obj = value_to_value_object (value);
728 if (! val_obj)
729 {
730 result = EXT_LANG_RC_ERROR;
731 goto done;
732 }
733
734 /* Find the constructor. */
735 printer = find_pretty_printer (val_obj);
736 Py_DECREF (val_obj);
737
738 if (printer == NULL)
739 {
740 result = EXT_LANG_RC_ERROR;
741 goto done;
742 }
743
744 make_cleanup_py_decref (printer);
745 if (printer == Py_None)
746 {
747 result = EXT_LANG_RC_NOP;
748 goto done;
749 }
750
751 /* If we are printing a map, we want some special formatting. */
752 hint = gdbpy_get_display_hint (printer);
753 make_cleanup (free_current_contents, &hint);
754
755 /* Print the section */
756 print_result = print_string_repr (printer, hint, stream, recurse,
757 options, language, gdbarch);
758 if (print_result != string_repr_error)
759 print_children (printer, hint, stream, recurse, options, language,
760 print_result == string_repr_none);
761
762 result = EXT_LANG_RC_OK;
763
764 done:
765 if (PyErr_Occurred ())
766 print_stack_unless_memory_error (stream);
767 do_cleanups (cleanups);
768 return result;
769 }
770
771
772 /* Apply a pretty-printer for the varobj code. PRINTER_OBJ is the
773 print object. It must have a 'to_string' method (but this is
774 checked by varobj, not here) which takes no arguments and
775 returns a string. The printer will return a value and in the case
776 of a Python string being returned, this function will return a
777 PyObject containing the string. For any other type, *REPLACEMENT is
778 set to the replacement value and this function returns NULL. On
779 error, *REPLACEMENT is set to NULL and this function also returns
780 NULL. */
781 PyObject *
782 apply_varobj_pretty_printer (PyObject *printer_obj,
783 struct value **replacement,
784 struct ui_file *stream)
785 {
786 PyObject *py_str = NULL;
787
788 *replacement = NULL;
789 py_str = pretty_print_one_value (printer_obj, replacement);
790
791 if (*replacement == NULL && py_str == NULL)
792 print_stack_unless_memory_error (stream);
793
794 return py_str;
795 }
796
797 /* Find a pretty-printer object for the varobj module. Returns a new
798 reference to the object if successful; returns NULL if not. VALUE
799 is the value for which a printer tests to determine if it
800 can pretty-print the value. */
801 PyObject *
802 gdbpy_get_varobj_pretty_printer (struct value *value)
803 {
804 PyObject *val_obj;
805 PyObject *pretty_printer = NULL;
806 volatile struct gdb_exception except;
807
808 TRY_CATCH (except, RETURN_MASK_ALL)
809 {
810 value = value_copy (value);
811 }
812 GDB_PY_HANDLE_EXCEPTION (except);
813
814 val_obj = value_to_value_object (value);
815 if (! val_obj)
816 return NULL;
817
818 pretty_printer = find_pretty_printer (val_obj);
819 Py_DECREF (val_obj);
820 return pretty_printer;
821 }
822
823 /* A Python function which wraps find_pretty_printer and instantiates
824 the resulting class. This accepts a Value argument and returns a
825 pretty printer instance, or None. This function is useful as an
826 argument to the MI command -var-set-visualizer. */
827 PyObject *
828 gdbpy_default_visualizer (PyObject *self, PyObject *args)
829 {
830 PyObject *val_obj;
831 PyObject *cons;
832 struct value *value;
833
834 if (! PyArg_ParseTuple (args, "O", &val_obj))
835 return NULL;
836 value = value_object_to_value (val_obj);
837 if (! value)
838 {
839 PyErr_SetString (PyExc_TypeError,
840 _("Argument must be a gdb.Value."));
841 return NULL;
842 }
843
844 cons = find_pretty_printer (val_obj);
845 return cons;
846 }