1 /* Python interface to values. 2 3 Copyright (C) 2008-2016 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 "charset.h" 22 #include "value.h" 23 #include "language.h" 24 #include "dfp.h" 25 #include "valprint.h" 26 #include "infcall.h" 27 #include "expression.h" 28 #include "cp-abi.h" 29 #include "python.h" 30 31 #include "python-internal.h" 32 33 /* Even though Python scalar types directly map to host types, we use 34 target types here to remain consistent with the values system in 35 GDB (which uses target arithmetic). */ 36 37 /* Python's integer type corresponds to C's long type. */ 38 #define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long 39 40 /* Python's float type corresponds to C's double type. */ 41 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double 42 43 /* Python's long type corresponds to C's long long type. */ 44 #define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long 45 46 /* Python's long type corresponds to C's long long type. Unsigned version. */ 47 #define builtin_type_upylong builtin_type \ 48 (python_gdbarch)->builtin_unsigned_long_long 49 50 #define builtin_type_pybool \ 51 language_bool_type (python_language, python_gdbarch) 52 53 #define builtin_type_pychar \ 54 language_string_char_type (python_language, python_gdbarch) 55 56 typedef struct value_object { 57 PyObject_HEAD 58 struct value_object *next; 59 struct value_object *prev; 60 struct value *value; 61 PyObject *address; 62 PyObject *type; 63 PyObject *dynamic_type; 64 } value_object; 65 66 /* List of all values which are currently exposed to Python. It is 67 maintained so that when an objfile is discarded, preserve_values 68 can copy the values' types if needed. */ 69 /* This variable is unnecessarily initialized to NULL in order to 70 work around a linker bug on MacOS. */ 71 static value_object *values_in_python = NULL; 72 73 /* Called by the Python interpreter when deallocating a value object. */ 74 static void 75 valpy_dealloc (PyObject *obj) 76 { 77 value_object *self = (value_object *) obj; 78 79 /* Remove SELF from the global list. */ 80 if (self->prev) 81 self->prev->next = self->next; 82 else 83 { 84 gdb_assert (values_in_python == self); 85 values_in_python = self->next; 86 } 87 if (self->next) 88 self->next->prev = self->prev; 89 90 value_free (self->value); 91 92 if (self->address) 93 /* Use braces to appease gcc warning. *sigh* */ 94 { 95 Py_DECREF (self->address); 96 } 97 98 if (self->type) 99 { 100 Py_DECREF (self->type); 101 } 102 103 Py_XDECREF (self->dynamic_type); 104 105 Py_TYPE (self)->tp_free (self); 106 } 107 108 /* Helper to push a Value object on the global list. */ 109 static void 110 note_value (value_object *value_obj) 111 { 112 value_obj->next = values_in_python; 113 if (value_obj->next) 114 value_obj->next->prev = value_obj; 115 value_obj->prev = NULL; 116 values_in_python = value_obj; 117 } 118 119 /* Called when a new gdb.Value object needs to be allocated. Returns NULL on 120 error, with a python exception set. */ 121 static PyObject * 122 valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords) 123 { 124 struct value *value = NULL; /* Initialize to appease gcc warning. */ 125 value_object *value_obj; 126 127 if (PyTuple_Size (args) != 1) 128 { 129 PyErr_SetString (PyExc_TypeError, _("Value object creation takes only " 130 "1 argument")); 131 return NULL; 132 } 133 134 value_obj = (value_object *) subtype->tp_alloc (subtype, 1); 135 if (value_obj == NULL) 136 { 137 PyErr_SetString (PyExc_MemoryError, _("Could not allocate memory to " 138 "create Value object.")); 139 return NULL; 140 } 141 142 value = convert_value_from_python (PyTuple_GetItem (args, 0)); 143 if (value == NULL) 144 { 145 subtype->tp_free (value_obj); 146 return NULL; 147 } 148 149 value_obj->value = value; 150 release_value_or_incref (value); 151 value_obj->address = NULL; 152 value_obj->type = NULL; 153 value_obj->dynamic_type = NULL; 154 note_value (value_obj); 155 156 return (PyObject *) value_obj; 157 } 158 159 /* Iterate over all the Value objects, calling preserve_one_value on 160 each. */ 161 void 162 gdbpy_preserve_values (const struct extension_language_defn *extlang, 163 struct objfile *objfile, htab_t copied_types) 164 { 165 value_object *iter; 166 167 for (iter = values_in_python; iter; iter = iter->next) 168 preserve_one_value (iter->value, objfile, copied_types); 169 } 170 171 /* Given a value of a pointer type, apply the C unary * operator to it. */ 172 static PyObject * 173 valpy_dereference (PyObject *self, PyObject *args) 174 { 175 PyObject *result = NULL; 176 177 TRY 178 { 179 struct value *res_val; 180 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 181 182 res_val = value_ind (((value_object *) self)->value); 183 result = value_to_value_object (res_val); 184 do_cleanups (cleanup); 185 } 186 CATCH (except, RETURN_MASK_ALL) 187 { 188 GDB_PY_HANDLE_EXCEPTION (except); 189 } 190 END_CATCH 191 192 return result; 193 } 194 195 /* Given a value of a pointer type or a reference type, return the value 196 referenced. The difference between this function and valpy_dereference is 197 that the latter applies * unary operator to a value, which need not always 198 result in the value referenced. For example, for a value which is a reference 199 to an 'int' pointer ('int *'), valpy_dereference will result in a value of 200 type 'int' while valpy_referenced_value will result in a value of type 201 'int *'. */ 202 203 static PyObject * 204 valpy_referenced_value (PyObject *self, PyObject *args) 205 { 206 PyObject *result = NULL; 207 208 TRY 209 { 210 struct value *self_val, *res_val; 211 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 212 213 self_val = ((value_object *) self)->value; 214 switch (TYPE_CODE (check_typedef (value_type (self_val)))) 215 { 216 case TYPE_CODE_PTR: 217 res_val = value_ind (self_val); 218 break; 219 case TYPE_CODE_REF: 220 res_val = coerce_ref (self_val); 221 break; 222 default: 223 error(_("Trying to get the referenced value from a value which is " 224 "neither a pointer nor a reference.")); 225 } 226 227 result = value_to_value_object (res_val); 228 do_cleanups (cleanup); 229 } 230 CATCH (except, RETURN_MASK_ALL) 231 { 232 GDB_PY_HANDLE_EXCEPTION (except); 233 } 234 END_CATCH 235 236 return result; 237 } 238 239 /* Return a value which is a reference to the value. */ 240 241 static PyObject * 242 valpy_reference_value (PyObject *self, PyObject *args) 243 { 244 PyObject *result = NULL; 245 246 TRY 247 { 248 struct value *self_val; 249 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 250 251 self_val = ((value_object *) self)->value; 252 result = value_to_value_object (value_ref (self_val)); 253 254 do_cleanups (cleanup); 255 } 256 CATCH (except, RETURN_MASK_ALL) 257 { 258 GDB_PY_HANDLE_EXCEPTION (except); 259 } 260 END_CATCH 261 262 return result; 263 } 264 265 /* Return a "const" qualified version of the value. */ 266 267 static PyObject * 268 valpy_const_value (PyObject *self, PyObject *args) 269 { 270 PyObject *result = NULL; 271 272 TRY 273 { 274 struct value *self_val, *res_val; 275 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 276 277 self_val = ((value_object *) self)->value; 278 res_val = make_cv_value (1, 0, self_val); 279 result = value_to_value_object (res_val); 280 281 do_cleanups (cleanup); 282 } 283 CATCH (except, RETURN_MASK_ALL) 284 { 285 GDB_PY_HANDLE_EXCEPTION (except); 286 } 287 END_CATCH 288 289 return result; 290 } 291 292 /* Return "&value". */ 293 static PyObject * 294 valpy_get_address (PyObject *self, void *closure) 295 { 296 value_object *val_obj = (value_object *) self; 297 298 if (!val_obj->address) 299 { 300 TRY 301 { 302 struct value *res_val; 303 struct cleanup *cleanup 304 = make_cleanup_value_free_to_mark (value_mark ()); 305 306 res_val = value_addr (val_obj->value); 307 val_obj->address = value_to_value_object (res_val); 308 do_cleanups (cleanup); 309 } 310 CATCH (except, RETURN_MASK_ALL) 311 { 312 val_obj->address = Py_None; 313 Py_INCREF (Py_None); 314 } 315 END_CATCH 316 } 317 318 Py_XINCREF (val_obj->address); 319 320 return val_obj->address; 321 } 322 323 /* Return type of the value. */ 324 static PyObject * 325 valpy_get_type (PyObject *self, void *closure) 326 { 327 value_object *obj = (value_object *) self; 328 329 if (!obj->type) 330 { 331 obj->type = type_to_type_object (value_type (obj->value)); 332 if (!obj->type) 333 return NULL; 334 } 335 Py_INCREF (obj->type); 336 return obj->type; 337 } 338 339 /* Return dynamic type of the value. */ 340 341 static PyObject * 342 valpy_get_dynamic_type (PyObject *self, void *closure) 343 { 344 value_object *obj = (value_object *) self; 345 struct type *type = NULL; 346 347 if (obj->dynamic_type != NULL) 348 { 349 Py_INCREF (obj->dynamic_type); 350 return obj->dynamic_type; 351 } 352 353 TRY 354 { 355 struct value *val = obj->value; 356 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 357 358 type = value_type (val); 359 type = check_typedef (type); 360 361 if (((TYPE_CODE (type) == TYPE_CODE_PTR) 362 || (TYPE_CODE (type) == TYPE_CODE_REF)) 363 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT)) 364 { 365 struct value *target; 366 int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR; 367 368 if (was_pointer) 369 target = value_ind (val); 370 else 371 target = coerce_ref (val); 372 type = value_rtti_type (target, NULL, NULL, NULL); 373 374 if (type) 375 { 376 if (was_pointer) 377 type = lookup_pointer_type (type); 378 else 379 type = lookup_reference_type (type); 380 } 381 } 382 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) 383 type = value_rtti_type (val, NULL, NULL, NULL); 384 else 385 { 386 /* Re-use object's static type. */ 387 type = NULL; 388 } 389 390 do_cleanups (cleanup); 391 } 392 CATCH (except, RETURN_MASK_ALL) 393 { 394 GDB_PY_HANDLE_EXCEPTION (except); 395 } 396 END_CATCH 397 398 if (type == NULL) 399 obj->dynamic_type = valpy_get_type (self, NULL); 400 else 401 obj->dynamic_type = type_to_type_object (type); 402 403 Py_XINCREF (obj->dynamic_type); 404 return obj->dynamic_type; 405 } 406 407 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) -> 408 string. Return a PyObject representing a lazy_string_object type. 409 A lazy string is a pointer to a string with an optional encoding and 410 length. If ENCODING is not given, encoding is set to None. If an 411 ENCODING is provided the encoding parameter is set to ENCODING, but 412 the string is not encoded. If LENGTH is provided then the length 413 parameter is set to LENGTH, otherwise length will be set to -1 (first 414 null of appropriate with). */ 415 static PyObject * 416 valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw) 417 { 418 gdb_py_longest length = -1; 419 struct value *value = ((value_object *) self)->value; 420 const char *user_encoding = NULL; 421 static char *keywords[] = { "encoding", "length", NULL }; 422 PyObject *str_obj = NULL; 423 424 if (!PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG, keywords, 425 &user_encoding, &length)) 426 return NULL; 427 428 TRY 429 { 430 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 431 432 if (TYPE_CODE (value_type (value)) == TYPE_CODE_PTR) 433 value = value_ind (value); 434 435 str_obj = gdbpy_create_lazy_string_object (value_address (value), length, 436 user_encoding, 437 value_type (value)); 438 439 do_cleanups (cleanup); 440 } 441 CATCH (except, RETURN_MASK_ALL) 442 { 443 GDB_PY_HANDLE_EXCEPTION (except); 444 } 445 END_CATCH 446 447 return str_obj; 448 } 449 450 /* Implementation of gdb.Value.string ([encoding] [, errors] 451 [, length]) -> string. Return Unicode string with value contents. 452 If ENCODING is not given, the string is assumed to be encoded in 453 the target's charset. If LENGTH is provided, only fetch string to 454 the length provided. */ 455 456 static PyObject * 457 valpy_string (PyObject *self, PyObject *args, PyObject *kw) 458 { 459 int length = -1; 460 gdb_byte *buffer; 461 struct value *value = ((value_object *) self)->value; 462 PyObject *unicode; 463 const char *encoding = NULL; 464 const char *errors = NULL; 465 const char *user_encoding = NULL; 466 const char *la_encoding = NULL; 467 struct type *char_type; 468 static char *keywords[] = { "encoding", "errors", "length", NULL }; 469 470 if (!PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords, 471 &user_encoding, &errors, &length)) 472 return NULL; 473 474 TRY 475 { 476 LA_GET_STRING (value, &buffer, &length, &char_type, &la_encoding); 477 } 478 CATCH (except, RETURN_MASK_ALL) 479 { 480 GDB_PY_HANDLE_EXCEPTION (except); 481 } 482 END_CATCH 483 484 encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding; 485 unicode = PyUnicode_Decode ((const char *) buffer, 486 length * TYPE_LENGTH (char_type), 487 encoding, errors); 488 xfree (buffer); 489 490 return unicode; 491 } 492 493 /* A helper function that implements the various cast operators. */ 494 495 static PyObject * 496 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op) 497 { 498 PyObject *type_obj, *result = NULL; 499 struct type *type; 500 501 if (! PyArg_ParseTuple (args, "O", &type_obj)) 502 return NULL; 503 504 type = type_object_to_type (type_obj); 505 if (! type) 506 { 507 PyErr_SetString (PyExc_RuntimeError, 508 _("Argument must be a type.")); 509 return NULL; 510 } 511 512 TRY 513 { 514 struct value *val = ((value_object *) self)->value; 515 struct value *res_val; 516 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 517 518 if (op == UNOP_DYNAMIC_CAST) 519 res_val = value_dynamic_cast (type, val); 520 else if (op == UNOP_REINTERPRET_CAST) 521 res_val = value_reinterpret_cast (type, val); 522 else 523 { 524 gdb_assert (op == UNOP_CAST); 525 res_val = value_cast (type, val); 526 } 527 528 result = value_to_value_object (res_val); 529 do_cleanups (cleanup); 530 } 531 CATCH (except, RETURN_MASK_ALL) 532 { 533 GDB_PY_HANDLE_EXCEPTION (except); 534 } 535 END_CATCH 536 537 return result; 538 } 539 540 /* Implementation of the "cast" method. */ 541 542 static PyObject * 543 valpy_cast (PyObject *self, PyObject *args) 544 { 545 return valpy_do_cast (self, args, UNOP_CAST); 546 } 547 548 /* Implementation of the "dynamic_cast" method. */ 549 550 static PyObject * 551 valpy_dynamic_cast (PyObject *self, PyObject *args) 552 { 553 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST); 554 } 555 556 /* Implementation of the "reinterpret_cast" method. */ 557 558 static PyObject * 559 valpy_reinterpret_cast (PyObject *self, PyObject *args) 560 { 561 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST); 562 } 563 564 static Py_ssize_t 565 valpy_length (PyObject *self) 566 { 567 /* We don't support getting the number of elements in a struct / class. */ 568 PyErr_SetString (PyExc_NotImplementedError, 569 _("Invalid operation on gdb.Value.")); 570 return -1; 571 } 572 573 /* Return 1 if the gdb.Field object FIELD is present in the value V. 574 Returns 0 otherwise. If any Python error occurs, -1 is returned. */ 575 576 static int 577 value_has_field (struct value *v, PyObject *field) 578 { 579 struct type *parent_type, *val_type; 580 enum type_code type_code; 581 PyObject *type_object = PyObject_GetAttrString (field, "parent_type"); 582 int has_field = 0; 583 584 if (type_object == NULL) 585 return -1; 586 587 parent_type = type_object_to_type (type_object); 588 Py_DECREF (type_object); 589 if (parent_type == NULL) 590 { 591 PyErr_SetString (PyExc_TypeError, 592 _("'parent_type' attribute of gdb.Field object is not a" 593 "gdb.Type object.")); 594 return -1; 595 } 596 597 TRY 598 { 599 val_type = value_type (v); 600 val_type = check_typedef (val_type); 601 if (TYPE_CODE (val_type) == TYPE_CODE_REF 602 || TYPE_CODE (val_type) == TYPE_CODE_PTR) 603 val_type = check_typedef (TYPE_TARGET_TYPE (val_type)); 604 605 type_code = TYPE_CODE (val_type); 606 if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION) 607 && types_equal (val_type, parent_type)) 608 has_field = 1; 609 else 610 has_field = 0; 611 } 612 CATCH (except, RETURN_MASK_ALL) 613 { 614 GDB_PY_SET_HANDLE_EXCEPTION (except); 615 } 616 END_CATCH 617 618 return has_field; 619 } 620 621 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD. 622 Returns 1 if the flag value is true, 0 if it is false, and -1 if 623 a Python error occurs. */ 624 625 static int 626 get_field_flag (PyObject *field, const char *flag_name) 627 { 628 int flag_value; 629 PyObject *flag_object = PyObject_GetAttrString (field, flag_name); 630 631 if (flag_object == NULL) 632 return -1; 633 634 flag_value = PyObject_IsTrue (flag_object); 635 Py_DECREF (flag_object); 636 637 return flag_value; 638 } 639 640 /* Return the "type" attribute of a gdb.Field object. 641 Returns NULL on error, with a Python exception set. */ 642 643 static struct type * 644 get_field_type (PyObject *field) 645 { 646 PyObject *ftype_obj = PyObject_GetAttrString (field, "type"); 647 struct type *ftype; 648 649 if (ftype_obj == NULL) 650 return NULL; 651 ftype = type_object_to_type (ftype_obj); 652 Py_DECREF (ftype_obj); 653 if (ftype == NULL) 654 PyErr_SetString (PyExc_TypeError, 655 _("'type' attribute of gdb.Field object is not a " 656 "gdb.Type object.")); 657 658 return ftype; 659 } 660 661 /* Given string name or a gdb.Field object corresponding to an element inside 662 a structure, return its value object. Returns NULL on error, with a python 663 exception set. */ 664 665 static PyObject * 666 valpy_getitem (PyObject *self, PyObject *key) 667 { 668 struct gdb_exception except = exception_none; 669 value_object *self_value = (value_object *) self; 670 char *field = NULL; 671 struct type *base_class_type = NULL, *field_type = NULL; 672 long bitpos = -1; 673 PyObject *result = NULL; 674 675 if (gdbpy_is_string (key)) 676 { 677 field = python_string_to_host_string (key); 678 if (field == NULL) 679 return NULL; 680 } 681 else if (gdbpy_is_field (key)) 682 { 683 int is_base_class, valid_field; 684 685 valid_field = value_has_field (self_value->value, key); 686 if (valid_field < 0) 687 return NULL; 688 else if (valid_field == 0) 689 { 690 PyErr_SetString (PyExc_TypeError, 691 _("Invalid lookup for a field not contained in " 692 "the value.")); 693 694 return NULL; 695 } 696 697 is_base_class = get_field_flag (key, "is_base_class"); 698 if (is_base_class < 0) 699 return NULL; 700 else if (is_base_class > 0) 701 { 702 base_class_type = get_field_type (key); 703 if (base_class_type == NULL) 704 return NULL; 705 } 706 else 707 { 708 PyObject *name_obj = PyObject_GetAttrString (key, "name"); 709 710 if (name_obj == NULL) 711 return NULL; 712 713 if (name_obj != Py_None) 714 { 715 field = python_string_to_host_string (name_obj); 716 Py_DECREF (name_obj); 717 if (field == NULL) 718 return NULL; 719 } 720 else 721 { 722 PyObject *bitpos_obj; 723 int valid; 724 725 Py_DECREF (name_obj); 726 727 if (!PyObject_HasAttrString (key, "bitpos")) 728 { 729 PyErr_SetString (PyExc_AttributeError, 730 _("gdb.Field object has no name and no " 731 "'bitpos' attribute.")); 732 733 return NULL; 734 } 735 bitpos_obj = PyObject_GetAttrString (key, "bitpos"); 736 if (bitpos_obj == NULL) 737 return NULL; 738 valid = gdb_py_int_as_long (bitpos_obj, &bitpos); 739 Py_DECREF (bitpos_obj); 740 if (!valid) 741 return NULL; 742 743 field_type = get_field_type (key); 744 if (field_type == NULL) 745 return NULL; 746 } 747 } 748 } 749 750 TRY 751 { 752 struct value *tmp = self_value->value; 753 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 754 struct value *res_val = NULL; 755 756 if (field) 757 res_val = value_struct_elt (&tmp, NULL, field, 0, NULL); 758 else if (bitpos >= 0) 759 res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type, 760 "struct/class/union"); 761 else if (base_class_type != NULL) 762 { 763 struct type *val_type; 764 765 val_type = check_typedef (value_type (tmp)); 766 if (TYPE_CODE (val_type) == TYPE_CODE_PTR) 767 res_val = value_cast (lookup_pointer_type (base_class_type), tmp); 768 else if (TYPE_CODE (val_type) == TYPE_CODE_REF) 769 res_val = value_cast (lookup_reference_type (base_class_type), tmp); 770 else 771 res_val = value_cast (base_class_type, tmp); 772 } 773 else 774 { 775 /* Assume we are attempting an array access, and let the 776 value code throw an exception if the index has an invalid 777 type. */ 778 struct value *idx = convert_value_from_python (key); 779 780 if (idx != NULL) 781 { 782 /* Check the value's type is something that can be accessed via 783 a subscript. */ 784 struct type *type; 785 786 tmp = coerce_ref (tmp); 787 type = check_typedef (value_type (tmp)); 788 if (TYPE_CODE (type) != TYPE_CODE_ARRAY 789 && TYPE_CODE (type) != TYPE_CODE_PTR) 790 error (_("Cannot subscript requested type.")); 791 else 792 res_val = value_subscript (tmp, value_as_long (idx)); 793 } 794 } 795 796 if (res_val) 797 result = value_to_value_object (res_val); 798 do_cleanups (cleanup); 799 } 800 CATCH (ex, RETURN_MASK_ALL) 801 { 802 except = ex; 803 } 804 END_CATCH 805 806 xfree (field); 807 GDB_PY_HANDLE_EXCEPTION (except); 808 809 return result; 810 } 811 812 static int 813 valpy_setitem (PyObject *self, PyObject *key, PyObject *value) 814 { 815 PyErr_Format (PyExc_NotImplementedError, 816 _("Setting of struct elements is not currently supported.")); 817 return -1; 818 } 819 820 /* Called by the Python interpreter to perform an inferior function 821 call on the value. Returns NULL on error, with a python exception set. */ 822 static PyObject * 823 valpy_call (PyObject *self, PyObject *args, PyObject *keywords) 824 { 825 Py_ssize_t args_count; 826 struct value *function = ((value_object *) self)->value; 827 struct value **vargs = NULL; 828 struct type *ftype = NULL; 829 struct value *mark = value_mark (); 830 PyObject *result = NULL; 831 832 TRY 833 { 834 ftype = check_typedef (value_type (function)); 835 } 836 CATCH (except, RETURN_MASK_ALL) 837 { 838 GDB_PY_HANDLE_EXCEPTION (except); 839 } 840 END_CATCH 841 842 if (TYPE_CODE (ftype) != TYPE_CODE_FUNC) 843 { 844 PyErr_SetString (PyExc_RuntimeError, 845 _("Value is not callable (not TYPE_CODE_FUNC).")); 846 return NULL; 847 } 848 849 if (! PyTuple_Check (args)) 850 { 851 PyErr_SetString (PyExc_TypeError, 852 _("Inferior arguments must be provided in a tuple.")); 853 return NULL; 854 } 855 856 args_count = PyTuple_Size (args); 857 if (args_count > 0) 858 { 859 int i; 860 861 vargs = XALLOCAVEC (struct value *, args_count); 862 for (i = 0; i < args_count; i++) 863 { 864 PyObject *item = PyTuple_GetItem (args, i); 865 866 if (item == NULL) 867 return NULL; 868 869 vargs[i] = convert_value_from_python (item); 870 if (vargs[i] == NULL) 871 return NULL; 872 } 873 } 874 875 TRY 876 { 877 struct cleanup *cleanup = make_cleanup_value_free_to_mark (mark); 878 struct value *return_value; 879 880 return_value = call_function_by_hand (function, args_count, vargs); 881 result = value_to_value_object (return_value); 882 do_cleanups (cleanup); 883 } 884 CATCH (except, RETURN_MASK_ALL) 885 { 886 GDB_PY_HANDLE_EXCEPTION (except); 887 } 888 END_CATCH 889 890 return result; 891 } 892 893 /* Called by the Python interpreter to obtain string representation 894 of the object. */ 895 static PyObject * 896 valpy_str (PyObject *self) 897 { 898 char *s = NULL; 899 PyObject *result; 900 struct value_print_options opts; 901 902 get_user_print_options (&opts); 903 opts.deref_ref = 0; 904 905 TRY 906 { 907 struct ui_file *stb = mem_fileopen (); 908 struct cleanup *old_chain = make_cleanup_ui_file_delete (stb); 909 910 common_val_print (((value_object *) self)->value, stb, 0, 911 &opts, python_language); 912 s = ui_file_xstrdup (stb, NULL); 913 914 do_cleanups (old_chain); 915 } 916 CATCH (except, RETURN_MASK_ALL) 917 { 918 GDB_PY_HANDLE_EXCEPTION (except); 919 } 920 END_CATCH 921 922 result = PyUnicode_Decode (s, strlen (s), host_charset (), NULL); 923 xfree (s); 924 925 return result; 926 } 927 928 /* Implements gdb.Value.is_optimized_out. */ 929 static PyObject * 930 valpy_get_is_optimized_out (PyObject *self, void *closure) 931 { 932 struct value *value = ((value_object *) self)->value; 933 int opt = 0; 934 935 TRY 936 { 937 opt = value_optimized_out (value); 938 } 939 CATCH (except, RETURN_MASK_ALL) 940 { 941 GDB_PY_HANDLE_EXCEPTION (except); 942 } 943 END_CATCH 944 945 if (opt) 946 Py_RETURN_TRUE; 947 948 Py_RETURN_FALSE; 949 } 950 951 /* Implements gdb.Value.is_lazy. */ 952 static PyObject * 953 valpy_get_is_lazy (PyObject *self, void *closure) 954 { 955 struct value *value = ((value_object *) self)->value; 956 int opt = 0; 957 958 TRY 959 { 960 opt = value_lazy (value); 961 } 962 CATCH (except, RETURN_MASK_ALL) 963 { 964 GDB_PY_HANDLE_EXCEPTION (except); 965 } 966 END_CATCH 967 968 if (opt) 969 Py_RETURN_TRUE; 970 971 Py_RETURN_FALSE; 972 } 973 974 /* Implements gdb.Value.fetch_lazy (). */ 975 static PyObject * 976 valpy_fetch_lazy (PyObject *self, PyObject *args) 977 { 978 struct value *value = ((value_object *) self)->value; 979 980 TRY 981 { 982 if (value_lazy (value)) 983 value_fetch_lazy (value); 984 } 985 CATCH (except, RETURN_MASK_ALL) 986 { 987 GDB_PY_HANDLE_EXCEPTION (except); 988 } 989 END_CATCH 990 991 Py_RETURN_NONE; 992 } 993 994 /* Calculate and return the address of the PyObject as the value of 995 the builtin __hash__ call. */ 996 static Py_hash_t 997 valpy_hash (PyObject *self) 998 { 999 return (intptr_t) self; 1000 } 1001 1002 enum valpy_opcode 1003 { 1004 VALPY_ADD, 1005 VALPY_SUB, 1006 VALPY_MUL, 1007 VALPY_DIV, 1008 VALPY_REM, 1009 VALPY_POW, 1010 VALPY_LSH, 1011 VALPY_RSH, 1012 VALPY_BITAND, 1013 VALPY_BITOR, 1014 VALPY_BITXOR 1015 }; 1016 1017 /* If TYPE is a reference, return the target; otherwise return TYPE. */ 1018 #define STRIP_REFERENCE(TYPE) \ 1019 ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE)) 1020 1021 /* Helper for valpy_binop. Returns a value object which is the result 1022 of applying the operation specified by OPCODE to the given 1023 arguments. Throws a GDB exception on error. */ 1024 1025 static PyObject * 1026 valpy_binop_throw (enum valpy_opcode opcode, PyObject *self, PyObject *other) 1027 { 1028 PyObject *result = NULL; 1029 1030 struct value *arg1, *arg2; 1031 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 1032 struct value *res_val = NULL; 1033 enum exp_opcode op = OP_NULL; 1034 int handled = 0; 1035 1036 /* If the gdb.Value object is the second operand, then it will be 1037 passed to us as the OTHER argument, and SELF will be an entirely 1038 different kind of object, altogether. Because of this, we can't 1039 assume self is a gdb.Value object and need to convert it from 1040 python as well. */ 1041 arg1 = convert_value_from_python (self); 1042 if (arg1 == NULL) 1043 { 1044 do_cleanups (cleanup); 1045 return NULL; 1046 } 1047 1048 arg2 = convert_value_from_python (other); 1049 if (arg2 == NULL) 1050 { 1051 do_cleanups (cleanup); 1052 return NULL; 1053 } 1054 1055 switch (opcode) 1056 { 1057 case VALPY_ADD: 1058 { 1059 struct type *ltype = value_type (arg1); 1060 struct type *rtype = value_type (arg2); 1061 1062 ltype = check_typedef (ltype); 1063 ltype = STRIP_REFERENCE (ltype); 1064 rtype = check_typedef (rtype); 1065 rtype = STRIP_REFERENCE (rtype); 1066 1067 handled = 1; 1068 if (TYPE_CODE (ltype) == TYPE_CODE_PTR 1069 && is_integral_type (rtype)) 1070 res_val = value_ptradd (arg1, value_as_long (arg2)); 1071 else if (TYPE_CODE (rtype) == TYPE_CODE_PTR 1072 && is_integral_type (ltype)) 1073 res_val = value_ptradd (arg2, value_as_long (arg1)); 1074 else 1075 { 1076 handled = 0; 1077 op = BINOP_ADD; 1078 } 1079 } 1080 break; 1081 case VALPY_SUB: 1082 { 1083 struct type *ltype = value_type (arg1); 1084 struct type *rtype = value_type (arg2); 1085 1086 ltype = check_typedef (ltype); 1087 ltype = STRIP_REFERENCE (ltype); 1088 rtype = check_typedef (rtype); 1089 rtype = STRIP_REFERENCE (rtype); 1090 1091 handled = 1; 1092 if (TYPE_CODE (ltype) == TYPE_CODE_PTR 1093 && TYPE_CODE (rtype) == TYPE_CODE_PTR) 1094 /* A ptrdiff_t for the target would be preferable here. */ 1095 res_val = value_from_longest (builtin_type_pyint, 1096 value_ptrdiff (arg1, arg2)); 1097 else if (TYPE_CODE (ltype) == TYPE_CODE_PTR 1098 && is_integral_type (rtype)) 1099 res_val = value_ptradd (arg1, - value_as_long (arg2)); 1100 else 1101 { 1102 handled = 0; 1103 op = BINOP_SUB; 1104 } 1105 } 1106 break; 1107 case VALPY_MUL: 1108 op = BINOP_MUL; 1109 break; 1110 case VALPY_DIV: 1111 op = BINOP_DIV; 1112 break; 1113 case VALPY_REM: 1114 op = BINOP_REM; 1115 break; 1116 case VALPY_POW: 1117 op = BINOP_EXP; 1118 break; 1119 case VALPY_LSH: 1120 op = BINOP_LSH; 1121 break; 1122 case VALPY_RSH: 1123 op = BINOP_RSH; 1124 break; 1125 case VALPY_BITAND: 1126 op = BINOP_BITWISE_AND; 1127 break; 1128 case VALPY_BITOR: 1129 op = BINOP_BITWISE_IOR; 1130 break; 1131 case VALPY_BITXOR: 1132 op = BINOP_BITWISE_XOR; 1133 break; 1134 } 1135 1136 if (!handled) 1137 { 1138 if (binop_user_defined_p (op, arg1, arg2)) 1139 res_val = value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL); 1140 else 1141 res_val = value_binop (arg1, arg2, op); 1142 } 1143 1144 if (res_val) 1145 result = value_to_value_object (res_val); 1146 1147 do_cleanups (cleanup); 1148 return result; 1149 } 1150 1151 /* Returns a value object which is the result of applying the operation 1152 specified by OPCODE to the given arguments. Returns NULL on error, with 1153 a python exception set. */ 1154 static PyObject * 1155 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other) 1156 { 1157 PyObject *result = NULL; 1158 1159 TRY 1160 { 1161 result = valpy_binop_throw (opcode, self, other); 1162 } 1163 CATCH (except, RETURN_MASK_ALL) 1164 { 1165 GDB_PY_HANDLE_EXCEPTION (except); 1166 } 1167 END_CATCH 1168 1169 return result; 1170 } 1171 1172 static PyObject * 1173 valpy_add (PyObject *self, PyObject *other) 1174 { 1175 return valpy_binop (VALPY_ADD, self, other); 1176 } 1177 1178 static PyObject * 1179 valpy_subtract (PyObject *self, PyObject *other) 1180 { 1181 return valpy_binop (VALPY_SUB, self, other); 1182 } 1183 1184 static PyObject * 1185 valpy_multiply (PyObject *self, PyObject *other) 1186 { 1187 return valpy_binop (VALPY_MUL, self, other); 1188 } 1189 1190 static PyObject * 1191 valpy_divide (PyObject *self, PyObject *other) 1192 { 1193 return valpy_binop (VALPY_DIV, self, other); 1194 } 1195 1196 static PyObject * 1197 valpy_remainder (PyObject *self, PyObject *other) 1198 { 1199 return valpy_binop (VALPY_REM, self, other); 1200 } 1201 1202 static PyObject * 1203 valpy_power (PyObject *self, PyObject *other, PyObject *unused) 1204 { 1205 /* We don't support the ternary form of pow. I don't know how to express 1206 that, so let's just throw NotImplementedError to at least do something 1207 about it. */ 1208 if (unused != Py_None) 1209 { 1210 PyErr_SetString (PyExc_NotImplementedError, 1211 "Invalid operation on gdb.Value."); 1212 return NULL; 1213 } 1214 1215 return valpy_binop (VALPY_POW, self, other); 1216 } 1217 1218 static PyObject * 1219 valpy_negative (PyObject *self) 1220 { 1221 PyObject *result = NULL; 1222 1223 TRY 1224 { 1225 /* Perhaps overkill, but consistency has some virtue. */ 1226 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 1227 struct value *val; 1228 1229 val = value_neg (((value_object *) self)->value); 1230 result = value_to_value_object (val); 1231 do_cleanups (cleanup); 1232 } 1233 CATCH (except, RETURN_MASK_ALL) 1234 { 1235 GDB_PY_HANDLE_EXCEPTION (except); 1236 } 1237 END_CATCH 1238 1239 return result; 1240 } 1241 1242 static PyObject * 1243 valpy_positive (PyObject *self) 1244 { 1245 return value_to_value_object (((value_object *) self)->value); 1246 } 1247 1248 static PyObject * 1249 valpy_absolute (PyObject *self) 1250 { 1251 struct value *value = ((value_object *) self)->value; 1252 int isabs = 1; 1253 1254 TRY 1255 { 1256 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); 1257 1258 if (value_less (value, value_zero (value_type (value), not_lval))) 1259 isabs = 0; 1260 1261 do_cleanups (cleanup); 1262 } 1263 CATCH (except, RETURN_MASK_ALL) 1264 { 1265 GDB_PY_HANDLE_EXCEPTION (except); 1266 } 1267 END_CATCH 1268 1269 if (isabs) 1270 return valpy_positive (self); 1271 else 1272 return valpy_negative (self); 1273 } 1274 1275 /* Implements boolean evaluation of gdb.Value. */ 1276 static int 1277 valpy_nonzero (PyObject *self) 1278 { 1279 struct gdb_exception except = exception_none; 1280 value_object *self_value = (value_object *) self; 1281 struct type *type; 1282 int nonzero = 0; /* Appease GCC warning. */ 1283 1284 TRY 1285 { 1286 type = check_typedef (value_type (self_value->value)); 1287 1288 if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR) 1289 nonzero = !!value_as_long (self_value->value); 1290 else if (TYPE_CODE (type) == TYPE_CODE_FLT) 1291 nonzero = value_as_double (self_value->value) != 0; 1292 else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT) 1293 nonzero = !decimal_is_zero (value_contents (self_value->value), 1294 TYPE_LENGTH (type), 1295 gdbarch_byte_order (get_type_arch (type))); 1296 else 1297 /* All other values are True. */ 1298 nonzero = 1; 1299 } 1300 CATCH (ex, RETURN_MASK_ALL) 1301 { 1302 except = ex; 1303 } 1304 END_CATCH 1305 1306 /* This is not documented in the Python documentation, but if this 1307 function fails, return -1 as slot_nb_nonzero does (the default 1308 Python nonzero function). */ 1309 GDB_PY_SET_HANDLE_EXCEPTION (except); 1310 1311 return nonzero; 1312 } 1313 1314 /* Implements ~ for value objects. */ 1315 static PyObject * 1316 valpy_invert (PyObject *self) 1317 { 1318 struct value *val = NULL; 1319 1320 TRY 1321 { 1322 val = value_complement (((value_object *) self)->value); 1323 } 1324 CATCH (except, RETURN_MASK_ALL) 1325 { 1326 GDB_PY_HANDLE_EXCEPTION (except); 1327 } 1328 END_CATCH 1329 1330 return value_to_value_object (val); 1331 } 1332 1333 /* Implements left shift for value objects. */ 1334 static PyObject * 1335 valpy_lsh (PyObject *self, PyObject *other) 1336 { 1337 return valpy_binop (VALPY_LSH, self, other); 1338 } 1339 1340 /* Implements right shift for value objects. */ 1341 static PyObject * 1342 valpy_rsh (PyObject *self, PyObject *other) 1343 { 1344 return valpy_binop (VALPY_RSH, self, other); 1345 } 1346 1347 /* Implements bitwise and for value objects. */ 1348 static PyObject * 1349 valpy_and (PyObject *self, PyObject *other) 1350 { 1351 return valpy_binop (VALPY_BITAND, self, other); 1352 } 1353 1354 /* Implements bitwise or for value objects. */ 1355 static PyObject * 1356 valpy_or (PyObject *self, PyObject *other) 1357 { 1358 return valpy_binop (VALPY_BITOR, self, other); 1359 } 1360 1361 /* Implements bitwise xor for value objects. */ 1362 static PyObject * 1363 valpy_xor (PyObject *self, PyObject *other) 1364 { 1365 return valpy_binop (VALPY_BITXOR, self, other); 1366 } 1367 1368 /* Helper for valpy_richcompare. Implements comparison operations for 1369 value objects. Returns true/false on success. Returns -1 with a 1370 Python exception set if a Python error is detected. Throws a GDB 1371 exception on other errors (memory error, etc.). */ 1372 1373 static int 1374 valpy_richcompare_throw (PyObject *self, PyObject *other, int op) 1375 { 1376 int result; 1377 struct value *value_other; 1378 struct value *value_self; 1379 struct value *mark = value_mark (); 1380 struct cleanup *cleanup; 1381 1382 value_other = convert_value_from_python (other); 1383 if (value_other == NULL) 1384 return -1; 1385 1386 cleanup = make_cleanup_value_free_to_mark (mark); 1387 1388 value_self = ((value_object *) self)->value; 1389 1390 switch (op) 1391 { 1392 case Py_LT: 1393 result = value_less (value_self, value_other); 1394 break; 1395 case Py_LE: 1396 result = value_less (value_self, value_other) 1397 || value_equal (value_self, value_other); 1398 break; 1399 case Py_EQ: 1400 result = value_equal (value_self, value_other); 1401 break; 1402 case Py_NE: 1403 result = !value_equal (value_self, value_other); 1404 break; 1405 case Py_GT: 1406 result = value_less (value_other, value_self); 1407 break; 1408 case Py_GE: 1409 result = (value_less (value_other, value_self) 1410 || value_equal (value_self, value_other)); 1411 break; 1412 default: 1413 /* Can't happen. */ 1414 PyErr_SetString (PyExc_NotImplementedError, 1415 _("Invalid operation on gdb.Value.")); 1416 result = -1; 1417 break; 1418 } 1419 1420 do_cleanups (cleanup); 1421 return result; 1422 } 1423 1424 1425 /* Implements comparison operations for value objects. Returns NULL on error, 1426 with a python exception set. */ 1427 static PyObject * 1428 valpy_richcompare (PyObject *self, PyObject *other, int op) 1429 { 1430 int result = 0; 1431 1432 if (other == Py_None) 1433 /* Comparing with None is special. From what I can tell, in Python 1434 None is smaller than anything else. */ 1435 switch (op) { 1436 case Py_LT: 1437 case Py_LE: 1438 case Py_EQ: 1439 Py_RETURN_FALSE; 1440 case Py_NE: 1441 case Py_GT: 1442 case Py_GE: 1443 Py_RETURN_TRUE; 1444 default: 1445 /* Can't happen. */ 1446 PyErr_SetString (PyExc_NotImplementedError, 1447 _("Invalid operation on gdb.Value.")); 1448 return NULL; 1449 } 1450 1451 TRY 1452 { 1453 result = valpy_richcompare_throw (self, other, op); 1454 } 1455 CATCH (except, RETURN_MASK_ALL) 1456 { 1457 GDB_PY_HANDLE_EXCEPTION (except); 1458 } 1459 END_CATCH 1460 1461 /* In this case, the Python exception has already been set. */ 1462 if (result < 0) 1463 return NULL; 1464 1465 if (result == 1) 1466 Py_RETURN_TRUE; 1467 1468 Py_RETURN_FALSE; 1469 } 1470 1471 #ifndef IS_PY3K 1472 /* Implements conversion to int. */ 1473 static PyObject * 1474 valpy_int (PyObject *self) 1475 { 1476 struct value *value = ((value_object *) self)->value; 1477 struct type *type = value_type (value); 1478 LONGEST l = 0; 1479 1480 TRY 1481 { 1482 if (!is_integral_type (type)) 1483 error (_("Cannot convert value to int.")); 1484 1485 l = value_as_long (value); 1486 } 1487 CATCH (except, RETURN_MASK_ALL) 1488 { 1489 GDB_PY_HANDLE_EXCEPTION (except); 1490 } 1491 END_CATCH 1492 1493 return gdb_py_object_from_longest (l); 1494 } 1495 #endif 1496 1497 /* Implements conversion to long. */ 1498 static PyObject * 1499 valpy_long (PyObject *self) 1500 { 1501 struct value *value = ((value_object *) self)->value; 1502 struct type *type = value_type (value); 1503 LONGEST l = 0; 1504 1505 TRY 1506 { 1507 type = check_typedef (type); 1508 1509 if (!is_integral_type (type) 1510 && TYPE_CODE (type) != TYPE_CODE_PTR) 1511 error (_("Cannot convert value to long.")); 1512 1513 l = value_as_long (value); 1514 } 1515 CATCH (except, RETURN_MASK_ALL) 1516 { 1517 GDB_PY_HANDLE_EXCEPTION (except); 1518 } 1519 END_CATCH 1520 1521 return gdb_py_long_from_longest (l); 1522 } 1523 1524 /* Implements conversion to float. */ 1525 static PyObject * 1526 valpy_float (PyObject *self) 1527 { 1528 struct value *value = ((value_object *) self)->value; 1529 struct type *type = value_type (value); 1530 double d = 0; 1531 1532 TRY 1533 { 1534 type = check_typedef (type); 1535 1536 if (TYPE_CODE (type) != TYPE_CODE_FLT) 1537 error (_("Cannot convert value to float.")); 1538 1539 d = value_as_double (value); 1540 } 1541 CATCH (except, RETURN_MASK_ALL) 1542 { 1543 GDB_PY_HANDLE_EXCEPTION (except); 1544 } 1545 END_CATCH 1546 1547 return PyFloat_FromDouble (d); 1548 } 1549 1550 /* Returns an object for a value which is released from the all_values chain, 1551 so its lifetime is not bound to the execution of a command. */ 1552 PyObject * 1553 value_to_value_object (struct value *val) 1554 { 1555 value_object *val_obj; 1556 1557 val_obj = PyObject_New (value_object, &value_object_type); 1558 if (val_obj != NULL) 1559 { 1560 val_obj->value = val; 1561 release_value_or_incref (val); 1562 val_obj->address = NULL; 1563 val_obj->type = NULL; 1564 val_obj->dynamic_type = NULL; 1565 note_value (val_obj); 1566 } 1567 1568 return (PyObject *) val_obj; 1569 } 1570 1571 /* Returns a borrowed reference to the struct value corresponding to 1572 the given value object. */ 1573 struct value * 1574 value_object_to_value (PyObject *self) 1575 { 1576 value_object *real; 1577 1578 if (! PyObject_TypeCheck (self, &value_object_type)) 1579 return NULL; 1580 real = (value_object *) self; 1581 return real->value; 1582 } 1583 1584 /* Try to convert a Python value to a gdb value. If the value cannot 1585 be converted, set a Python exception and return NULL. Returns a 1586 reference to a new value on the all_values chain. */ 1587 1588 struct value * 1589 convert_value_from_python (PyObject *obj) 1590 { 1591 struct value *value = NULL; /* -Wall */ 1592 int cmp; 1593 1594 gdb_assert (obj != NULL); 1595 1596 TRY 1597 { 1598 if (PyBool_Check (obj)) 1599 { 1600 cmp = PyObject_IsTrue (obj); 1601 if (cmp >= 0) 1602 value = value_from_longest (builtin_type_pybool, cmp); 1603 } 1604 /* Make a long logic check first. In Python 3.x, internally, 1605 all integers are represented as longs. In Python 2.x, there 1606 is still a differentiation internally between a PyInt and a 1607 PyLong. Explicitly do this long check conversion first. In 1608 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has 1609 to be done first to ensure we do not lose information in the 1610 conversion process. */ 1611 else if (PyLong_Check (obj)) 1612 { 1613 LONGEST l = PyLong_AsLongLong (obj); 1614 1615 if (PyErr_Occurred ()) 1616 { 1617 /* If the error was an overflow, we can try converting to 1618 ULONGEST instead. */ 1619 if (PyErr_ExceptionMatches (PyExc_OverflowError)) 1620 { 1621 PyObject *etype, *evalue, *etraceback, *zero; 1622 1623 PyErr_Fetch (&etype, &evalue, &etraceback); 1624 zero = PyInt_FromLong (0); 1625 1626 /* Check whether obj is positive. */ 1627 if (PyObject_RichCompareBool (obj, zero, Py_GT) > 0) 1628 { 1629 ULONGEST ul; 1630 1631 ul = PyLong_AsUnsignedLongLong (obj); 1632 if (! PyErr_Occurred ()) 1633 value = value_from_ulongest (builtin_type_upylong, ul); 1634 } 1635 else 1636 /* There's nothing we can do. */ 1637 PyErr_Restore (etype, evalue, etraceback); 1638 1639 Py_DECREF (zero); 1640 } 1641 } 1642 else 1643 value = value_from_longest (builtin_type_pylong, l); 1644 } 1645 else if (PyInt_Check (obj)) 1646 { 1647 long l = PyInt_AsLong (obj); 1648 1649 if (! PyErr_Occurred ()) 1650 value = value_from_longest (builtin_type_pyint, l); 1651 } 1652 else if (PyFloat_Check (obj)) 1653 { 1654 double d = PyFloat_AsDouble (obj); 1655 1656 if (! PyErr_Occurred ()) 1657 value = value_from_double (builtin_type_pyfloat, d); 1658 } 1659 else if (gdbpy_is_string (obj)) 1660 { 1661 char *s; 1662 1663 s = python_string_to_target_string (obj); 1664 if (s != NULL) 1665 { 1666 struct cleanup *old; 1667 1668 old = make_cleanup (xfree, s); 1669 value = value_cstring (s, strlen (s), builtin_type_pychar); 1670 do_cleanups (old); 1671 } 1672 } 1673 else if (PyObject_TypeCheck (obj, &value_object_type)) 1674 value = value_copy (((value_object *) obj)->value); 1675 else if (gdbpy_is_lazy_string (obj)) 1676 { 1677 PyObject *result; 1678 1679 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL); 1680 value = value_copy (((value_object *) result)->value); 1681 } 1682 else 1683 #ifdef IS_PY3K 1684 PyErr_Format (PyExc_TypeError, 1685 _("Could not convert Python object: %S."), obj); 1686 #else 1687 PyErr_Format (PyExc_TypeError, 1688 _("Could not convert Python object: %s."), 1689 PyString_AsString (PyObject_Str (obj))); 1690 #endif 1691 } 1692 CATCH (except, RETURN_MASK_ALL) 1693 { 1694 PyErr_Format (except.reason == RETURN_QUIT 1695 ? PyExc_KeyboardInterrupt : PyExc_RuntimeError, 1696 "%s", except.message); 1697 return NULL; 1698 } 1699 END_CATCH 1700 1701 return value; 1702 } 1703 1704 /* Returns value object in the ARGth position in GDB's history. */ 1705 PyObject * 1706 gdbpy_history (PyObject *self, PyObject *args) 1707 { 1708 int i; 1709 struct value *res_val = NULL; /* Initialize to appease gcc warning. */ 1710 1711 if (!PyArg_ParseTuple (args, "i", &i)) 1712 return NULL; 1713 1714 TRY 1715 { 1716 res_val = access_value_history (i); 1717 } 1718 CATCH (except, RETURN_MASK_ALL) 1719 { 1720 GDB_PY_HANDLE_EXCEPTION (except); 1721 } 1722 END_CATCH 1723 1724 return value_to_value_object (res_val); 1725 } 1726 1727 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */ 1728 1729 int 1730 gdbpy_is_value_object (PyObject *obj) 1731 { 1732 return PyObject_TypeCheck (obj, &value_object_type); 1733 } 1734 1735 int 1736 gdbpy_initialize_values (void) 1737 { 1738 if (PyType_Ready (&value_object_type) < 0) 1739 return -1; 1740 1741 return gdb_pymodule_addobject (gdb_module, "Value", 1742 (PyObject *) &value_object_type); 1743 } 1744 1745 1746 1747 static PyGetSetDef value_object_getset[] = { 1748 { "address", valpy_get_address, NULL, "The address of the value.", 1749 NULL }, 1750 { "is_optimized_out", valpy_get_is_optimized_out, NULL, 1751 "Boolean telling whether the value is optimized " 1752 "out (i.e., not available).", 1753 NULL }, 1754 { "type", valpy_get_type, NULL, "Type of the value.", NULL }, 1755 { "dynamic_type", valpy_get_dynamic_type, NULL, 1756 "Dynamic type of the value.", NULL }, 1757 { "is_lazy", valpy_get_is_lazy, NULL, 1758 "Boolean telling whether the value is lazy (not fetched yet\n\ 1759 from the inferior). A lazy value is fetched when needed, or when\n\ 1760 the \"fetch_lazy()\" method is called.", NULL }, 1761 {NULL} /* Sentinel */ 1762 }; 1763 1764 static PyMethodDef value_object_methods[] = { 1765 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." }, 1766 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS, 1767 "dynamic_cast (gdb.Type) -> gdb.Value\n\ 1768 Cast the value to the supplied type, as if by the C++ dynamic_cast operator." 1769 }, 1770 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS, 1771 "reinterpret_cast (gdb.Type) -> gdb.Value\n\ 1772 Cast the value to the supplied type, as if by the C++\n\ 1773 reinterpret_cast operator." 1774 }, 1775 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." }, 1776 { "referenced_value", valpy_referenced_value, METH_NOARGS, 1777 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." }, 1778 { "reference_value", valpy_reference_value, METH_NOARGS, 1779 "Return a value of type TYPE_CODE_REF referencing this value." }, 1780 { "const_value", valpy_const_value, METH_NOARGS, 1781 "Return a 'const' qualied version of the same value." }, 1782 { "lazy_string", (PyCFunction) valpy_lazy_string, 1783 METH_VARARGS | METH_KEYWORDS, 1784 "lazy_string ([encoding] [, length]) -> lazy_string\n\ 1785 Return a lazy string representation of the value." }, 1786 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS, 1787 "string ([encoding] [, errors] [, length]) -> string\n\ 1788 Return Unicode string representation of the value." }, 1789 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS, 1790 "Fetches the value from the inferior, if it was lazy." }, 1791 {NULL} /* Sentinel */ 1792 }; 1793 1794 static PyNumberMethods value_object_as_number = { 1795 valpy_add, 1796 valpy_subtract, 1797 valpy_multiply, 1798 #ifndef IS_PY3K 1799 valpy_divide, 1800 #endif 1801 valpy_remainder, 1802 NULL, /* nb_divmod */ 1803 valpy_power, /* nb_power */ 1804 valpy_negative, /* nb_negative */ 1805 valpy_positive, /* nb_positive */ 1806 valpy_absolute, /* nb_absolute */ 1807 valpy_nonzero, /* nb_nonzero */ 1808 valpy_invert, /* nb_invert */ 1809 valpy_lsh, /* nb_lshift */ 1810 valpy_rsh, /* nb_rshift */ 1811 valpy_and, /* nb_and */ 1812 valpy_xor, /* nb_xor */ 1813 valpy_or, /* nb_or */ 1814 #ifdef IS_PY3K 1815 valpy_long, /* nb_int */ 1816 NULL, /* reserved */ 1817 #else 1818 NULL, /* nb_coerce */ 1819 valpy_int, /* nb_int */ 1820 valpy_long, /* nb_long */ 1821 #endif 1822 valpy_float, /* nb_float */ 1823 #ifndef IS_PY3K 1824 NULL, /* nb_oct */ 1825 NULL, /* nb_hex */ 1826 #endif 1827 NULL, /* nb_inplace_add */ 1828 NULL, /* nb_inplace_subtract */ 1829 NULL, /* nb_inplace_multiply */ 1830 #ifndef IS_PY3K 1831 NULL, /* nb_inplace_divide */ 1832 #endif 1833 NULL, /* nb_inplace_remainder */ 1834 NULL, /* nb_inplace_power */ 1835 NULL, /* nb_inplace_lshift */ 1836 NULL, /* nb_inplace_rshift */ 1837 NULL, /* nb_inplace_and */ 1838 NULL, /* nb_inplace_xor */ 1839 NULL, /* nb_inplace_or */ 1840 NULL, /* nb_floor_divide */ 1841 valpy_divide, /* nb_true_divide */ 1842 NULL, /* nb_inplace_floor_divide */ 1843 NULL, /* nb_inplace_true_divide */ 1844 #ifndef HAVE_LIBPYTHON2_4 1845 /* This was added in Python 2.5. */ 1846 valpy_long, /* nb_index */ 1847 #endif /* HAVE_LIBPYTHON2_4 */ 1848 }; 1849 1850 static PyMappingMethods value_object_as_mapping = { 1851 valpy_length, 1852 valpy_getitem, 1853 valpy_setitem 1854 }; 1855 1856 PyTypeObject value_object_type = { 1857 PyVarObject_HEAD_INIT (NULL, 0) 1858 "gdb.Value", /*tp_name*/ 1859 sizeof (value_object), /*tp_basicsize*/ 1860 0, /*tp_itemsize*/ 1861 valpy_dealloc, /*tp_dealloc*/ 1862 0, /*tp_print*/ 1863 0, /*tp_getattr*/ 1864 0, /*tp_setattr*/ 1865 0, /*tp_compare*/ 1866 0, /*tp_repr*/ 1867 &value_object_as_number, /*tp_as_number*/ 1868 0, /*tp_as_sequence*/ 1869 &value_object_as_mapping, /*tp_as_mapping*/ 1870 valpy_hash, /*tp_hash*/ 1871 valpy_call, /*tp_call*/ 1872 valpy_str, /*tp_str*/ 1873 0, /*tp_getattro*/ 1874 0, /*tp_setattro*/ 1875 0, /*tp_as_buffer*/ 1876 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES 1877 | Py_TPFLAGS_BASETYPE, /*tp_flags*/ 1878 "GDB value object", /* tp_doc */ 1879 0, /* tp_traverse */ 1880 0, /* tp_clear */ 1881 valpy_richcompare, /* tp_richcompare */ 1882 0, /* tp_weaklistoffset */ 1883 0, /* tp_iter */ 1884 0, /* tp_iternext */ 1885 value_object_methods, /* tp_methods */ 1886 0, /* tp_members */ 1887 value_object_getset, /* tp_getset */ 1888 0, /* tp_base */ 1889 0, /* tp_dict */ 1890 0, /* tp_descr_get */ 1891 0, /* tp_descr_set */ 1892 0, /* tp_dictoffset */ 1893 0, /* tp_init */ 1894 0, /* tp_alloc */ 1895 valpy_new /* tp_new */ 1896 }; 1897