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