1 /* Python pretty-printing 2 3 Copyright (C) 2008-2014 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 */ 856