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