Remove trailing whitespace.
[deliverable/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 {
773 do_cleanups (cleanup);
774 break;
775 }
776
777 arg2 = convert_value_from_python (other);
778 if (arg2 == NULL)
779 {
780 do_cleanups (cleanup);
781 break;
782 }
783
784 switch (opcode)
785 {
786 case VALPY_ADD:
787 {
788 struct type *ltype = value_type (arg1);
789 struct type *rtype = value_type (arg2);
790
791 CHECK_TYPEDEF (ltype);
792 ltype = STRIP_REFERENCE (ltype);
793 CHECK_TYPEDEF (rtype);
794 rtype = STRIP_REFERENCE (rtype);
795
796 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
797 && is_integral_type (rtype))
798 res_val = value_ptradd (arg1, value_as_long (arg2));
799 else if (TYPE_CODE (rtype) == TYPE_CODE_PTR
800 && is_integral_type (ltype))
801 res_val = value_ptradd (arg2, value_as_long (arg1));
802 else
803 res_val = value_binop (arg1, arg2, BINOP_ADD);
804 }
805 break;
806 case VALPY_SUB:
807 {
808 struct type *ltype = value_type (arg1);
809 struct type *rtype = value_type (arg2);
810
811 CHECK_TYPEDEF (ltype);
812 ltype = STRIP_REFERENCE (ltype);
813 CHECK_TYPEDEF (rtype);
814 rtype = STRIP_REFERENCE (rtype);
815
816 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
817 && TYPE_CODE (rtype) == TYPE_CODE_PTR)
818 /* A ptrdiff_t for the target would be preferable here. */
819 res_val = value_from_longest (builtin_type_pyint,
820 value_ptrdiff (arg1, arg2));
821 else if (TYPE_CODE (ltype) == TYPE_CODE_PTR
822 && is_integral_type (rtype))
823 res_val = value_ptradd (arg1, - value_as_long (arg2));
824 else
825 res_val = value_binop (arg1, arg2, BINOP_SUB);
826 }
827 break;
828 case VALPY_MUL:
829 res_val = value_binop (arg1, arg2, BINOP_MUL);
830 break;
831 case VALPY_DIV:
832 res_val = value_binop (arg1, arg2, BINOP_DIV);
833 break;
834 case VALPY_REM:
835 res_val = value_binop (arg1, arg2, BINOP_REM);
836 break;
837 case VALPY_POW:
838 res_val = value_binop (arg1, arg2, BINOP_EXP);
839 break;
840 case VALPY_LSH:
841 res_val = value_binop (arg1, arg2, BINOP_LSH);
842 break;
843 case VALPY_RSH:
844 res_val = value_binop (arg1, arg2, BINOP_RSH);
845 break;
846 case VALPY_BITAND:
847 res_val = value_binop (arg1, arg2, BINOP_BITWISE_AND);
848 break;
849 case VALPY_BITOR:
850 res_val = value_binop (arg1, arg2, BINOP_BITWISE_IOR);
851 break;
852 case VALPY_BITXOR:
853 res_val = value_binop (arg1, arg2, BINOP_BITWISE_XOR);
854 break;
855 }
856
857 if (res_val)
858 result = value_to_value_object (res_val);
859
860 do_cleanups (cleanup);
861 }
862 GDB_PY_HANDLE_EXCEPTION (except);
863
864 return result;
865 }
866
867 static PyObject *
868 valpy_add (PyObject *self, PyObject *other)
869 {
870 return valpy_binop (VALPY_ADD, self, other);
871 }
872
873 static PyObject *
874 valpy_subtract (PyObject *self, PyObject *other)
875 {
876 return valpy_binop (VALPY_SUB, self, other);
877 }
878
879 static PyObject *
880 valpy_multiply (PyObject *self, PyObject *other)
881 {
882 return valpy_binop (VALPY_MUL, self, other);
883 }
884
885 static PyObject *
886 valpy_divide (PyObject *self, PyObject *other)
887 {
888 return valpy_binop (VALPY_DIV, self, other);
889 }
890
891 static PyObject *
892 valpy_remainder (PyObject *self, PyObject *other)
893 {
894 return valpy_binop (VALPY_REM, self, other);
895 }
896
897 static PyObject *
898 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
899 {
900 /* We don't support the ternary form of pow. I don't know how to express
901 that, so let's just throw NotImplementedError to at least do something
902 about it. */
903 if (unused != Py_None)
904 {
905 PyErr_SetString (PyExc_NotImplementedError,
906 "Invalid operation on gdb.Value.");
907 return NULL;
908 }
909
910 return valpy_binop (VALPY_POW, self, other);
911 }
912
913 static PyObject *
914 valpy_negative (PyObject *self)
915 {
916 volatile struct gdb_exception except;
917 PyObject *result = NULL;
918
919 TRY_CATCH (except, RETURN_MASK_ALL)
920 {
921 /* Perhaps overkill, but consistency has some virtue. */
922 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
923 struct value *val;
924
925 val = value_neg (((value_object *) self)->value);
926 result = value_to_value_object (val);
927 do_cleanups (cleanup);
928 }
929 GDB_PY_HANDLE_EXCEPTION (except);
930
931 return result;
932 }
933
934 static PyObject *
935 valpy_positive (PyObject *self)
936 {
937 return value_to_value_object (((value_object *) self)->value);
938 }
939
940 static PyObject *
941 valpy_absolute (PyObject *self)
942 {
943 struct value *value = ((value_object *) self)->value;
944 volatile struct gdb_exception except;
945 int isabs = 1;
946
947 TRY_CATCH (except, RETURN_MASK_ALL)
948 {
949 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
950
951 if (value_less (value, value_zero (value_type (value), not_lval)))
952 isabs = 0;
953
954 do_cleanups (cleanup);
955 }
956 GDB_PY_HANDLE_EXCEPTION (except);
957
958 if (isabs)
959 return valpy_positive (self);
960 else
961 return valpy_negative (self);
962 }
963
964 /* Implements boolean evaluation of gdb.Value. */
965 static int
966 valpy_nonzero (PyObject *self)
967 {
968 volatile struct gdb_exception except;
969 value_object *self_value = (value_object *) self;
970 struct type *type;
971 int nonzero = 0; /* Appease GCC warning. */
972
973 TRY_CATCH (except, RETURN_MASK_ALL)
974 {
975 type = check_typedef (value_type (self_value->value));
976
977 if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
978 nonzero = !!value_as_long (self_value->value);
979 else if (TYPE_CODE (type) == TYPE_CODE_FLT)
980 nonzero = value_as_double (self_value->value) != 0;
981 else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
982 nonzero = !decimal_is_zero (value_contents (self_value->value),
983 TYPE_LENGTH (type),
984 gdbarch_byte_order (get_type_arch (type)));
985 else
986 /* All other values are True. */
987 nonzero = 1;
988 }
989 /* This is not documented in the Python documentation, but if this
990 function fails, return -1 as slot_nb_nonzero does (the default
991 Python nonzero function). */
992 GDB_PY_SET_HANDLE_EXCEPTION (except);
993
994 return nonzero;
995 }
996
997 /* Implements ~ for value objects. */
998 static PyObject *
999 valpy_invert (PyObject *self)
1000 {
1001 struct value *val = NULL;
1002 volatile struct gdb_exception except;
1003
1004 TRY_CATCH (except, RETURN_MASK_ALL)
1005 {
1006 val = value_complement (((value_object *) self)->value);
1007 }
1008 GDB_PY_HANDLE_EXCEPTION (except);
1009
1010 return value_to_value_object (val);
1011 }
1012
1013 /* Implements left shift for value objects. */
1014 static PyObject *
1015 valpy_lsh (PyObject *self, PyObject *other)
1016 {
1017 return valpy_binop (VALPY_LSH, self, other);
1018 }
1019
1020 /* Implements right shift for value objects. */
1021 static PyObject *
1022 valpy_rsh (PyObject *self, PyObject *other)
1023 {
1024 return valpy_binop (VALPY_RSH, self, other);
1025 }
1026
1027 /* Implements bitwise and for value objects. */
1028 static PyObject *
1029 valpy_and (PyObject *self, PyObject *other)
1030 {
1031 return valpy_binop (VALPY_BITAND, self, other);
1032 }
1033
1034 /* Implements bitwise or for value objects. */
1035 static PyObject *
1036 valpy_or (PyObject *self, PyObject *other)
1037 {
1038 return valpy_binop (VALPY_BITOR, self, other);
1039 }
1040
1041 /* Implements bitwise xor for value objects. */
1042 static PyObject *
1043 valpy_xor (PyObject *self, PyObject *other)
1044 {
1045 return valpy_binop (VALPY_BITXOR, self, other);
1046 }
1047
1048 /* Implements comparison operations for value objects. Returns NULL on error,
1049 with a python exception set. */
1050 static PyObject *
1051 valpy_richcompare (PyObject *self, PyObject *other, int op)
1052 {
1053 int result = 0;
1054 volatile struct gdb_exception except;
1055
1056 if (other == Py_None)
1057 /* Comparing with None is special. From what I can tell, in Python
1058 None is smaller than anything else. */
1059 switch (op) {
1060 case Py_LT:
1061 case Py_LE:
1062 case Py_EQ:
1063 Py_RETURN_FALSE;
1064 case Py_NE:
1065 case Py_GT:
1066 case Py_GE:
1067 Py_RETURN_TRUE;
1068 default:
1069 /* Can't happen. */
1070 PyErr_SetString (PyExc_NotImplementedError,
1071 _("Invalid operation on gdb.Value."));
1072 return NULL;
1073 }
1074
1075 TRY_CATCH (except, RETURN_MASK_ALL)
1076 {
1077 struct value *value_other, *mark = value_mark ();
1078 struct cleanup *cleanup;
1079
1080 value_other = convert_value_from_python (other);
1081 if (value_other == NULL)
1082 {
1083 result = -1;
1084 break;
1085 }
1086
1087 cleanup = make_cleanup_value_free_to_mark (mark);
1088
1089 switch (op) {
1090 case Py_LT:
1091 result = value_less (((value_object *) self)->value, value_other);
1092 break;
1093 case Py_LE:
1094 result = value_less (((value_object *) self)->value, value_other)
1095 || value_equal (((value_object *) self)->value, value_other);
1096 break;
1097 case Py_EQ:
1098 result = value_equal (((value_object *) self)->value, value_other);
1099 break;
1100 case Py_NE:
1101 result = !value_equal (((value_object *) self)->value, value_other);
1102 break;
1103 case Py_GT:
1104 result = value_less (value_other, ((value_object *) self)->value);
1105 break;
1106 case Py_GE:
1107 result = value_less (value_other, ((value_object *) self)->value)
1108 || value_equal (((value_object *) self)->value, value_other);
1109 break;
1110 default:
1111 /* Can't happen. */
1112 PyErr_SetString (PyExc_NotImplementedError,
1113 _("Invalid operation on gdb.Value."));
1114 result = -1;
1115 break;
1116 }
1117
1118 do_cleanups (cleanup);
1119 }
1120 GDB_PY_HANDLE_EXCEPTION (except);
1121
1122 /* In this case, the Python exception has already been set. */
1123 if (result < 0)
1124 return NULL;
1125
1126 if (result == 1)
1127 Py_RETURN_TRUE;
1128
1129 Py_RETURN_FALSE;
1130 }
1131
1132 #ifndef IS_PY3K
1133 /* Implements conversion to int. */
1134 static PyObject *
1135 valpy_int (PyObject *self)
1136 {
1137 struct value *value = ((value_object *) self)->value;
1138 struct type *type = value_type (value);
1139 LONGEST l = 0;
1140 volatile struct gdb_exception except;
1141
1142 TRY_CATCH (except, RETURN_MASK_ALL)
1143 {
1144 if (!is_integral_type (type))
1145 error (_("Cannot convert value to int."));
1146
1147 l = value_as_long (value);
1148 }
1149 GDB_PY_HANDLE_EXCEPTION (except);
1150
1151 return gdb_py_object_from_longest (l);
1152 }
1153 #endif
1154
1155 /* Implements conversion to long. */
1156 static PyObject *
1157 valpy_long (PyObject *self)
1158 {
1159 struct value *value = ((value_object *) self)->value;
1160 struct type *type = value_type (value);
1161 LONGEST l = 0;
1162 volatile struct gdb_exception except;
1163
1164 TRY_CATCH (except, RETURN_MASK_ALL)
1165 {
1166 CHECK_TYPEDEF (type);
1167
1168 if (!is_integral_type (type)
1169 && TYPE_CODE (type) != TYPE_CODE_PTR)
1170 error (_("Cannot convert value to long."));
1171
1172 l = value_as_long (value);
1173 }
1174 GDB_PY_HANDLE_EXCEPTION (except);
1175
1176 return gdb_py_long_from_longest (l);
1177 }
1178
1179 /* Implements conversion to float. */
1180 static PyObject *
1181 valpy_float (PyObject *self)
1182 {
1183 struct value *value = ((value_object *) self)->value;
1184 struct type *type = value_type (value);
1185 double d = 0;
1186 volatile struct gdb_exception except;
1187
1188 TRY_CATCH (except, RETURN_MASK_ALL)
1189 {
1190 CHECK_TYPEDEF (type);
1191
1192 if (TYPE_CODE (type) != TYPE_CODE_FLT)
1193 error (_("Cannot convert value to float."));
1194
1195 d = value_as_double (value);
1196 }
1197 GDB_PY_HANDLE_EXCEPTION (except);
1198
1199 return PyFloat_FromDouble (d);
1200 }
1201
1202 /* Returns an object for a value which is released from the all_values chain,
1203 so its lifetime is not bound to the execution of a command. */
1204 PyObject *
1205 value_to_value_object (struct value *val)
1206 {
1207 value_object *val_obj;
1208
1209 val_obj = PyObject_New (value_object, &value_object_type);
1210 if (val_obj != NULL)
1211 {
1212 val_obj->value = val;
1213 release_value_or_incref (val);
1214 val_obj->address = NULL;
1215 val_obj->type = NULL;
1216 val_obj->dynamic_type = NULL;
1217 note_value (val_obj);
1218 }
1219
1220 return (PyObject *) val_obj;
1221 }
1222
1223 /* Returns a borrowed reference to the struct value corresponding to
1224 the given value object. */
1225 struct value *
1226 value_object_to_value (PyObject *self)
1227 {
1228 value_object *real;
1229
1230 if (! PyObject_TypeCheck (self, &value_object_type))
1231 return NULL;
1232 real = (value_object *) self;
1233 return real->value;
1234 }
1235
1236 /* Try to convert a Python value to a gdb value. If the value cannot
1237 be converted, set a Python exception and return NULL. Returns a
1238 reference to a new value on the all_values chain. */
1239
1240 struct value *
1241 convert_value_from_python (PyObject *obj)
1242 {
1243 struct value *value = NULL; /* -Wall */
1244 volatile struct gdb_exception except;
1245 int cmp;
1246
1247 gdb_assert (obj != NULL);
1248
1249 TRY_CATCH (except, RETURN_MASK_ALL)
1250 {
1251 if (PyBool_Check (obj))
1252 {
1253 cmp = PyObject_IsTrue (obj);
1254 if (cmp >= 0)
1255 value = value_from_longest (builtin_type_pybool, cmp);
1256 }
1257 /* Make a long logic check first. In Python 3.x, internally,
1258 all integers are represented as longs. In Python 2.x, there
1259 is still a differentiation internally between a PyInt and a
1260 PyLong. Explicitly do this long check conversion first. In
1261 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1262 to be done first to ensure we do not lose information in the
1263 conversion process. */
1264 else if (PyLong_Check (obj))
1265 {
1266 LONGEST l = PyLong_AsLongLong (obj);
1267
1268 if (PyErr_Occurred ())
1269 {
1270 /* If the error was an overflow, we can try converting to
1271 ULONGEST instead. */
1272 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1273 {
1274 PyObject *etype, *evalue, *etraceback, *zero;
1275
1276 PyErr_Fetch (&etype, &evalue, &etraceback);
1277 zero = PyInt_FromLong (0);
1278
1279 /* Check whether obj is positive. */
1280 if (PyObject_RichCompareBool (obj, zero, Py_GT) > 0)
1281 {
1282 ULONGEST ul;
1283
1284 ul = PyLong_AsUnsignedLongLong (obj);
1285 if (! PyErr_Occurred ())
1286 value = value_from_ulongest (builtin_type_upylong, ul);
1287 }
1288 else
1289 /* There's nothing we can do. */
1290 PyErr_Restore (etype, evalue, etraceback);
1291
1292 Py_DECREF (zero);
1293 }
1294 }
1295 else
1296 value = value_from_longest (builtin_type_pylong, l);
1297 }
1298 else if (PyInt_Check (obj))
1299 {
1300 long l = PyInt_AsLong (obj);
1301
1302 if (! PyErr_Occurred ())
1303 value = value_from_longest (builtin_type_pyint, l);
1304 }
1305 else if (PyFloat_Check (obj))
1306 {
1307 double d = PyFloat_AsDouble (obj);
1308
1309 if (! PyErr_Occurred ())
1310 value = value_from_double (builtin_type_pyfloat, d);
1311 }
1312 else if (gdbpy_is_string (obj))
1313 {
1314 char *s;
1315
1316 s = python_string_to_target_string (obj);
1317 if (s != NULL)
1318 {
1319 struct cleanup *old;
1320
1321 old = make_cleanup (xfree, s);
1322 value = value_cstring (s, strlen (s), builtin_type_pychar);
1323 do_cleanups (old);
1324 }
1325 }
1326 else if (PyObject_TypeCheck (obj, &value_object_type))
1327 value = value_copy (((value_object *) obj)->value);
1328 else if (gdbpy_is_lazy_string (obj))
1329 {
1330 PyObject *result;
1331
1332 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
1333 value = value_copy (((value_object *) result)->value);
1334 }
1335 else
1336 #ifdef IS_PY3K
1337 PyErr_Format (PyExc_TypeError,
1338 _("Could not convert Python object: %S."), obj);
1339 #else
1340 PyErr_Format (PyExc_TypeError,
1341 _("Could not convert Python object: %s."),
1342 PyString_AsString (PyObject_Str (obj)));
1343 #endif
1344 }
1345 if (except.reason < 0)
1346 {
1347 PyErr_Format (except.reason == RETURN_QUIT
1348 ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
1349 "%s", except.message);
1350 return NULL;
1351 }
1352
1353 return value;
1354 }
1355
1356 /* Returns value object in the ARGth position in GDB's history. */
1357 PyObject *
1358 gdbpy_history (PyObject *self, PyObject *args)
1359 {
1360 int i;
1361 struct value *res_val = NULL; /* Initialize to appease gcc warning. */
1362 volatile struct gdb_exception except;
1363
1364 if (!PyArg_ParseTuple (args, "i", &i))
1365 return NULL;
1366
1367 TRY_CATCH (except, RETURN_MASK_ALL)
1368 {
1369 res_val = access_value_history (i);
1370 }
1371 GDB_PY_HANDLE_EXCEPTION (except);
1372
1373 return value_to_value_object (res_val);
1374 }
1375
1376 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
1377
1378 int
1379 gdbpy_is_value_object (PyObject *obj)
1380 {
1381 return PyObject_TypeCheck (obj, &value_object_type);
1382 }
1383
1384 int
1385 gdbpy_initialize_values (void)
1386 {
1387 if (PyType_Ready (&value_object_type) < 0)
1388 return -1;
1389
1390 return gdb_pymodule_addobject (gdb_module, "Value",
1391 (PyObject *) &value_object_type);
1392 }
1393
1394 \f
1395
1396 static PyGetSetDef value_object_getset[] = {
1397 { "address", valpy_get_address, NULL, "The address of the value.",
1398 NULL },
1399 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
1400 "Boolean telling whether the value is optimized "
1401 "out (i.e., not available).",
1402 NULL },
1403 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
1404 { "dynamic_type", valpy_get_dynamic_type, NULL,
1405 "Dynamic type of the value.", NULL },
1406 { "is_lazy", valpy_get_is_lazy, NULL,
1407 "Boolean telling whether the value is lazy (not fetched yet\n\
1408 from the inferior). A lazy value is fetched when needed, or when\n\
1409 the \"fetch_lazy()\" method is called.", NULL },
1410 {NULL} /* Sentinel */
1411 };
1412
1413 static PyMethodDef value_object_methods[] = {
1414 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
1415 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
1416 "dynamic_cast (gdb.Type) -> gdb.Value\n\
1417 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
1418 },
1419 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
1420 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
1421 Cast the value to the supplied type, as if by the C++\n\
1422 reinterpret_cast operator."
1423 },
1424 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
1425 { "referenced_value", valpy_referenced_value, METH_NOARGS,
1426 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
1427 { "lazy_string", (PyCFunction) valpy_lazy_string,
1428 METH_VARARGS | METH_KEYWORDS,
1429 "lazy_string ([encoding] [, length]) -> lazy_string\n\
1430 Return a lazy string representation of the value." },
1431 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
1432 "string ([encoding] [, errors] [, length]) -> string\n\
1433 Return Unicode string representation of the value." },
1434 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
1435 "Fetches the value from the inferior, if it was lazy." },
1436 {NULL} /* Sentinel */
1437 };
1438
1439 static PyNumberMethods value_object_as_number = {
1440 valpy_add,
1441 valpy_subtract,
1442 valpy_multiply,
1443 #ifndef IS_PY3K
1444 valpy_divide,
1445 #endif
1446 valpy_remainder,
1447 NULL, /* nb_divmod */
1448 valpy_power, /* nb_power */
1449 valpy_negative, /* nb_negative */
1450 valpy_positive, /* nb_positive */
1451 valpy_absolute, /* nb_absolute */
1452 valpy_nonzero, /* nb_nonzero */
1453 valpy_invert, /* nb_invert */
1454 valpy_lsh, /* nb_lshift */
1455 valpy_rsh, /* nb_rshift */
1456 valpy_and, /* nb_and */
1457 valpy_xor, /* nb_xor */
1458 valpy_or, /* nb_or */
1459 #ifdef IS_PY3K
1460 valpy_long, /* nb_int */
1461 NULL, /* reserved */
1462 #else
1463 NULL, /* nb_coerce */
1464 valpy_int, /* nb_int */
1465 valpy_long, /* nb_long */
1466 #endif
1467 valpy_float, /* nb_float */
1468 #ifndef IS_PY3K
1469 NULL, /* nb_oct */
1470 NULL, /* nb_hex */
1471 #endif
1472 NULL, /* nb_inplace_add */
1473 NULL, /* nb_inplace_subtract */
1474 NULL, /* nb_inplace_multiply */
1475 NULL, /* nb_inplace_remainder */
1476 NULL, /* nb_inplace_power */
1477 NULL, /* nb_inplace_lshift */
1478 NULL, /* nb_inplace_rshift */
1479 NULL, /* nb_inplace_and */
1480 NULL, /* nb_inplace_xor */
1481 NULL, /* nb_inplace_or */
1482 NULL, /* nb_floor_divide */
1483 valpy_divide /* nb_true_divide */
1484 };
1485
1486 static PyMappingMethods value_object_as_mapping = {
1487 valpy_length,
1488 valpy_getitem,
1489 valpy_setitem
1490 };
1491
1492 PyTypeObject value_object_type = {
1493 PyVarObject_HEAD_INIT (NULL, 0)
1494 "gdb.Value", /*tp_name*/
1495 sizeof (value_object), /*tp_basicsize*/
1496 0, /*tp_itemsize*/
1497 valpy_dealloc, /*tp_dealloc*/
1498 0, /*tp_print*/
1499 0, /*tp_getattr*/
1500 0, /*tp_setattr*/
1501 0, /*tp_compare*/
1502 0, /*tp_repr*/
1503 &value_object_as_number, /*tp_as_number*/
1504 0, /*tp_as_sequence*/
1505 &value_object_as_mapping, /*tp_as_mapping*/
1506 valpy_hash, /*tp_hash*/
1507 valpy_call, /*tp_call*/
1508 valpy_str, /*tp_str*/
1509 0, /*tp_getattro*/
1510 0, /*tp_setattro*/
1511 0, /*tp_as_buffer*/
1512 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
1513 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
1514 "GDB value object", /* tp_doc */
1515 0, /* tp_traverse */
1516 0, /* tp_clear */
1517 valpy_richcompare, /* tp_richcompare */
1518 0, /* tp_weaklistoffset */
1519 0, /* tp_iter */
1520 0, /* tp_iternext */
1521 value_object_methods, /* tp_methods */
1522 0, /* tp_members */
1523 value_object_getset, /* tp_getset */
1524 0, /* tp_base */
1525 0, /* tp_dict */
1526 0, /* tp_descr_get */
1527 0, /* tp_descr_set */
1528 0, /* tp_dictoffset */
1529 0, /* tp_init */
1530 0, /* tp_alloc */
1531 valpy_new /* tp_new */
1532 };
1533
1534 #else
1535
1536 void
1537 preserve_python_values (struct objfile *objfile, htab_t copied_types)
1538 {
1539 /* Nothing. */
1540 }
1541
1542 #endif /* HAVE_PYTHON */
This page took 0.060276 seconds and 5 git commands to generate.