py-value.c revision 1.11 1 /* Python interface to values.
2
3 Copyright (C) 2008-2024 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 "top.h"
21 #include "charset.h"
22 #include "value.h"
23 #include "language.h"
24 #include "target-float.h"
25 #include "valprint.h"
26 #include "infcall.h"
27 #include "expression.h"
28 #include "cp-abi.h"
29 #include "python.h"
30 #include "ada-lang.h"
31
32 #include "python-internal.h"
33
34 /* Even though Python scalar types directly map to host types, we use
35 target types here to remain consistent with the values system in
36 GDB (which uses target arithmetic). */
37
38 /* Python's integer type corresponds to C's long type. */
39 #define builtin_type_pyint \
40 builtin_type (gdbpy_enter::get_gdbarch ())->builtin_long
41
42 /* Python's float type corresponds to C's double type. */
43 #define builtin_type_pyfloat \
44 builtin_type (gdbpy_enter::get_gdbarch ())->builtin_double
45
46 /* Python's long type corresponds to C's long long type. */
47 #define builtin_type_pylong \
48 builtin_type (gdbpy_enter::get_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 (gdbpy_enter::get_gdbarch ())->builtin_unsigned_long_long
53
54 #define builtin_type_pybool \
55 language_bool_type (current_language, gdbpy_enter::get_gdbarch ())
56
57 struct value_object {
58 PyObject_HEAD
59 struct value_object *next;
60 struct value_object *prev;
61 struct value *value;
62 PyObject *address;
63 PyObject *type;
64 PyObject *dynamic_type;
65 PyObject *content_bytes;
66 };
67
68 /* List of all values which are currently exposed to Python. It is
69 maintained so that when an objfile is discarded, preserve_values
70 can copy the values' types if needed. */
71 /* This variable is unnecessarily initialized to NULL in order to
72 work around a linker bug on MacOS. */
73 static value_object *values_in_python = NULL;
74
75 /* Clear out an old GDB value stored within SELF, and reset the fields to
76 nullptr. This should be called when a gdb.Value is deallocated, and
77 also if a gdb.Value is reinitialized with a new value. */
78
79 static void
80 valpy_clear_value (value_object *self)
81 {
82 /* Indicate we are no longer interested in the value object. */
83 self->value->decref ();
84 self->value = nullptr;
85
86 Py_CLEAR (self->address);
87 Py_CLEAR (self->type);
88 Py_CLEAR (self->dynamic_type);
89 Py_CLEAR (self->content_bytes);
90 }
91
92 /* Called by the Python interpreter when deallocating a value object. */
93 static void
94 valpy_dealloc (PyObject *obj)
95 {
96 value_object *self = (value_object *) obj;
97
98 /* If SELF failed to initialize correctly then it may not have a value
99 contained within it. */
100 if (self->value != nullptr)
101 {
102 /* Remove SELF from the global list of values. */
103 if (self->prev != nullptr)
104 self->prev->next = self->next;
105 else
106 {
107 gdb_assert (values_in_python == self);
108 values_in_python = self->next;
109 }
110 if (self->next != nullptr)
111 self->next->prev = self->prev;
112
113 /* Release the value object and any cached Python objects. */
114 valpy_clear_value (self);
115 }
116
117 Py_TYPE (self)->tp_free (self);
118 }
119
120 /* Helper to push a gdb.Value object on to the global list of values. If
121 VALUE_OBJ is already on the lit then this does nothing. */
122
123 static void
124 note_value (value_object *value_obj)
125 {
126 if (value_obj->next == nullptr)
127 {
128 gdb_assert (value_obj->prev == nullptr);
129 value_obj->next = values_in_python;
130 if (value_obj->next != nullptr)
131 value_obj->next->prev = value_obj;
132 values_in_python = value_obj;
133 }
134 }
135
136 /* Convert a python object OBJ with type TYPE to a gdb value. The
137 python object in question must conform to the python buffer
138 protocol. On success, return the converted value, otherwise
139 nullptr. When REQUIRE_EXACT_SIZE_P is true the buffer OBJ must be the
140 exact length of TYPE. When REQUIRE_EXACT_SIZE_P is false then the
141 buffer OBJ can be longer than TYPE, in which case only the least
142 significant bytes from the buffer are used. */
143
144 static struct value *
145 convert_buffer_and_type_to_value (PyObject *obj, struct type *type,
146 bool require_exact_size_p)
147 {
148 Py_buffer_up buffer_up;
149 Py_buffer py_buf;
150
151 if (PyObject_CheckBuffer (obj)
152 && PyObject_GetBuffer (obj, &py_buf, PyBUF_SIMPLE) == 0)
153 {
154 /* Got a buffer, py_buf, out of obj. Cause it to be released
155 when it goes out of scope. */
156 buffer_up.reset (&py_buf);
157 }
158 else
159 {
160 PyErr_SetString (PyExc_TypeError,
161 _("Object must support the python buffer protocol."));
162 return nullptr;
163 }
164
165 if (require_exact_size_p && type->length () != py_buf.len)
166 {
167 PyErr_SetString (PyExc_ValueError,
168 _("Size of type is not equal to that of buffer object."));
169 return nullptr;
170 }
171 else if (!require_exact_size_p && type->length () > py_buf.len)
172 {
173 PyErr_SetString (PyExc_ValueError,
174 _("Size of type is larger than that of buffer object."));
175 return nullptr;
176 }
177
178 return value_from_contents (type, (const gdb_byte *) py_buf.buf);
179 }
180
181 /* Implement gdb.Value.__init__. */
182
183 static int
184 valpy_init (PyObject *self, PyObject *args, PyObject *kwds)
185 {
186 static const char *keywords[] = { "val", "type", NULL };
187 PyObject *val_obj = nullptr;
188 PyObject *type_obj = nullptr;
189
190 if (!gdb_PyArg_ParseTupleAndKeywords (args, kwds, "O|O", keywords,
191 &val_obj, &type_obj))
192 return -1;
193
194 struct type *type = nullptr;
195 if (type_obj != nullptr && type_obj != Py_None)
196 {
197 type = type_object_to_type (type_obj);
198 if (type == nullptr)
199 {
200 PyErr_SetString (PyExc_TypeError,
201 _("type argument must be a gdb.Type."));
202 return -1;
203 }
204 }
205
206 struct value *value;
207 if (type == nullptr)
208 value = convert_value_from_python (val_obj);
209 else
210 value = convert_buffer_and_type_to_value (val_obj, type, false);
211 if (value == nullptr)
212 {
213 gdb_assert (PyErr_Occurred ());
214 return -1;
215 }
216
217 /* There might be a previous value here. */
218 value_object *value_obj = (value_object *) self;
219 if (value_obj->value != nullptr)
220 valpy_clear_value (value_obj);
221
222 /* Store the value into this Python object. */
223 value_obj->value = release_value (value).release ();
224
225 /* Ensure that this gdb.Value is in the set of all gdb.Value objects. If
226 we are already in the set then this is call does nothing. */
227 note_value (value_obj);
228
229 return 0;
230 }
231
232 /* Iterate over all the Value objects, calling preserve_one_value on
233 each. */
234 void
235 gdbpy_preserve_values (const struct extension_language_defn *extlang,
236 struct objfile *objfile, htab_t copied_types)
237 {
238 value_object *iter;
239
240 for (iter = values_in_python; iter; iter = iter->next)
241 iter->value->preserve (objfile, copied_types);
242 }
243
244 /* Given a value of a pointer type, apply the C unary * operator to it. */
245 static PyObject *
246 valpy_dereference (PyObject *self, PyObject *args)
247 {
248 PyObject *result = NULL;
249
250 try
251 {
252 struct value *res_val;
253 scoped_value_mark free_values;
254
255 res_val = value_ind (((value_object *) self)->value);
256 result = value_to_value_object (res_val);
257 }
258 catch (const gdb_exception &except)
259 {
260 GDB_PY_HANDLE_EXCEPTION (except);
261 }
262
263 return result;
264 }
265
266 /* Given a value of a pointer type or a reference type, return the value
267 referenced. The difference between this function and valpy_dereference is
268 that the latter applies * unary operator to a value, which need not always
269 result in the value referenced. For example, for a value which is a reference
270 to an 'int' pointer ('int *'), valpy_dereference will result in a value of
271 type 'int' while valpy_referenced_value will result in a value of type
272 'int *'. */
273
274 static PyObject *
275 valpy_referenced_value (PyObject *self, PyObject *args)
276 {
277 PyObject *result = NULL;
278
279 try
280 {
281 struct value *self_val, *res_val;
282 scoped_value_mark free_values;
283
284 self_val = ((value_object *) self)->value;
285 switch (check_typedef (self_val->type ())->code ())
286 {
287 case TYPE_CODE_PTR:
288 res_val = value_ind (self_val);
289 break;
290 case TYPE_CODE_REF:
291 case TYPE_CODE_RVALUE_REF:
292 res_val = coerce_ref (self_val);
293 break;
294 default:
295 error(_("Trying to get the referenced value from a value which is "
296 "neither a pointer nor a reference."));
297 }
298
299 result = value_to_value_object (res_val);
300 }
301 catch (const gdb_exception &except)
302 {
303 GDB_PY_HANDLE_EXCEPTION (except);
304 }
305
306 return result;
307 }
308
309 /* Return a value which is a reference to the value. */
310
311 static PyObject *
312 valpy_reference_value (PyObject *self, PyObject *args, enum type_code refcode)
313 {
314 PyObject *result = NULL;
315
316 try
317 {
318 struct value *self_val;
319 scoped_value_mark free_values;
320
321 self_val = ((value_object *) self)->value;
322 result = value_to_value_object (value_ref (self_val, refcode));
323 }
324 catch (const gdb_exception &except)
325 {
326 GDB_PY_HANDLE_EXCEPTION (except);
327 }
328
329 return result;
330 }
331
332 static PyObject *
333 valpy_lvalue_reference_value (PyObject *self, PyObject *args)
334 {
335 return valpy_reference_value (self, args, TYPE_CODE_REF);
336 }
337
338 static PyObject *
339 valpy_rvalue_reference_value (PyObject *self, PyObject *args)
340 {
341 return valpy_reference_value (self, args, TYPE_CODE_RVALUE_REF);
342 }
343
344 /* Implement Value.to_array. */
345
346 static PyObject *
347 valpy_to_array (PyObject *self, PyObject *args)
348 {
349 PyObject *result = nullptr;
350
351 try
352 {
353 struct value *val = ((value_object *) self)->value;
354 struct type *type = check_typedef (val->type ());
355
356 if (type->code () == TYPE_CODE_ARRAY)
357 {
358 result = self;
359 Py_INCREF (result);
360 }
361 else
362 {
363 val = value_to_array (val);
364 if (val == nullptr)
365 PyErr_SetString (PyExc_TypeError, _("Value is not array-like."));
366 else
367 result = value_to_value_object (val);
368 }
369 }
370 catch (const gdb_exception &except)
371 {
372 GDB_PY_HANDLE_EXCEPTION (except);
373 }
374
375 return result;
376 }
377
378 /* Return a "const" qualified version of the value. */
379
380 static PyObject *
381 valpy_const_value (PyObject *self, PyObject *args)
382 {
383 PyObject *result = NULL;
384
385 try
386 {
387 struct value *self_val, *res_val;
388 scoped_value_mark free_values;
389
390 self_val = ((value_object *) self)->value;
391 res_val = make_cv_value (1, 0, self_val);
392 result = value_to_value_object (res_val);
393 }
394 catch (const gdb_exception &except)
395 {
396 GDB_PY_HANDLE_EXCEPTION (except);
397 }
398
399 return result;
400 }
401
402 /* Return "&value". */
403 static PyObject *
404 valpy_get_address (PyObject *self, void *closure)
405 {
406 value_object *val_obj = (value_object *) self;
407
408 if (!val_obj->address)
409 {
410 try
411 {
412 struct value *res_val;
413 scoped_value_mark free_values;
414
415 res_val = value_addr (val_obj->value);
416 val_obj->address = value_to_value_object (res_val);
417 }
418 catch (const gdb_exception_forced_quit &except)
419 {
420 quit_force (NULL, 0);
421 }
422 catch (const gdb_exception &except)
423 {
424 val_obj->address = Py_None;
425 Py_INCREF (Py_None);
426 }
427 }
428
429 Py_XINCREF (val_obj->address);
430
431 return val_obj->address;
432 }
433
434 /* Return type of the value. */
435 static PyObject *
436 valpy_get_type (PyObject *self, void *closure)
437 {
438 value_object *obj = (value_object *) self;
439
440 if (!obj->type)
441 {
442 obj->type = type_to_type_object (obj->value->type ());
443 if (!obj->type)
444 return NULL;
445 }
446 Py_INCREF (obj->type);
447 return obj->type;
448 }
449
450 /* Return dynamic type of the value. */
451
452 static PyObject *
453 valpy_get_dynamic_type (PyObject *self, void *closure)
454 {
455 value_object *obj = (value_object *) self;
456 struct type *type = NULL;
457
458 if (obj->dynamic_type != NULL)
459 {
460 Py_INCREF (obj->dynamic_type);
461 return obj->dynamic_type;
462 }
463
464 try
465 {
466 struct value *val = obj->value;
467 scoped_value_mark free_values;
468
469 type = val->type ();
470 type = check_typedef (type);
471
472 if (type->is_pointer_or_reference ()
473 && (type->target_type ()->code () == TYPE_CODE_STRUCT))
474 {
475 struct value *target;
476 int was_pointer = type->code () == TYPE_CODE_PTR;
477
478 if (was_pointer)
479 target = value_ind (val);
480 else
481 target = coerce_ref (val);
482 type = value_rtti_type (target, NULL, NULL, NULL);
483
484 if (type)
485 {
486 if (was_pointer)
487 type = lookup_pointer_type (type);
488 else
489 type = lookup_lvalue_reference_type (type);
490 }
491 }
492 else if (type->code () == TYPE_CODE_STRUCT)
493 type = value_rtti_type (val, NULL, NULL, NULL);
494 else
495 {
496 /* Re-use object's static type. */
497 type = NULL;
498 }
499 }
500 catch (const gdb_exception &except)
501 {
502 GDB_PY_HANDLE_EXCEPTION (except);
503 }
504
505 if (type == NULL)
506 obj->dynamic_type = valpy_get_type (self, NULL);
507 else
508 obj->dynamic_type = type_to_type_object (type);
509
510 Py_XINCREF (obj->dynamic_type);
511 return obj->dynamic_type;
512 }
513
514 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
515 string. Return a PyObject representing a lazy_string_object type.
516 A lazy string is a pointer to a string with an optional encoding and
517 length. If ENCODING is not given, encoding is set to None. If an
518 ENCODING is provided the encoding parameter is set to ENCODING, but
519 the string is not encoded.
520 If LENGTH is provided then the length parameter is set to LENGTH.
521 Otherwise if the value is an array of known length then the array's length
522 is used. Otherwise the length will be set to -1 (meaning first null of
523 appropriate with).
524
525 Note: In order to not break any existing uses this allows creating
526 lazy strings from anything. PR 20769. E.g.,
527 gdb.parse_and_eval("my_int_variable").lazy_string().
528 "It's easier to relax restrictions than it is to impose them after the
529 fact." So we should be flagging any unintended uses as errors, but it's
530 perhaps too late for that. */
531
532 static PyObject *
533 valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
534 {
535 gdb_py_longest length = -1;
536 struct value *value = ((value_object *) self)->value;
537 const char *user_encoding = NULL;
538 static const char *keywords[] = { "encoding", "length", NULL };
539 PyObject *str_obj = NULL;
540
541 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG,
542 keywords, &user_encoding, &length))
543 return NULL;
544
545 if (length < -1)
546 {
547 PyErr_SetString (PyExc_ValueError, _("Invalid length."));
548 return NULL;
549 }
550
551 try
552 {
553 scoped_value_mark free_values;
554 struct type *type, *realtype;
555 CORE_ADDR addr;
556
557 type = value->type ();
558 realtype = check_typedef (type);
559
560 switch (realtype->code ())
561 {
562 case TYPE_CODE_ARRAY:
563 {
564 LONGEST array_length = -1;
565 LONGEST low_bound, high_bound;
566
567 /* PR 20786: There's no way to specify an array of length zero.
568 Record a length of [0,-1] which is how Ada does it. Anything
569 we do is broken, but this one possible solution. */
570 if (get_array_bounds (realtype, &low_bound, &high_bound))
571 array_length = high_bound - low_bound + 1;
572 if (length == -1)
573 length = array_length;
574 else if (array_length == -1)
575 {
576 type = lookup_array_range_type (realtype->target_type (),
577 0, length - 1);
578 }
579 else if (length != array_length)
580 {
581 /* We need to create a new array type with the
582 specified length. */
583 if (length > array_length)
584 error (_("Length is larger than array size."));
585 type = lookup_array_range_type (realtype->target_type (),
586 low_bound,
587 low_bound + length - 1);
588 }
589 addr = value->address ();
590 break;
591 }
592 case TYPE_CODE_PTR:
593 /* If a length is specified we defer creating an array of the
594 specified width until we need to. */
595 addr = value_as_address (value);
596 break;
597 default:
598 /* Should flag an error here. PR 20769. */
599 addr = value->address ();
600 break;
601 }
602
603 str_obj = gdbpy_create_lazy_string_object (addr, length, user_encoding,
604 type);
605 }
606 catch (const gdb_exception &except)
607 {
608 GDB_PY_HANDLE_EXCEPTION (except);
609 }
610
611 return str_obj;
612 }
613
614 /* Implementation of gdb.Value.string ([encoding] [, errors]
615 [, length]) -> string. Return Unicode string with value contents.
616 If ENCODING is not given, the string is assumed to be encoded in
617 the target's charset. If LENGTH is provided, only fetch string to
618 the length provided. */
619
620 static PyObject *
621 valpy_string (PyObject *self, PyObject *args, PyObject *kw)
622 {
623 int length = -1;
624 gdb::unique_xmalloc_ptr<gdb_byte> buffer;
625 struct value *value = ((value_object *) self)->value;
626 const char *encoding = NULL;
627 const char *errors = NULL;
628 const char *user_encoding = NULL;
629 const char *la_encoding = NULL;
630 struct type *char_type;
631 static const char *keywords[] = { "encoding", "errors", "length", NULL };
632
633 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords,
634 &user_encoding, &errors, &length))
635 return NULL;
636
637 try
638 {
639 c_get_string (value, &buffer, &length, &char_type, &la_encoding);
640 }
641 catch (const gdb_exception &except)
642 {
643 GDB_PY_HANDLE_EXCEPTION (except);
644 }
645
646 encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding;
647 return PyUnicode_Decode ((const char *) buffer.get (),
648 length * char_type->length (),
649 encoding, errors);
650 }
651
652 /* Given a Python object, copy its truth value to a C bool (the value
653 pointed by dest).
654 If src_obj is NULL, then *dest is not modified.
655
656 Return true in case of success (including src_obj being NULL), false
657 in case of error. */
658
659 static bool
660 copy_py_bool_obj (bool *dest, PyObject *src_obj)
661 {
662 if (src_obj)
663 {
664 int cmp = PyObject_IsTrue (src_obj);
665 if (cmp < 0)
666 return false;
667 *dest = cmp;
668 }
669
670 return true;
671 }
672
673 /* Implementation of gdb.Value.format_string (...) -> string.
674 Return Unicode string with value contents formatted using the
675 keyword-only arguments. */
676
677 static PyObject *
678 valpy_format_string (PyObject *self, PyObject *args, PyObject *kw)
679 {
680 static const char *keywords[] =
681 {
682 /* Basic C/C++ options. */
683 "raw", /* See the /r option to print. */
684 "pretty_arrays", /* See set print array on|off. */
685 "pretty_structs", /* See set print pretty on|off. */
686 "array_indexes", /* See set print array-indexes on|off. */
687 "symbols", /* See set print symbol on|off. */
688 "unions", /* See set print union on|off. */
689 "address", /* See set print address on|off. */
690 "styling", /* Should we apply styling. */
691 "nibbles", /* See set print nibbles on|off. */
692 "summary", /* Summary mode for non-scalars. */
693 /* C++ options. */
694 "deref_refs", /* No corresponding setting. */
695 "actual_objects", /* See set print object on|off. */
696 "static_members", /* See set print static-members on|off. */
697 /* C non-bool options. */
698 "max_characters", /* See set print characters N. */
699 "max_elements", /* See set print elements N. */
700 "max_depth", /* See set print max-depth N. */
701 "repeat_threshold", /* See set print repeats. */
702 "format", /* The format passed to the print command. */
703 NULL
704 };
705
706 /* This function has too many arguments to be useful as positionals, so
707 the user should specify them all as keyword arguments.
708 Python 3.3 and later have a way to specify it (both in C and Python
709 itself), but we could be compiled with older versions, so we just
710 check that the args tuple is empty. */
711 Py_ssize_t positional_count = PyObject_Length (args);
712 if (positional_count < 0)
713 return NULL;
714 else if (positional_count > 0)
715 {
716 /* This matches the error message that Python 3.3 raises when
717 passing positionals to functions expecting keyword-only
718 arguments. */
719 PyErr_Format (PyExc_TypeError,
720 "format_string() takes 0 positional arguments but %zu were given",
721 positional_count);
722 return NULL;
723 }
724
725 struct value_print_options opts;
726 gdbpy_get_print_options (&opts);
727 opts.deref_ref = false;
728
729 /* We need objects for booleans as the "p" flag for bools is new in
730 Python 3.3. */
731 PyObject *raw_obj = NULL;
732 PyObject *pretty_arrays_obj = NULL;
733 PyObject *pretty_structs_obj = NULL;
734 PyObject *array_indexes_obj = NULL;
735 PyObject *symbols_obj = NULL;
736 PyObject *unions_obj = NULL;
737 PyObject *address_obj = NULL;
738 PyObject *styling_obj = Py_False;
739 PyObject *nibbles_obj = NULL;
740 PyObject *deref_refs_obj = NULL;
741 PyObject *actual_objects_obj = NULL;
742 PyObject *static_members_obj = NULL;
743 PyObject *summary_obj = NULL;
744 char *format = NULL;
745 if (!gdb_PyArg_ParseTupleAndKeywords (args,
746 kw,
747 "|O!O!O!O!O!O!O!O!O!O!O!O!O!IIIIs",
748 keywords,
749 &PyBool_Type, &raw_obj,
750 &PyBool_Type, &pretty_arrays_obj,
751 &PyBool_Type, &pretty_structs_obj,
752 &PyBool_Type, &array_indexes_obj,
753 &PyBool_Type, &symbols_obj,
754 &PyBool_Type, &unions_obj,
755 &PyBool_Type, &address_obj,
756 &PyBool_Type, &styling_obj,
757 &PyBool_Type, &nibbles_obj,
758 &PyBool_Type, &summary_obj,
759 &PyBool_Type, &deref_refs_obj,
760 &PyBool_Type, &actual_objects_obj,
761 &PyBool_Type, &static_members_obj,
762 &opts.print_max_chars,
763 &opts.print_max,
764 &opts.max_depth,
765 &opts.repeat_count_threshold,
766 &format))
767 return NULL;
768
769 /* Set boolean arguments. */
770 if (!copy_py_bool_obj (&opts.raw, raw_obj))
771 return NULL;
772 if (!copy_py_bool_obj (&opts.prettyformat_arrays, pretty_arrays_obj))
773 return NULL;
774 if (!copy_py_bool_obj (&opts.prettyformat_structs, pretty_structs_obj))
775 return NULL;
776 if (!copy_py_bool_obj (&opts.print_array_indexes, array_indexes_obj))
777 return NULL;
778 if (!copy_py_bool_obj (&opts.symbol_print, symbols_obj))
779 return NULL;
780 if (!copy_py_bool_obj (&opts.unionprint, unions_obj))
781 return NULL;
782 if (!copy_py_bool_obj (&opts.addressprint, address_obj))
783 return NULL;
784 if (!copy_py_bool_obj (&opts.nibblesprint, nibbles_obj))
785 return NULL;
786 if (!copy_py_bool_obj (&opts.deref_ref, deref_refs_obj))
787 return NULL;
788 if (!copy_py_bool_obj (&opts.objectprint, actual_objects_obj))
789 return NULL;
790 if (!copy_py_bool_obj (&opts.static_field_print, static_members_obj))
791 return NULL;
792 if (!copy_py_bool_obj (&opts.summary, summary_obj))
793 return nullptr;
794
795 /* Numeric arguments for which 0 means unlimited (which we represent as
796 UINT_MAX). Note that the max-depth numeric argument uses -1 as
797 unlimited, and 0 is a valid choice. */
798 if (opts.print_max == 0)
799 opts.print_max = UINT_MAX;
800 if (opts.repeat_count_threshold == 0)
801 opts.repeat_count_threshold = UINT_MAX;
802
803 /* Other arguments. */
804 if (format != NULL)
805 {
806 if (strlen (format) == 1)
807 opts.format = format[0];
808 else
809 {
810 /* Mimic the message on standard Python ones for similar
811 errors. */
812 PyErr_SetString (PyExc_ValueError,
813 "a single character is required");
814 return NULL;
815 }
816 }
817
818 string_file stb (PyObject_IsTrue (styling_obj));
819
820 try
821 {
822 common_val_print (((value_object *) self)->value, &stb, 0,
823 &opts, current_language);
824 }
825 catch (const gdb_exception &except)
826 {
827 GDB_PY_HANDLE_EXCEPTION (except);
828 }
829
830 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
831 }
832
833 /* A helper function that implements the various cast operators. */
834
835 static PyObject *
836 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
837 {
838 PyObject *type_obj, *result = NULL;
839 struct type *type;
840
841 if (! PyArg_ParseTuple (args, "O", &type_obj))
842 return NULL;
843
844 type = type_object_to_type (type_obj);
845 if (! type)
846 {
847 PyErr_SetString (PyExc_RuntimeError,
848 _("Argument must be a type."));
849 return NULL;
850 }
851
852 try
853 {
854 struct value *val = ((value_object *) self)->value;
855 struct value *res_val;
856 scoped_value_mark free_values;
857
858 if (op == UNOP_DYNAMIC_CAST)
859 res_val = value_dynamic_cast (type, val);
860 else if (op == UNOP_REINTERPRET_CAST)
861 res_val = value_reinterpret_cast (type, val);
862 else
863 {
864 gdb_assert (op == UNOP_CAST);
865 res_val = value_cast (type, val);
866 }
867
868 result = value_to_value_object (res_val);
869 }
870 catch (const gdb_exception &except)
871 {
872 GDB_PY_HANDLE_EXCEPTION (except);
873 }
874
875 return result;
876 }
877
878 /* Implementation of the "cast" method. */
879
880 static PyObject *
881 valpy_cast (PyObject *self, PyObject *args)
882 {
883 return valpy_do_cast (self, args, UNOP_CAST);
884 }
885
886 /* Implementation of the "dynamic_cast" method. */
887
888 static PyObject *
889 valpy_dynamic_cast (PyObject *self, PyObject *args)
890 {
891 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
892 }
893
894 /* Implementation of the "reinterpret_cast" method. */
895
896 static PyObject *
897 valpy_reinterpret_cast (PyObject *self, PyObject *args)
898 {
899 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
900 }
901
902 /* Assign NEW_VALUE into SELF, handles 'struct value' reference counting,
903 and also clearing the bytes data cached within SELF. Return true if
904 the assignment was successful, otherwise return false, in which case a
905 Python exception will be set. */
906
907 static bool
908 valpy_assign_core (value_object *self, struct value *new_value)
909 {
910 try
911 {
912 new_value = value_assign (self->value, new_value);
913
914 /* value_as_address returns a new value with the same location
915 as the old one. Ensure that this gdb.Value is updated to
916 reflect the new value. */
917 new_value->incref ();
918 self->value->decref ();
919 Py_CLEAR (self->content_bytes);
920 self->value = new_value;
921 }
922 catch (const gdb_exception &except)
923 {
924 gdbpy_convert_exception (except);
925 return false;
926 }
927
928 return true;
929 }
930
931 /* Implementation of the "assign" method. */
932
933 static PyObject *
934 valpy_assign (PyObject *self_obj, PyObject *args)
935 {
936 PyObject *val_obj;
937
938 if (! PyArg_ParseTuple (args, "O", &val_obj))
939 return nullptr;
940
941 struct value *val = convert_value_from_python (val_obj);
942 if (val == nullptr)
943 return nullptr;
944
945 value_object *self = (value_object *) self_obj;
946 if (!valpy_assign_core (self, val))
947 return nullptr;
948
949 Py_RETURN_NONE;
950 }
951
952 static Py_ssize_t
953 valpy_length (PyObject *self)
954 {
955 /* We don't support getting the number of elements in a struct / class. */
956 PyErr_SetString (PyExc_NotImplementedError,
957 _("Invalid operation on gdb.Value."));
958 return -1;
959 }
960
961 /* Return 1 if the gdb.Field object FIELD is present in the value V.
962 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
963
964 static int
965 value_has_field (struct value *v, PyObject *field)
966 {
967 struct type *parent_type, *val_type;
968 enum type_code type_code;
969 gdbpy_ref<> type_object (PyObject_GetAttrString (field, "parent_type"));
970 int has_field = 0;
971
972 if (type_object == NULL)
973 return -1;
974
975 parent_type = type_object_to_type (type_object.get ());
976 if (parent_type == NULL)
977 {
978 PyErr_SetString (PyExc_TypeError,
979 _("'parent_type' attribute of gdb.Field object is not a"
980 "gdb.Type object."));
981 return -1;
982 }
983
984 try
985 {
986 val_type = v->type ();
987 val_type = check_typedef (val_type);
988 if (val_type->is_pointer_or_reference ())
989 val_type = check_typedef (val_type->target_type ());
990
991 type_code = val_type->code ();
992 if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION)
993 && types_equal (val_type, parent_type))
994 has_field = 1;
995 else
996 has_field = 0;
997 }
998 catch (const gdb_exception &except)
999 {
1000 GDB_PY_SET_HANDLE_EXCEPTION (except);
1001 }
1002
1003 return has_field;
1004 }
1005
1006 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
1007 Returns 1 if the flag value is true, 0 if it is false, and -1 if
1008 a Python error occurs. */
1009
1010 static int
1011 get_field_flag (PyObject *field, const char *flag_name)
1012 {
1013 gdbpy_ref<> flag_object (PyObject_GetAttrString (field, flag_name));
1014
1015 if (flag_object == NULL)
1016 return -1;
1017
1018 return PyObject_IsTrue (flag_object.get ());
1019 }
1020
1021 /* Return the "type" attribute of a gdb.Field object.
1022 Returns NULL on error, with a Python exception set. */
1023
1024 static struct type *
1025 get_field_type (PyObject *field)
1026 {
1027 gdbpy_ref<> ftype_obj (PyObject_GetAttrString (field, "type"));
1028 struct type *ftype;
1029
1030 if (ftype_obj == NULL)
1031 return NULL;
1032 ftype = type_object_to_type (ftype_obj.get ());
1033 if (ftype == NULL)
1034 PyErr_SetString (PyExc_TypeError,
1035 _("'type' attribute of gdb.Field object is not a "
1036 "gdb.Type object."));
1037
1038 return ftype;
1039 }
1040
1041 /* Given string name or a gdb.Field object corresponding to an element inside
1042 a structure, return its value object. Returns NULL on error, with a python
1043 exception set. */
1044
1045 static PyObject *
1046 valpy_getitem (PyObject *self, PyObject *key)
1047 {
1048 value_object *self_value = (value_object *) self;
1049 gdb::unique_xmalloc_ptr<char> field;
1050 struct type *base_class_type = NULL, *field_type = NULL;
1051 long bitpos = -1;
1052 PyObject *result = NULL;
1053
1054 if (gdbpy_is_string (key))
1055 {
1056 field = python_string_to_host_string (key);
1057 if (field == NULL)
1058 return NULL;
1059 }
1060 else if (gdbpy_is_field (key))
1061 {
1062 int is_base_class, valid_field;
1063
1064 valid_field = value_has_field (self_value->value, key);
1065 if (valid_field < 0)
1066 return NULL;
1067 else if (valid_field == 0)
1068 {
1069 PyErr_SetString (PyExc_TypeError,
1070 _("Invalid lookup for a field not contained in "
1071 "the value."));
1072
1073 return NULL;
1074 }
1075
1076 is_base_class = get_field_flag (key, "is_base_class");
1077 if (is_base_class < 0)
1078 return NULL;
1079 else if (is_base_class > 0)
1080 {
1081 base_class_type = get_field_type (key);
1082 if (base_class_type == NULL)
1083 return NULL;
1084 }
1085 else
1086 {
1087 gdbpy_ref<> name_obj (PyObject_GetAttrString (key, "name"));
1088
1089 if (name_obj == NULL)
1090 return NULL;
1091
1092 if (name_obj != Py_None)
1093 {
1094 field = python_string_to_host_string (name_obj.get ());
1095 if (field == NULL)
1096 return NULL;
1097 }
1098 else
1099 {
1100 if (!PyObject_HasAttrString (key, "bitpos"))
1101 {
1102 PyErr_SetString (PyExc_AttributeError,
1103 _("gdb.Field object has no name and no "
1104 "'bitpos' attribute."));
1105
1106 return NULL;
1107 }
1108 gdbpy_ref<> bitpos_obj (PyObject_GetAttrString (key, "bitpos"));
1109 if (bitpos_obj == NULL)
1110 return NULL;
1111 if (!gdb_py_int_as_long (bitpos_obj.get (), &bitpos))
1112 return NULL;
1113
1114 field_type = get_field_type (key);
1115 if (field_type == NULL)
1116 return NULL;
1117 }
1118 }
1119 }
1120
1121 try
1122 {
1123 struct value *tmp = self_value->value;
1124 struct value *res_val = NULL;
1125 scoped_value_mark free_values;
1126
1127 if (field)
1128 res_val = value_struct_elt (&tmp, {}, field.get (), NULL,
1129 "struct/class/union");
1130 else if (bitpos >= 0)
1131 res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type,
1132 "struct/class/union");
1133 else if (base_class_type != NULL)
1134 {
1135 struct type *val_type;
1136
1137 val_type = check_typedef (tmp->type ());
1138 if (val_type->code () == TYPE_CODE_PTR)
1139 res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
1140 else if (val_type->code () == TYPE_CODE_REF)
1141 res_val = value_cast (lookup_lvalue_reference_type (base_class_type),
1142 tmp);
1143 else if (val_type->code () == TYPE_CODE_RVALUE_REF)
1144 res_val = value_cast (lookup_rvalue_reference_type (base_class_type),
1145 tmp);
1146 else
1147 res_val = value_cast (base_class_type, tmp);
1148 }
1149 else
1150 {
1151 /* Assume we are attempting an array access, and let the
1152 value code throw an exception if the index has an invalid
1153 type. */
1154 struct value *idx = convert_value_from_python (key);
1155
1156 if (idx != NULL)
1157 {
1158 /* Check the value's type is something that can be accessed via
1159 a subscript. */
1160 struct type *type;
1161
1162 tmp = coerce_ref (tmp);
1163 type = check_typedef (tmp->type ());
1164 if (type->code () != TYPE_CODE_ARRAY
1165 && type->code () != TYPE_CODE_PTR)
1166 error (_("Cannot subscript requested type."));
1167 else if (ADA_TYPE_P (type))
1168 res_val = ada_value_subscript (tmp, 1, &idx);
1169 else
1170 res_val = value_subscript (tmp, value_as_long (idx));
1171 }
1172 }
1173
1174 if (res_val)
1175 result = value_to_value_object (res_val);
1176 }
1177 catch (gdb_exception &ex)
1178 {
1179 GDB_PY_HANDLE_EXCEPTION (ex);
1180 }
1181
1182 return result;
1183 }
1184
1185 static int
1186 valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
1187 {
1188 PyErr_Format (PyExc_NotImplementedError,
1189 _("Setting of struct elements is not currently supported."));
1190 return -1;
1191 }
1192
1193 /* Called by the Python interpreter to perform an inferior function
1194 call on the value. Returns NULL on error, with a python exception set. */
1195 static PyObject *
1196 valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
1197 {
1198 Py_ssize_t args_count;
1199 struct value *function = ((value_object *) self)->value;
1200 struct value **vargs = NULL;
1201 struct type *ftype = NULL;
1202 PyObject *result = NULL;
1203
1204 try
1205 {
1206 ftype = check_typedef (function->type ());
1207 }
1208 catch (const gdb_exception &except)
1209 {
1210 GDB_PY_HANDLE_EXCEPTION (except);
1211 }
1212
1213 if (ftype->code () != TYPE_CODE_FUNC && ftype->code () != TYPE_CODE_METHOD)
1214 {
1215 PyErr_SetString (PyExc_RuntimeError,
1216 _("Value is not callable (not TYPE_CODE_FUNC"
1217 " or TYPE_CODE_METHOD)."));
1218 return NULL;
1219 }
1220
1221 if (! PyTuple_Check (args))
1222 {
1223 PyErr_SetString (PyExc_TypeError,
1224 _("Inferior arguments must be provided in a tuple."));
1225 return NULL;
1226 }
1227
1228 args_count = PyTuple_Size (args);
1229 if (args_count > 0)
1230 {
1231 int i;
1232
1233 vargs = XALLOCAVEC (struct value *, args_count);
1234 for (i = 0; i < args_count; i++)
1235 {
1236 PyObject *item = PyTuple_GetItem (args, i);
1237
1238 if (item == NULL)
1239 return NULL;
1240
1241 vargs[i] = convert_value_from_python (item);
1242 if (vargs[i] == NULL)
1243 return NULL;
1244 }
1245 }
1246
1247 try
1248 {
1249 scoped_value_mark free_values;
1250
1251 value *return_value
1252 = call_function_by_hand (function, NULL,
1253 gdb::make_array_view (vargs, args_count));
1254 result = value_to_value_object (return_value);
1255 }
1256 catch (const gdb_exception &except)
1257 {
1258 GDB_PY_HANDLE_EXCEPTION (except);
1259 }
1260
1261 return result;
1262 }
1263
1264 /* Called by the Python interpreter to obtain string representation
1265 of the object. */
1266 static PyObject *
1267 valpy_str (PyObject *self)
1268 {
1269 struct value_print_options opts;
1270
1271 gdbpy_get_print_options (&opts);
1272 opts.deref_ref = false;
1273
1274 string_file stb;
1275
1276 try
1277 {
1278 common_val_print (((value_object *) self)->value, &stb, 0,
1279 &opts, current_language);
1280 }
1281 catch (const gdb_exception &except)
1282 {
1283 GDB_PY_HANDLE_EXCEPTION (except);
1284 }
1285
1286 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
1287 }
1288
1289 /* Implements gdb.Value.is_optimized_out. */
1290 static PyObject *
1291 valpy_get_is_optimized_out (PyObject *self, void *closure)
1292 {
1293 struct value *value = ((value_object *) self)->value;
1294 int opt = 0;
1295
1296 try
1297 {
1298 opt = value->optimized_out ();
1299 }
1300 catch (const gdb_exception &except)
1301 {
1302 GDB_PY_HANDLE_EXCEPTION (except);
1303 }
1304
1305 if (opt)
1306 Py_RETURN_TRUE;
1307
1308 Py_RETURN_FALSE;
1309 }
1310
1311 /* Implements gdb.Value.is_lazy. */
1312 static PyObject *
1313 valpy_get_is_lazy (PyObject *self, void *closure)
1314 {
1315 struct value *value = ((value_object *) self)->value;
1316 int opt = 0;
1317
1318 try
1319 {
1320 opt = value->lazy ();
1321 }
1322 catch (const gdb_exception &except)
1323 {
1324 GDB_PY_HANDLE_EXCEPTION (except);
1325 }
1326
1327 if (opt)
1328 Py_RETURN_TRUE;
1329
1330 Py_RETURN_FALSE;
1331 }
1332
1333 /* Get gdb.Value.bytes attribute. */
1334
1335 static PyObject *
1336 valpy_get_bytes (PyObject *self, void *closure)
1337 {
1338 value_object *value_obj = (value_object *) self;
1339 struct value *value = value_obj->value;
1340
1341 if (value_obj->content_bytes != nullptr)
1342 {
1343 Py_INCREF (value_obj->content_bytes);
1344 return value_obj->content_bytes;
1345 }
1346
1347 gdb::array_view<const gdb_byte> contents;
1348 try
1349 {
1350 contents = value->contents ();
1351 }
1352 catch (const gdb_exception &except)
1353 {
1354 GDB_PY_HANDLE_EXCEPTION (except);
1355 }
1356
1357 value_obj->content_bytes
1358 = PyBytes_FromStringAndSize ((const char *) contents.data (),
1359 contents.size ());
1360 Py_XINCREF (value_obj->content_bytes);
1361 return value_obj->content_bytes;
1362 }
1363
1364 /* Set gdb.Value.bytes attribute. */
1365
1366 static int
1367 valpy_set_bytes (PyObject *self_obj, PyObject *new_value_obj, void *closure)
1368 {
1369 value_object *self = (value_object *) self_obj;
1370
1371 /* Create a new value from the buffer NEW_VALUE_OBJ. We pass true here
1372 to indicate that NEW_VALUE_OBJ must match exactly the type length. */
1373 struct value *new_value
1374 = convert_buffer_and_type_to_value (new_value_obj, self->value->type (),
1375 true);
1376 if (new_value == nullptr)
1377 return -1;
1378
1379 if (!valpy_assign_core (self, new_value))
1380 return -1;
1381
1382 return 0;
1383 }
1384
1385 /* Implements gdb.Value.fetch_lazy (). */
1386 static PyObject *
1387 valpy_fetch_lazy (PyObject *self, PyObject *args)
1388 {
1389 struct value *value = ((value_object *) self)->value;
1390
1391 try
1392 {
1393 if (value->lazy ())
1394 value->fetch_lazy ();
1395 }
1396 catch (const gdb_exception &except)
1397 {
1398 GDB_PY_HANDLE_EXCEPTION (except);
1399 }
1400
1401 Py_RETURN_NONE;
1402 }
1403
1404 /* Calculate and return the address of the PyObject as the value of
1405 the builtin __hash__ call. */
1406 static Py_hash_t
1407 valpy_hash (PyObject *self)
1408 {
1409 return (intptr_t) self;
1410 }
1411
1412 enum valpy_opcode
1413 {
1414 VALPY_ADD,
1415 VALPY_SUB,
1416 VALPY_MUL,
1417 VALPY_DIV,
1418 VALPY_REM,
1419 VALPY_POW,
1420 VALPY_LSH,
1421 VALPY_RSH,
1422 VALPY_BITAND,
1423 VALPY_BITOR,
1424 VALPY_BITXOR
1425 };
1426
1427 /* If TYPE is a reference, return the target; otherwise return TYPE. */
1428 #define STRIP_REFERENCE(TYPE) \
1429 (TYPE_IS_REFERENCE (TYPE) ? ((TYPE)->target_type ()) : (TYPE))
1430
1431 /* Helper for valpy_binop. Returns a value object which is the result
1432 of applying the operation specified by OPCODE to the given
1433 arguments. Throws a GDB exception on error. */
1434
1435 static PyObject *
1436 valpy_binop_throw (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1437 {
1438 PyObject *result = NULL;
1439
1440 struct value *arg1, *arg2;
1441 struct value *res_val = NULL;
1442 enum exp_opcode op = OP_NULL;
1443 int handled = 0;
1444
1445 scoped_value_mark free_values;
1446
1447 /* If the gdb.Value object is the second operand, then it will be
1448 passed to us as the OTHER argument, and SELF will be an entirely
1449 different kind of object, altogether. Because of this, we can't
1450 assume self is a gdb.Value object and need to convert it from
1451 python as well. */
1452 arg1 = convert_value_from_python (self);
1453 if (arg1 == NULL)
1454 return NULL;
1455
1456 arg2 = convert_value_from_python (other);
1457 if (arg2 == NULL)
1458 return NULL;
1459
1460 switch (opcode)
1461 {
1462 case VALPY_ADD:
1463 {
1464 struct type *ltype = arg1->type ();
1465 struct type *rtype = arg2->type ();
1466
1467 ltype = check_typedef (ltype);
1468 ltype = STRIP_REFERENCE (ltype);
1469 rtype = check_typedef (rtype);
1470 rtype = STRIP_REFERENCE (rtype);
1471
1472 handled = 1;
1473 if (ltype->code () == TYPE_CODE_PTR
1474 && is_integral_type (rtype))
1475 res_val = value_ptradd (arg1, value_as_long (arg2));
1476 else if (rtype->code () == TYPE_CODE_PTR
1477 && is_integral_type (ltype))
1478 res_val = value_ptradd (arg2, value_as_long (arg1));
1479 else
1480 {
1481 handled = 0;
1482 op = BINOP_ADD;
1483 }
1484 }
1485 break;
1486 case VALPY_SUB:
1487 {
1488 struct type *ltype = arg1->type ();
1489 struct type *rtype = arg2->type ();
1490
1491 ltype = check_typedef (ltype);
1492 ltype = STRIP_REFERENCE (ltype);
1493 rtype = check_typedef (rtype);
1494 rtype = STRIP_REFERENCE (rtype);
1495
1496 handled = 1;
1497 if (ltype->code () == TYPE_CODE_PTR
1498 && rtype->code () == TYPE_CODE_PTR)
1499 /* A ptrdiff_t for the target would be preferable here. */
1500 res_val = value_from_longest (builtin_type_pyint,
1501 value_ptrdiff (arg1, arg2));
1502 else if (ltype->code () == TYPE_CODE_PTR
1503 && is_integral_type (rtype))
1504 res_val = value_ptradd (arg1, - value_as_long (arg2));
1505 else
1506 {
1507 handled = 0;
1508 op = BINOP_SUB;
1509 }
1510 }
1511 break;
1512 case VALPY_MUL:
1513 op = BINOP_MUL;
1514 break;
1515 case VALPY_DIV:
1516 op = BINOP_DIV;
1517 break;
1518 case VALPY_REM:
1519 op = BINOP_REM;
1520 break;
1521 case VALPY_POW:
1522 op = BINOP_EXP;
1523 break;
1524 case VALPY_LSH:
1525 op = BINOP_LSH;
1526 break;
1527 case VALPY_RSH:
1528 op = BINOP_RSH;
1529 break;
1530 case VALPY_BITAND:
1531 op = BINOP_BITWISE_AND;
1532 break;
1533 case VALPY_BITOR:
1534 op = BINOP_BITWISE_IOR;
1535 break;
1536 case VALPY_BITXOR:
1537 op = BINOP_BITWISE_XOR;
1538 break;
1539 }
1540
1541 if (!handled)
1542 {
1543 if (binop_user_defined_p (op, arg1, arg2))
1544 res_val = value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
1545 else
1546 res_val = value_binop (arg1, arg2, op);
1547 }
1548
1549 if (res_val)
1550 result = value_to_value_object (res_val);
1551
1552 return result;
1553 }
1554
1555 /* Returns a value object which is the result of applying the operation
1556 specified by OPCODE to the given arguments. Returns NULL on error, with
1557 a python exception set. */
1558 static PyObject *
1559 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1560 {
1561 PyObject *result = NULL;
1562
1563 try
1564 {
1565 result = valpy_binop_throw (opcode, self, other);
1566 }
1567 catch (const gdb_exception &except)
1568 {
1569 GDB_PY_HANDLE_EXCEPTION (except);
1570 }
1571
1572 return result;
1573 }
1574
1575 static PyObject *
1576 valpy_add (PyObject *self, PyObject *other)
1577 {
1578 return valpy_binop (VALPY_ADD, self, other);
1579 }
1580
1581 static PyObject *
1582 valpy_subtract (PyObject *self, PyObject *other)
1583 {
1584 return valpy_binop (VALPY_SUB, self, other);
1585 }
1586
1587 static PyObject *
1588 valpy_multiply (PyObject *self, PyObject *other)
1589 {
1590 return valpy_binop (VALPY_MUL, self, other);
1591 }
1592
1593 static PyObject *
1594 valpy_divide (PyObject *self, PyObject *other)
1595 {
1596 return valpy_binop (VALPY_DIV, self, other);
1597 }
1598
1599 static PyObject *
1600 valpy_remainder (PyObject *self, PyObject *other)
1601 {
1602 return valpy_binop (VALPY_REM, self, other);
1603 }
1604
1605 static PyObject *
1606 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
1607 {
1608 /* We don't support the ternary form of pow. I don't know how to express
1609 that, so let's just throw NotImplementedError to at least do something
1610 about it. */
1611 if (unused != Py_None)
1612 {
1613 PyErr_SetString (PyExc_NotImplementedError,
1614 "Invalid operation on gdb.Value.");
1615 return NULL;
1616 }
1617
1618 return valpy_binop (VALPY_POW, self, other);
1619 }
1620
1621 static PyObject *
1622 valpy_negative (PyObject *self)
1623 {
1624 PyObject *result = NULL;
1625
1626 try
1627 {
1628 /* Perhaps overkill, but consistency has some virtue. */
1629 scoped_value_mark free_values;
1630 struct value *val;
1631
1632 val = value_neg (((value_object *) self)->value);
1633 result = value_to_value_object (val);
1634 }
1635 catch (const gdb_exception &except)
1636 {
1637 GDB_PY_HANDLE_EXCEPTION (except);
1638 }
1639
1640 return result;
1641 }
1642
1643 static PyObject *
1644 valpy_positive (PyObject *self)
1645 {
1646 return value_to_value_object (((value_object *) self)->value);
1647 }
1648
1649 static PyObject *
1650 valpy_absolute (PyObject *self)
1651 {
1652 struct value *value = ((value_object *) self)->value;
1653 int isabs = 1;
1654
1655 try
1656 {
1657 scoped_value_mark free_values;
1658
1659 if (value_less (value, value::zero (value->type (), not_lval)))
1660 isabs = 0;
1661 }
1662 catch (const gdb_exception &except)
1663 {
1664 GDB_PY_HANDLE_EXCEPTION (except);
1665 }
1666
1667 if (isabs)
1668 return valpy_positive (self);
1669 else
1670 return valpy_negative (self);
1671 }
1672
1673 /* Implements boolean evaluation of gdb.Value. */
1674 static int
1675 valpy_nonzero (PyObject *self)
1676 {
1677 value_object *self_value = (value_object *) self;
1678 struct type *type;
1679 int nonzero = 0; /* Appease GCC warning. */
1680
1681 try
1682 {
1683 type = check_typedef (self_value->value->type ());
1684
1685 if (is_integral_type (type) || type->code () == TYPE_CODE_PTR)
1686 nonzero = !!value_as_long (self_value->value);
1687 else if (is_floating_value (self_value->value))
1688 nonzero = !target_float_is_zero
1689 (self_value->value->contents ().data (), type);
1690 else
1691 /* All other values are True. */
1692 nonzero = 1;
1693 }
1694 catch (gdb_exception &ex)
1695 {
1696 /* This is not documented in the Python documentation, but if
1697 this function fails, return -1 as slot_nb_nonzero does (the
1698 default Python nonzero function). */
1699 GDB_PY_SET_HANDLE_EXCEPTION (ex);
1700 }
1701
1702 return nonzero;
1703 }
1704
1705 /* Implements ~ for value objects. */
1706 static PyObject *
1707 valpy_invert (PyObject *self)
1708 {
1709 PyObject *result = nullptr;
1710
1711 try
1712 {
1713 scoped_value_mark free_values;
1714 struct value *val = value_complement (((value_object *) self)->value);
1715 result = value_to_value_object (val);
1716 }
1717 catch (const gdb_exception &except)
1718 {
1719 GDB_PY_HANDLE_EXCEPTION (except);
1720 }
1721
1722 return result;
1723 }
1724
1725 /* Implements left shift for value objects. */
1726 static PyObject *
1727 valpy_lsh (PyObject *self, PyObject *other)
1728 {
1729 return valpy_binop (VALPY_LSH, self, other);
1730 }
1731
1732 /* Implements right shift for value objects. */
1733 static PyObject *
1734 valpy_rsh (PyObject *self, PyObject *other)
1735 {
1736 return valpy_binop (VALPY_RSH, self, other);
1737 }
1738
1739 /* Implements bitwise and for value objects. */
1740 static PyObject *
1741 valpy_and (PyObject *self, PyObject *other)
1742 {
1743 return valpy_binop (VALPY_BITAND, self, other);
1744 }
1745
1746 /* Implements bitwise or for value objects. */
1747 static PyObject *
1748 valpy_or (PyObject *self, PyObject *other)
1749 {
1750 return valpy_binop (VALPY_BITOR, self, other);
1751 }
1752
1753 /* Implements bitwise xor for value objects. */
1754 static PyObject *
1755 valpy_xor (PyObject *self, PyObject *other)
1756 {
1757 return valpy_binop (VALPY_BITXOR, self, other);
1758 }
1759
1760 /* Helper for valpy_richcompare. Implements comparison operations for
1761 value objects. Returns true/false on success. Returns -1 with a
1762 Python exception set if a Python error is detected. Throws a GDB
1763 exception on other errors (memory error, etc.). */
1764
1765 static int
1766 valpy_richcompare_throw (PyObject *self, PyObject *other, int op)
1767 {
1768 int result;
1769 struct value *value_other;
1770 struct value *value_self;
1771
1772 scoped_value_mark free_values;
1773
1774 value_other = convert_value_from_python (other);
1775 if (value_other == NULL)
1776 return -1;
1777
1778 value_self = ((value_object *) self)->value;
1779
1780 switch (op)
1781 {
1782 case Py_LT:
1783 result = value_less (value_self, value_other);
1784 break;
1785 case Py_LE:
1786 result = value_less (value_self, value_other)
1787 || value_equal (value_self, value_other);
1788 break;
1789 case Py_EQ:
1790 result = value_equal (value_self, value_other);
1791 break;
1792 case Py_NE:
1793 result = !value_equal (value_self, value_other);
1794 break;
1795 case Py_GT:
1796 result = value_less (value_other, value_self);
1797 break;
1798 case Py_GE:
1799 result = (value_less (value_other, value_self)
1800 || value_equal (value_self, value_other));
1801 break;
1802 default:
1803 /* Can't happen. */
1804 PyErr_SetString (PyExc_NotImplementedError,
1805 _("Invalid operation on gdb.Value."));
1806 result = -1;
1807 break;
1808 }
1809
1810 return result;
1811 }
1812
1813
1814 /* Implements comparison operations for value objects. Returns NULL on error,
1815 with a python exception set. */
1816 static PyObject *
1817 valpy_richcompare (PyObject *self, PyObject *other, int op)
1818 {
1819 int result = 0;
1820
1821 if (other == Py_None)
1822 /* Comparing with None is special. From what I can tell, in Python
1823 None is smaller than anything else. */
1824 switch (op) {
1825 case Py_LT:
1826 case Py_LE:
1827 case Py_EQ:
1828 Py_RETURN_FALSE;
1829 case Py_NE:
1830 case Py_GT:
1831 case Py_GE:
1832 Py_RETURN_TRUE;
1833 default:
1834 /* Can't happen. */
1835 PyErr_SetString (PyExc_NotImplementedError,
1836 _("Invalid operation on gdb.Value."));
1837 return NULL;
1838 }
1839
1840 try
1841 {
1842 result = valpy_richcompare_throw (self, other, op);
1843 }
1844 catch (const gdb_exception &except)
1845 {
1846 GDB_PY_HANDLE_EXCEPTION (except);
1847 }
1848
1849 /* In this case, the Python exception has already been set. */
1850 if (result < 0)
1851 return NULL;
1852
1853 if (result == 1)
1854 Py_RETURN_TRUE;
1855
1856 Py_RETURN_FALSE;
1857 }
1858
1859 /* Implements conversion to long. */
1860 static PyObject *
1861 valpy_long (PyObject *self)
1862 {
1863 struct value *value = ((value_object *) self)->value;
1864 struct type *type = value->type ();
1865 LONGEST l = 0;
1866
1867 try
1868 {
1869 if (is_floating_value (value))
1870 {
1871 type = builtin_type_pylong;
1872 value = value_cast (type, value);
1873 }
1874
1875 type = check_typedef (type);
1876
1877 if (!is_integral_type (type)
1878 && type->code () != TYPE_CODE_PTR)
1879 error (_("Cannot convert value to long."));
1880
1881 l = value_as_long (value);
1882 }
1883 catch (const gdb_exception &except)
1884 {
1885 GDB_PY_HANDLE_EXCEPTION (except);
1886 }
1887
1888 if (type->is_unsigned ())
1889 return gdb_py_object_from_ulongest (l).release ();
1890 else
1891 return gdb_py_object_from_longest (l).release ();
1892 }
1893
1894 /* Implements conversion to float. */
1895 static PyObject *
1896 valpy_float (PyObject *self)
1897 {
1898 struct value *value = ((value_object *) self)->value;
1899 struct type *type = value->type ();
1900 double d = 0;
1901
1902 try
1903 {
1904 type = check_typedef (type);
1905
1906 if (type->code () == TYPE_CODE_FLT && is_floating_value (value))
1907 d = target_float_to_host_double (value->contents ().data (), type);
1908 else if (type->code () == TYPE_CODE_INT)
1909 {
1910 /* Note that valpy_long accepts TYPE_CODE_PTR and some
1911 others here here -- but casting a pointer or bool to a
1912 float seems wrong. */
1913 d = value_as_long (value);
1914 }
1915 else
1916 error (_("Cannot convert value to float."));
1917 }
1918 catch (const gdb_exception &except)
1919 {
1920 GDB_PY_HANDLE_EXCEPTION (except);
1921 }
1922
1923 return PyFloat_FromDouble (d);
1924 }
1925
1926 /* Returns an object for a value, without releasing it from the
1927 all_values chain. */
1928 PyObject *
1929 value_to_value_object (struct value *val)
1930 {
1931 value_object *val_obj;
1932
1933 val_obj = PyObject_New (value_object, &value_object_type);
1934 if (val_obj != NULL)
1935 {
1936 val->incref ();
1937 val_obj->value = val;
1938 val_obj->next = nullptr;
1939 val_obj->prev = nullptr;
1940 val_obj->address = NULL;
1941 val_obj->type = NULL;
1942 val_obj->dynamic_type = NULL;
1943 val_obj->content_bytes = nullptr;
1944 note_value (val_obj);
1945 }
1946
1947 return (PyObject *) val_obj;
1948 }
1949
1950 /* Returns a borrowed reference to the struct value corresponding to
1951 the given value object. */
1952 struct value *
1953 value_object_to_value (PyObject *self)
1954 {
1955 value_object *real;
1956
1957 if (! PyObject_TypeCheck (self, &value_object_type))
1958 return NULL;
1959 real = (value_object *) self;
1960 return real->value;
1961 }
1962
1963 /* Try to convert a Python value to a gdb value. If the value cannot
1964 be converted, set a Python exception and return NULL. Returns a
1965 reference to a new value on the all_values chain. */
1966
1967 struct value *
1968 convert_value_from_python (PyObject *obj)
1969 {
1970 struct value *value = NULL; /* -Wall */
1971 int cmp;
1972
1973 gdb_assert (obj != NULL);
1974
1975 try
1976 {
1977 if (PyBool_Check (obj))
1978 {
1979 cmp = PyObject_IsTrue (obj);
1980 if (cmp >= 0)
1981 value = value_from_longest (builtin_type_pybool, cmp);
1982 }
1983 else if (PyLong_Check (obj))
1984 {
1985 LONGEST l = PyLong_AsLongLong (obj);
1986
1987 if (PyErr_Occurred ())
1988 {
1989 /* If the error was an overflow, we can try converting to
1990 ULONGEST instead. */
1991 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1992 {
1993 gdbpy_err_fetch fetched_error;
1994 gdbpy_ref<> zero = gdb_py_object_from_longest (0);
1995
1996 /* Check whether obj is positive. */
1997 if (PyObject_RichCompareBool (obj, zero.get (), Py_GT) > 0)
1998 {
1999 ULONGEST ul;
2000
2001 ul = PyLong_AsUnsignedLongLong (obj);
2002 if (! PyErr_Occurred ())
2003 value = value_from_ulongest (builtin_type_upylong, ul);
2004 }
2005 else
2006 {
2007 /* There's nothing we can do. */
2008 fetched_error.restore ();
2009 }
2010 }
2011 }
2012 else
2013 value = value_from_longest (builtin_type_pylong, l);
2014 }
2015 else if (PyFloat_Check (obj))
2016 {
2017 double d = PyFloat_AsDouble (obj);
2018
2019 if (! PyErr_Occurred ())
2020 value = value_from_host_double (builtin_type_pyfloat, d);
2021 }
2022 else if (gdbpy_is_string (obj))
2023 {
2024 gdb::unique_xmalloc_ptr<char> s
2025 = python_string_to_target_string (obj);
2026 if (s != NULL)
2027 value
2028 = current_language->value_string (gdbpy_enter::get_gdbarch (),
2029 s.get (), strlen (s.get ()));
2030 }
2031 else if (PyObject_TypeCheck (obj, &value_object_type))
2032 value = ((value_object *) obj)->value->copy ();
2033 else if (gdbpy_is_lazy_string (obj))
2034 {
2035 PyObject *result;
2036
2037 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
2038 value = ((value_object *) result)->value->copy ();
2039 }
2040 else
2041 PyErr_Format (PyExc_TypeError,
2042 _("Could not convert Python object: %S."), obj);
2043 }
2044 catch (const gdb_exception &except)
2045 {
2046 gdbpy_convert_exception (except);
2047 return NULL;
2048 }
2049
2050 return value;
2051 }
2052
2053 /* Returns value object in the ARGth position in GDB's history. */
2054 PyObject *
2055 gdbpy_history (PyObject *self, PyObject *args)
2056 {
2057 int i;
2058
2059 if (!PyArg_ParseTuple (args, "i", &i))
2060 return NULL;
2061
2062 PyObject *result = nullptr;
2063 try
2064 {
2065 scoped_value_mark free_values;
2066 struct value *res_val = access_value_history (i);
2067 result = value_to_value_object (res_val);
2068 }
2069 catch (const gdb_exception &except)
2070 {
2071 GDB_PY_HANDLE_EXCEPTION (except);
2072 }
2073
2074 return result;
2075 }
2076
2077 /* Add a gdb.Value into GDB's history, and return (as an integer) the
2078 position of the newly added value. */
2079 PyObject *
2080 gdbpy_add_history (PyObject *self, PyObject *args)
2081 {
2082 PyObject *value_obj;
2083
2084 if (!PyArg_ParseTuple (args, "O", &value_obj))
2085 return nullptr;
2086
2087 struct value *value = convert_value_from_python (value_obj);
2088 if (value == nullptr)
2089 return nullptr;
2090
2091 try
2092 {
2093 int idx = value->record_latest ();
2094 return gdb_py_object_from_longest (idx).release ();
2095 }
2096 catch (const gdb_exception &except)
2097 {
2098 GDB_PY_HANDLE_EXCEPTION (except);
2099 }
2100
2101 return nullptr;
2102 }
2103
2104 /* Return an integer, the number of items in GDB's history. */
2105
2106 PyObject *
2107 gdbpy_history_count (PyObject *self, PyObject *args)
2108 {
2109 return gdb_py_object_from_ulongest (value_history_count ()).release ();
2110 }
2111
2112 /* Return the value of a convenience variable. */
2113 PyObject *
2114 gdbpy_convenience_variable (PyObject *self, PyObject *args)
2115 {
2116 const char *varname;
2117 struct value *res_val = NULL;
2118
2119 if (!PyArg_ParseTuple (args, "s", &varname))
2120 return NULL;
2121
2122 PyObject *result = nullptr;
2123 bool found = false;
2124 try
2125 {
2126 struct internalvar *var = lookup_only_internalvar (varname);
2127
2128 if (var != NULL)
2129 {
2130 scoped_value_mark free_values;
2131 res_val = value_of_internalvar (gdbpy_enter::get_gdbarch (), var);
2132 if (res_val->type ()->code () == TYPE_CODE_VOID)
2133 res_val = NULL;
2134 else
2135 {
2136 found = true;
2137 result = value_to_value_object (res_val);
2138 }
2139 }
2140 }
2141 catch (const gdb_exception &except)
2142 {
2143 GDB_PY_HANDLE_EXCEPTION (except);
2144 }
2145
2146 if (result == nullptr && !found)
2147 Py_RETURN_NONE;
2148
2149 return result;
2150 }
2151
2152 /* Set the value of a convenience variable. */
2153 PyObject *
2154 gdbpy_set_convenience_variable (PyObject *self, PyObject *args)
2155 {
2156 const char *varname;
2157 PyObject *value_obj;
2158 struct value *value = NULL;
2159
2160 if (!PyArg_ParseTuple (args, "sO", &varname, &value_obj))
2161 return NULL;
2162
2163 /* None means to clear the variable. */
2164 if (value_obj != Py_None)
2165 {
2166 value = convert_value_from_python (value_obj);
2167 if (value == NULL)
2168 return NULL;
2169 }
2170
2171 try
2172 {
2173 if (value == NULL)
2174 {
2175 struct internalvar *var = lookup_only_internalvar (varname);
2176
2177 if (var != NULL)
2178 clear_internalvar (var);
2179 }
2180 else
2181 {
2182 struct internalvar *var = lookup_internalvar (varname);
2183
2184 set_internalvar (var, value);
2185 }
2186 }
2187 catch (const gdb_exception &except)
2188 {
2189 GDB_PY_HANDLE_EXCEPTION (except);
2190 }
2191
2192 Py_RETURN_NONE;
2193 }
2194
2195 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
2196
2197 int
2198 gdbpy_is_value_object (PyObject *obj)
2199 {
2200 return PyObject_TypeCheck (obj, &value_object_type);
2201 }
2202
2203 static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
2204 gdbpy_initialize_values (void)
2205 {
2206 if (PyType_Ready (&value_object_type) < 0)
2207 return -1;
2208
2209 return gdb_pymodule_addobject (gdb_module, "Value",
2210 (PyObject *) &value_object_type);
2211 }
2212
2213 GDBPY_INITIALIZE_FILE (gdbpy_initialize_values);
2214
2215
2216
2218 static gdb_PyGetSetDef value_object_getset[] = {
2219 { "address", valpy_get_address, NULL, "The address of the value.",
2220 NULL },
2221 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
2222 "Boolean telling whether the value is optimized "
2223 "out (i.e., not available).",
2224 NULL },
2225 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
2226 { "dynamic_type", valpy_get_dynamic_type, NULL,
2227 "Dynamic type of the value.", NULL },
2228 { "is_lazy", valpy_get_is_lazy, NULL,
2229 "Boolean telling whether the value is lazy (not fetched yet\n\
2230 from the inferior). A lazy value is fetched when needed, or when\n\
2231 the \"fetch_lazy()\" method is called.", NULL },
2232 { "bytes", valpy_get_bytes, valpy_set_bytes,
2233 "Return a bytearray containing the bytes of this value.", nullptr },
2234 {NULL} /* Sentinel */
2235 };
2236
2237 static PyMethodDef value_object_methods[] = {
2238 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
2239 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
2240 "dynamic_cast (gdb.Type) -> gdb.Value\n\
2241 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
2242 },
2243 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
2244 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
2245 Cast the value to the supplied type, as if by the C++\n\
2246 reinterpret_cast operator."
2247 },
2248 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
2249 { "referenced_value", valpy_referenced_value, METH_NOARGS,
2250 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
2251 { "reference_value", valpy_lvalue_reference_value, METH_NOARGS,
2252 "Return a value of type TYPE_CODE_REF referencing this value." },
2253 { "rvalue_reference_value", valpy_rvalue_reference_value, METH_NOARGS,
2254 "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
2255 { "const_value", valpy_const_value, METH_NOARGS,
2256 "Return a 'const' qualified version of the same value." },
2257 { "lazy_string", (PyCFunction) valpy_lazy_string,
2258 METH_VARARGS | METH_KEYWORDS,
2259 "lazy_string ([encoding] [, length]) -> lazy_string\n\
2260 Return a lazy string representation of the value." },
2261 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
2262 "string ([encoding] [, errors] [, length]) -> string\n\
2263 Return Unicode string representation of the value." },
2264 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
2265 "Fetches the value from the inferior, if it was lazy." },
2266 { "format_string", (PyCFunction) valpy_format_string,
2267 METH_VARARGS | METH_KEYWORDS,
2268 "format_string (...) -> string\n\
2269 Return a string representation of the value using the specified\n\
2270 formatting options" },
2271 { "assign", (PyCFunction) valpy_assign, METH_VARARGS,
2272 "assign (VAL) -> None\n\
2273 Assign VAL to this value." },
2274 { "to_array", valpy_to_array, METH_NOARGS,
2275 "to_array () -> Value\n\
2276 Return value as an array, if possible." },
2277 {NULL} /* Sentinel */
2278 };
2279
2280 static PyNumberMethods value_object_as_number = {
2281 valpy_add,
2282 valpy_subtract,
2283 valpy_multiply,
2284 valpy_remainder,
2285 NULL, /* nb_divmod */
2286 valpy_power, /* nb_power */
2287 valpy_negative, /* nb_negative */
2288 valpy_positive, /* nb_positive */
2289 valpy_absolute, /* nb_absolute */
2290 valpy_nonzero, /* nb_nonzero */
2291 valpy_invert, /* nb_invert */
2292 valpy_lsh, /* nb_lshift */
2293 valpy_rsh, /* nb_rshift */
2294 valpy_and, /* nb_and */
2295 valpy_xor, /* nb_xor */
2296 valpy_or, /* nb_or */
2297 valpy_long, /* nb_int */
2298 NULL, /* reserved */
2299 valpy_float, /* nb_float */
2300 NULL, /* nb_inplace_add */
2301 NULL, /* nb_inplace_subtract */
2302 NULL, /* nb_inplace_multiply */
2303 NULL, /* nb_inplace_remainder */
2304 NULL, /* nb_inplace_power */
2305 NULL, /* nb_inplace_lshift */
2306 NULL, /* nb_inplace_rshift */
2307 NULL, /* nb_inplace_and */
2308 NULL, /* nb_inplace_xor */
2309 NULL, /* nb_inplace_or */
2310 NULL, /* nb_floor_divide */
2311 valpy_divide, /* nb_true_divide */
2312 NULL, /* nb_inplace_floor_divide */
2313 NULL, /* nb_inplace_true_divide */
2314 valpy_long, /* nb_index */
2315 };
2316
2317 static PyMappingMethods value_object_as_mapping = {
2318 valpy_length,
2319 valpy_getitem,
2320 valpy_setitem
2321 };
2322
2323 PyTypeObject value_object_type = {
2324 PyVarObject_HEAD_INIT (NULL, 0)
2325 "gdb.Value", /*tp_name*/
2326 sizeof (value_object), /*tp_basicsize*/
2327 0, /*tp_itemsize*/
2328 valpy_dealloc, /*tp_dealloc*/
2329 0, /*tp_print*/
2330 0, /*tp_getattr*/
2331 0, /*tp_setattr*/
2332 0, /*tp_compare*/
2333 0, /*tp_repr*/
2334 &value_object_as_number, /*tp_as_number*/
2335 0, /*tp_as_sequence*/
2336 &value_object_as_mapping, /*tp_as_mapping*/
2337 valpy_hash, /*tp_hash*/
2338 valpy_call, /*tp_call*/
2339 valpy_str, /*tp_str*/
2340 0, /*tp_getattro*/
2341 0, /*tp_setattro*/
2342 0, /*tp_as_buffer*/
2343 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
2344 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
2345 "GDB value object", /* tp_doc */
2346 0, /* tp_traverse */
2347 0, /* tp_clear */
2348 valpy_richcompare, /* tp_richcompare */
2349 0, /* tp_weaklistoffset */
2350 0, /* tp_iter */
2351 0, /* tp_iternext */
2352 value_object_methods, /* tp_methods */
2353 0, /* tp_members */
2354 value_object_getset, /* tp_getset */
2355 0, /* tp_base */
2356 0, /* tp_dict */
2357 0, /* tp_descr_get */
2358 0, /* tp_descr_set */
2359 0, /* tp_dictoffset */
2360 valpy_init, /* tp_init */
2361 0, /* tp_alloc */
2362 PyType_GenericNew, /* tp_new */
2363 };
2364