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