1 /* Python interface to values.
3 Copyright (C) 2008-2022 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
24 #include "target-float.h"
27 #include "expression.h"
31 #include "python-internal.h"
33 /* Even though Python scalar types directly map to host types, we use
34 target types here to remain consistent with the values system in
35 GDB (which uses target arithmetic). */
37 /* Python's integer type corresponds to C's long type. */
38 #define builtin_type_pyint \
39 builtin_type (gdbpy_enter::get_gdbarch ())->builtin_long
41 /* Python's float type corresponds to C's double type. */
42 #define builtin_type_pyfloat \
43 builtin_type (gdbpy_enter::get_gdbarch ())->builtin_double
45 /* Python's long type corresponds to C's long long type. */
46 #define builtin_type_pylong \
47 builtin_type (gdbpy_enter::get_gdbarch ())->builtin_long_long
49 /* Python's long type corresponds to C's long long type. Unsigned version. */
50 #define builtin_type_upylong builtin_type \
51 (gdbpy_enter::get_gdbarch ())->builtin_unsigned_long_long
53 #define builtin_type_pybool \
54 language_bool_type (current_language, gdbpy_enter::get_gdbarch ())
56 #define builtin_type_pychar \
57 language_string_char_type (current_language, gdbpy_enter::get_gdbarch ())
61 struct value_object *next;
62 struct value_object *prev;
66 PyObject *dynamic_type;
69 /* List of all values which are currently exposed to Python. It is
70 maintained so that when an objfile is discarded, preserve_values
71 can copy the values' types if needed. */
72 /* This variable is unnecessarily initialized to NULL in order to
73 work around a linker bug on MacOS. */
74 static value_object *values_in_python = NULL;
76 /* Clear out an old GDB value stored within SELF, and reset the fields to
77 nullptr. This should be called when a gdb.Value is deallocated, and
78 also if a gdb.Value is reinitialized with a new value. */
81 valpy_clear_value (value_object *self)
83 /* Indicate we are no longer interested in the value object. */
84 value_decref (self->value);
85 self->value = nullptr;
87 Py_CLEAR (self->address);
88 Py_CLEAR (self->type);
89 Py_CLEAR (self->dynamic_type);
92 /* Called by the Python interpreter when deallocating a value object. */
94 valpy_dealloc (PyObject *obj)
96 value_object *self = (value_object *) obj;
98 /* If SELF failed to initialize correctly then it may not have a value
99 contained within it. */
100 if (self->value != nullptr)
102 /* Remove SELF from the global list of values. */
103 if (self->prev != nullptr)
104 self->prev->next = self->next;
107 gdb_assert (values_in_python == self);
108 values_in_python = self->next;
110 if (self->next != nullptr)
111 self->next->prev = self->prev;
113 /* Release the value object and any cached Python objects. */
114 valpy_clear_value (self);
117 Py_TYPE (self)->tp_free (self);
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. */
124 note_value (value_object *value_obj)
126 if (value_obj->next == nullptr)
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;
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
141 static struct value *
142 convert_buffer_and_type_to_value (PyObject *obj, struct type *type)
144 Py_buffer_up buffer_up;
147 if (PyObject_CheckBuffer (obj)
148 && PyObject_GetBuffer (obj, &py_buf, PyBUF_SIMPLE) == 0)
150 /* Got a buffer, py_buf, out of obj. Cause it to be released
151 when it goes out of scope. */
152 buffer_up.reset (&py_buf);
156 PyErr_SetString (PyExc_TypeError,
157 _("Object must support the python buffer protocol."));
161 if (TYPE_LENGTH (type) > py_buf.len)
163 PyErr_SetString (PyExc_ValueError,
164 _("Size of type is larger than that of buffer object."));
168 return value_from_contents (type, (const gdb_byte *) py_buf.buf);
171 /* Implement gdb.Value.__init__. */
174 valpy_init (PyObject *self, PyObject *args, PyObject *kwds)
176 static const char *keywords[] = { "val", "type", NULL };
177 PyObject *val_obj = nullptr;
178 PyObject *type_obj = nullptr;
180 if (!gdb_PyArg_ParseTupleAndKeywords (args, kwds, "O|O", keywords,
181 &val_obj, &type_obj))
184 struct type *type = nullptr;
185 if (type_obj != nullptr && type_obj != Py_None)
187 type = type_object_to_type (type_obj);
190 PyErr_SetString (PyExc_TypeError,
191 _("type argument must be a gdb.Type."));
198 value = convert_value_from_python (val_obj);
200 value = convert_buffer_and_type_to_value (val_obj, type);
201 if (value == nullptr)
203 gdb_assert (PyErr_Occurred ());
207 /* There might be a previous value here. */
208 value_object *value_obj = (value_object *) self;
209 if (value_obj->value != nullptr)
210 valpy_clear_value (value_obj);
212 /* Store the value into this Python object. */
213 value_obj->value = release_value (value).release ();
215 /* Ensure that this gdb.Value is in the set of all gdb.Value objects. If
216 we are already in the set then this is call does nothing. */
217 note_value (value_obj);
222 /* Iterate over all the Value objects, calling preserve_one_value on
225 gdbpy_preserve_values (const struct extension_language_defn *extlang,
226 struct objfile *objfile, htab_t copied_types)
230 for (iter = values_in_python; iter; iter = iter->next)
231 preserve_one_value (iter->value, objfile, copied_types);
234 /* Given a value of a pointer type, apply the C unary * operator to it. */
236 valpy_dereference (PyObject *self, PyObject *args)
238 PyObject *result = NULL;
242 struct value *res_val;
243 scoped_value_mark free_values;
245 res_val = value_ind (((value_object *) self)->value);
246 result = value_to_value_object (res_val);
248 catch (const gdb_exception &except)
250 GDB_PY_HANDLE_EXCEPTION (except);
256 /* Given a value of a pointer type or a reference type, return the value
257 referenced. The difference between this function and valpy_dereference is
258 that the latter applies * unary operator to a value, which need not always
259 result in the value referenced. For example, for a value which is a reference
260 to an 'int' pointer ('int *'), valpy_dereference will result in a value of
261 type 'int' while valpy_referenced_value will result in a value of type
265 valpy_referenced_value (PyObject *self, PyObject *args)
267 PyObject *result = NULL;
271 struct value *self_val, *res_val;
272 scoped_value_mark free_values;
274 self_val = ((value_object *) self)->value;
275 switch (check_typedef (value_type (self_val))->code ())
278 res_val = value_ind (self_val);
281 case TYPE_CODE_RVALUE_REF:
282 res_val = coerce_ref (self_val);
285 error(_("Trying to get the referenced value from a value which is "
286 "neither a pointer nor a reference."));
289 result = value_to_value_object (res_val);
291 catch (const gdb_exception &except)
293 GDB_PY_HANDLE_EXCEPTION (except);
299 /* Return a value which is a reference to the value. */
302 valpy_reference_value (PyObject *self, PyObject *args, enum type_code refcode)
304 PyObject *result = NULL;
308 struct value *self_val;
309 scoped_value_mark free_values;
311 self_val = ((value_object *) self)->value;
312 result = value_to_value_object (value_ref (self_val, refcode));
314 catch (const gdb_exception &except)
316 GDB_PY_HANDLE_EXCEPTION (except);
323 valpy_lvalue_reference_value (PyObject *self, PyObject *args)
325 return valpy_reference_value (self, args, TYPE_CODE_REF);
329 valpy_rvalue_reference_value (PyObject *self, PyObject *args)
331 return valpy_reference_value (self, args, TYPE_CODE_RVALUE_REF);
334 /* Return a "const" qualified version of the value. */
337 valpy_const_value (PyObject *self, PyObject *args)
339 PyObject *result = NULL;
343 struct value *self_val, *res_val;
344 scoped_value_mark free_values;
346 self_val = ((value_object *) self)->value;
347 res_val = make_cv_value (1, 0, self_val);
348 result = value_to_value_object (res_val);
350 catch (const gdb_exception &except)
352 GDB_PY_HANDLE_EXCEPTION (except);
358 /* Return "&value". */
360 valpy_get_address (PyObject *self, void *closure)
362 value_object *val_obj = (value_object *) self;
364 if (!val_obj->address)
368 struct value *res_val;
369 scoped_value_mark free_values;
371 res_val = value_addr (val_obj->value);
372 val_obj->address = value_to_value_object (res_val);
374 catch (const gdb_exception &except)
376 val_obj->address = Py_None;
381 Py_XINCREF (val_obj->address);
383 return val_obj->address;
386 /* Return type of the value. */
388 valpy_get_type (PyObject *self, void *closure)
390 value_object *obj = (value_object *) self;
394 obj->type = type_to_type_object (value_type (obj->value));
398 Py_INCREF (obj->type);
402 /* Return dynamic type of the value. */
405 valpy_get_dynamic_type (PyObject *self, void *closure)
407 value_object *obj = (value_object *) self;
408 struct type *type = NULL;
410 if (obj->dynamic_type != NULL)
412 Py_INCREF (obj->dynamic_type);
413 return obj->dynamic_type;
418 struct value *val = obj->value;
419 scoped_value_mark free_values;
421 type = value_type (val);
422 type = check_typedef (type);
424 if (type->is_pointer_or_reference ()
425 && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT))
427 struct value *target;
428 int was_pointer = type->code () == TYPE_CODE_PTR;
431 target = value_ind (val);
433 target = coerce_ref (val);
434 type = value_rtti_type (target, NULL, NULL, NULL);
439 type = lookup_pointer_type (type);
441 type = lookup_lvalue_reference_type (type);
444 else if (type->code () == TYPE_CODE_STRUCT)
445 type = value_rtti_type (val, NULL, NULL, NULL);
448 /* Re-use object's static type. */
452 catch (const gdb_exception &except)
454 GDB_PY_HANDLE_EXCEPTION (except);
458 obj->dynamic_type = valpy_get_type (self, NULL);
460 obj->dynamic_type = type_to_type_object (type);
462 Py_XINCREF (obj->dynamic_type);
463 return obj->dynamic_type;
466 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
467 string. Return a PyObject representing a lazy_string_object type.
468 A lazy string is a pointer to a string with an optional encoding and
469 length. If ENCODING is not given, encoding is set to None. If an
470 ENCODING is provided the encoding parameter is set to ENCODING, but
471 the string is not encoded.
472 If LENGTH is provided then the length parameter is set to LENGTH.
473 Otherwise if the value is an array of known length then the array's length
474 is used. Otherwise the length will be set to -1 (meaning first null of
477 Note: In order to not break any existing uses this allows creating
478 lazy strings from anything. PR 20769. E.g.,
479 gdb.parse_and_eval("my_int_variable").lazy_string().
480 "It's easier to relax restrictions than it is to impose them after the
481 fact." So we should be flagging any unintended uses as errors, but it's
482 perhaps too late for that. */
485 valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
487 gdb_py_longest length = -1;
488 struct value *value = ((value_object *) self)->value;
489 const char *user_encoding = NULL;
490 static const char *keywords[] = { "encoding", "length", NULL };
491 PyObject *str_obj = NULL;
493 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG,
494 keywords, &user_encoding, &length))
499 PyErr_SetString (PyExc_ValueError, _("Invalid length."));
505 scoped_value_mark free_values;
506 struct type *type, *realtype;
509 type = value_type (value);
510 realtype = check_typedef (type);
512 switch (realtype->code ())
514 case TYPE_CODE_ARRAY:
516 LONGEST array_length = -1;
517 LONGEST low_bound, high_bound;
519 /* PR 20786: There's no way to specify an array of length zero.
520 Record a length of [0,-1] which is how Ada does it. Anything
521 we do is broken, but this one possible solution. */
522 if (get_array_bounds (realtype, &low_bound, &high_bound))
523 array_length = high_bound - low_bound + 1;
525 length = array_length;
526 else if (array_length == -1)
528 type = lookup_array_range_type (TYPE_TARGET_TYPE (realtype),
531 else if (length != array_length)
533 /* We need to create a new array type with the
535 if (length > array_length)
536 error (_("Length is larger than array size."));
537 type = lookup_array_range_type (TYPE_TARGET_TYPE (realtype),
539 low_bound + length - 1);
541 addr = value_address (value);
545 /* If a length is specified we defer creating an array of the
546 specified width until we need to. */
547 addr = value_as_address (value);
550 /* Should flag an error here. PR 20769. */
551 addr = value_address (value);
555 str_obj = gdbpy_create_lazy_string_object (addr, length, user_encoding,
558 catch (const gdb_exception &except)
560 GDB_PY_HANDLE_EXCEPTION (except);
566 /* Implementation of gdb.Value.string ([encoding] [, errors]
567 [, length]) -> string. Return Unicode string with value contents.
568 If ENCODING is not given, the string is assumed to be encoded in
569 the target's charset. If LENGTH is provided, only fetch string to
570 the length provided. */
573 valpy_string (PyObject *self, PyObject *args, PyObject *kw)
576 gdb::unique_xmalloc_ptr<gdb_byte> buffer;
577 struct value *value = ((value_object *) self)->value;
578 const char *encoding = NULL;
579 const char *errors = NULL;
580 const char *user_encoding = NULL;
581 const char *la_encoding = NULL;
582 struct type *char_type;
583 static const char *keywords[] = { "encoding", "errors", "length", NULL };
585 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords,
586 &user_encoding, &errors, &length))
591 c_get_string (value, &buffer, &length, &char_type, &la_encoding);
593 catch (const gdb_exception &except)
595 GDB_PY_HANDLE_EXCEPTION (except);
598 encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding;
599 return PyUnicode_Decode ((const char *) buffer.get (),
600 length * TYPE_LENGTH (char_type),
604 /* Given a Python object, copy its truth value to a C bool (the value
606 If src_obj is NULL, then *dest is not modified.
608 Return true in case of success (including src_obj being NULL), false
612 copy_py_bool_obj (bool *dest, PyObject *src_obj)
616 int cmp = PyObject_IsTrue (src_obj);
625 /* Implementation of gdb.Value.format_string (...) -> string.
626 Return Unicode string with value contents formatted using the
627 keyword-only arguments. */
630 valpy_format_string (PyObject *self, PyObject *args, PyObject *kw)
632 static const char *keywords[] =
634 /* Basic C/C++ options. */
635 "raw", /* See the /r option to print. */
636 "pretty_arrays", /* See set print array on|off. */
637 "pretty_structs", /* See set print pretty on|off. */
638 "array_indexes", /* See set print array-indexes on|off. */
639 "symbols", /* See set print symbol on|off. */
640 "unions", /* See set print union on|off. */
641 "address", /* See set print address on|off. */
642 "styling", /* Should we apply styling. */
644 "deref_refs", /* No corresponding setting. */
645 "actual_objects", /* See set print object on|off. */
646 "static_members", /* See set print static-members on|off. */
647 /* C non-bool options. */
648 "max_elements", /* See set print elements N. */
649 "max_depth", /* See set print max-depth N. */
650 "repeat_threshold", /* See set print repeats. */
651 "format", /* The format passed to the print command. */
655 /* This function has too many arguments to be useful as positionals, so
656 the user should specify them all as keyword arguments.
657 Python 3.3 and later have a way to specify it (both in C and Python
658 itself), but we could be compiled with older versions, so we just
659 check that the args tuple is empty. */
660 Py_ssize_t positional_count = PyObject_Length (args);
661 if (positional_count < 0)
663 else if (positional_count > 0)
665 /* This matches the error message that Python 3.3 raises when
666 passing positionals to functions expecting keyword-only
668 PyErr_Format (PyExc_TypeError,
669 "format_string() takes 0 positional arguments but %zu were given",
674 struct value_print_options opts;
675 get_user_print_options (&opts);
678 /* We need objects for booleans as the "p" flag for bools is new in
680 PyObject *raw_obj = NULL;
681 PyObject *pretty_arrays_obj = NULL;
682 PyObject *pretty_structs_obj = NULL;
683 PyObject *array_indexes_obj = NULL;
684 PyObject *symbols_obj = NULL;
685 PyObject *unions_obj = NULL;
686 PyObject *address_obj = NULL;
687 PyObject *styling_obj = Py_False;
688 PyObject *deref_refs_obj = NULL;
689 PyObject *actual_objects_obj = NULL;
690 PyObject *static_members_obj = NULL;
692 if (!gdb_PyArg_ParseTupleAndKeywords (args,
694 "|O!O!O!O!O!O!O!O!O!O!O!IIIs",
696 &PyBool_Type, &raw_obj,
697 &PyBool_Type, &pretty_arrays_obj,
698 &PyBool_Type, &pretty_structs_obj,
699 &PyBool_Type, &array_indexes_obj,
700 &PyBool_Type, &symbols_obj,
701 &PyBool_Type, &unions_obj,
702 &PyBool_Type, &address_obj,
703 &PyBool_Type, &styling_obj,
704 &PyBool_Type, &deref_refs_obj,
705 &PyBool_Type, &actual_objects_obj,
706 &PyBool_Type, &static_members_obj,
709 &opts.repeat_count_threshold,
713 /* Set boolean arguments. */
714 if (!copy_py_bool_obj (&opts.raw, raw_obj))
716 if (!copy_py_bool_obj (&opts.prettyformat_arrays, pretty_arrays_obj))
718 if (!copy_py_bool_obj (&opts.prettyformat_structs, pretty_structs_obj))
720 if (!copy_py_bool_obj (&opts.print_array_indexes, array_indexes_obj))
722 if (!copy_py_bool_obj (&opts.symbol_print, symbols_obj))
724 if (!copy_py_bool_obj (&opts.unionprint, unions_obj))
726 if (!copy_py_bool_obj (&opts.addressprint, address_obj))
728 if (!copy_py_bool_obj (&opts.deref_ref, deref_refs_obj))
730 if (!copy_py_bool_obj (&opts.objectprint, actual_objects_obj))
732 if (!copy_py_bool_obj (&opts.static_field_print, static_members_obj))
735 /* Numeric arguments for which 0 means unlimited (which we represent as
736 UINT_MAX). Note that the max-depth numeric argument uses -1 as
737 unlimited, and 0 is a valid choice. */
738 if (opts.print_max == 0)
739 opts.print_max = UINT_MAX;
740 if (opts.repeat_count_threshold == 0)
741 opts.repeat_count_threshold = UINT_MAX;
743 /* Other arguments. */
746 if (strlen (format) == 1)
747 opts.format = format[0];
750 /* Mimic the message on standard Python ones for similar
752 PyErr_SetString (PyExc_ValueError,
753 "a single character is required");
758 string_file stb (PyObject_IsTrue (styling_obj));
762 common_val_print (((value_object *) self)->value, &stb, 0,
763 &opts, current_language);
765 catch (const gdb_exception &except)
767 GDB_PY_HANDLE_EXCEPTION (except);
770 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
773 /* A helper function that implements the various cast operators. */
776 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
778 PyObject *type_obj, *result = NULL;
781 if (! PyArg_ParseTuple (args, "O", &type_obj))
784 type = type_object_to_type (type_obj);
787 PyErr_SetString (PyExc_RuntimeError,
788 _("Argument must be a type."));
794 struct value *val = ((value_object *) self)->value;
795 struct value *res_val;
796 scoped_value_mark free_values;
798 if (op == UNOP_DYNAMIC_CAST)
799 res_val = value_dynamic_cast (type, val);
800 else if (op == UNOP_REINTERPRET_CAST)
801 res_val = value_reinterpret_cast (type, val);
804 gdb_assert (op == UNOP_CAST);
805 res_val = value_cast (type, val);
808 result = value_to_value_object (res_val);
810 catch (const gdb_exception &except)
812 GDB_PY_HANDLE_EXCEPTION (except);
818 /* Implementation of the "cast" method. */
821 valpy_cast (PyObject *self, PyObject *args)
823 return valpy_do_cast (self, args, UNOP_CAST);
826 /* Implementation of the "dynamic_cast" method. */
829 valpy_dynamic_cast (PyObject *self, PyObject *args)
831 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
834 /* Implementation of the "reinterpret_cast" method. */
837 valpy_reinterpret_cast (PyObject *self, PyObject *args)
839 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
843 valpy_length (PyObject *self)
845 /* We don't support getting the number of elements in a struct / class. */
846 PyErr_SetString (PyExc_NotImplementedError,
847 _("Invalid operation on gdb.Value."));
851 /* Return 1 if the gdb.Field object FIELD is present in the value V.
852 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
855 value_has_field (struct value *v, PyObject *field)
857 struct type *parent_type, *val_type;
858 enum type_code type_code;
859 gdbpy_ref<> type_object (PyObject_GetAttrString (field, "parent_type"));
862 if (type_object == NULL)
865 parent_type = type_object_to_type (type_object.get ());
866 if (parent_type == NULL)
868 PyErr_SetString (PyExc_TypeError,
869 _("'parent_type' attribute of gdb.Field object is not a"
870 "gdb.Type object."));
876 val_type = value_type (v);
877 val_type = check_typedef (val_type);
878 if (val_type->is_pointer_or_reference ())
879 val_type = check_typedef (TYPE_TARGET_TYPE (val_type));
881 type_code = val_type->code ();
882 if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION)
883 && types_equal (val_type, parent_type))
888 catch (const gdb_exception &except)
890 GDB_PY_SET_HANDLE_EXCEPTION (except);
896 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
897 Returns 1 if the flag value is true, 0 if it is false, and -1 if
898 a Python error occurs. */
901 get_field_flag (PyObject *field, const char *flag_name)
903 gdbpy_ref<> flag_object (PyObject_GetAttrString (field, flag_name));
905 if (flag_object == NULL)
908 return PyObject_IsTrue (flag_object.get ());
911 /* Return the "type" attribute of a gdb.Field object.
912 Returns NULL on error, with a Python exception set. */
915 get_field_type (PyObject *field)
917 gdbpy_ref<> ftype_obj (PyObject_GetAttrString (field, "type"));
920 if (ftype_obj == NULL)
922 ftype = type_object_to_type (ftype_obj.get ());
924 PyErr_SetString (PyExc_TypeError,
925 _("'type' attribute of gdb.Field object is not a "
926 "gdb.Type object."));
931 /* Given string name or a gdb.Field object corresponding to an element inside
932 a structure, return its value object. Returns NULL on error, with a python
936 valpy_getitem (PyObject *self, PyObject *key)
938 struct gdb_exception except;
939 value_object *self_value = (value_object *) self;
940 gdb::unique_xmalloc_ptr<char> field;
941 struct type *base_class_type = NULL, *field_type = NULL;
943 PyObject *result = NULL;
945 if (gdbpy_is_string (key))
947 field = python_string_to_host_string (key);
951 else if (gdbpy_is_field (key))
953 int is_base_class, valid_field;
955 valid_field = value_has_field (self_value->value, key);
958 else if (valid_field == 0)
960 PyErr_SetString (PyExc_TypeError,
961 _("Invalid lookup for a field not contained in "
967 is_base_class = get_field_flag (key, "is_base_class");
968 if (is_base_class < 0)
970 else if (is_base_class > 0)
972 base_class_type = get_field_type (key);
973 if (base_class_type == NULL)
978 gdbpy_ref<> name_obj (PyObject_GetAttrString (key, "name"));
980 if (name_obj == NULL)
983 if (name_obj != Py_None)
985 field = python_string_to_host_string (name_obj.get ());
991 if (!PyObject_HasAttrString (key, "bitpos"))
993 PyErr_SetString (PyExc_AttributeError,
994 _("gdb.Field object has no name and no "
995 "'bitpos' attribute."));
999 gdbpy_ref<> bitpos_obj (PyObject_GetAttrString (key, "bitpos"));
1000 if (bitpos_obj == NULL)
1002 if (!gdb_py_int_as_long (bitpos_obj.get (), &bitpos))
1005 field_type = get_field_type (key);
1006 if (field_type == NULL)
1014 struct value *tmp = self_value->value;
1015 struct value *res_val = NULL;
1016 scoped_value_mark free_values;
1019 res_val = value_struct_elt (&tmp, {}, field.get (), NULL,
1020 "struct/class/union");
1021 else if (bitpos >= 0)
1022 res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type,
1023 "struct/class/union");
1024 else if (base_class_type != NULL)
1026 struct type *val_type;
1028 val_type = check_typedef (value_type (tmp));
1029 if (val_type->code () == TYPE_CODE_PTR)
1030 res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
1031 else if (val_type->code () == TYPE_CODE_REF)
1032 res_val = value_cast (lookup_lvalue_reference_type (base_class_type),
1034 else if (val_type->code () == TYPE_CODE_RVALUE_REF)
1035 res_val = value_cast (lookup_rvalue_reference_type (base_class_type),
1038 res_val = value_cast (base_class_type, tmp);
1042 /* Assume we are attempting an array access, and let the
1043 value code throw an exception if the index has an invalid
1045 struct value *idx = convert_value_from_python (key);
1049 /* Check the value's type is something that can be accessed via
1053 tmp = coerce_ref (tmp);
1054 type = check_typedef (value_type (tmp));
1055 if (type->code () != TYPE_CODE_ARRAY
1056 && type->code () != TYPE_CODE_PTR)
1057 error (_("Cannot subscript requested type."));
1059 res_val = value_subscript (tmp, value_as_long (idx));
1064 result = value_to_value_object (res_val);
1066 catch (gdb_exception &ex)
1068 except = std::move (ex);
1071 GDB_PY_HANDLE_EXCEPTION (except);
1077 valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
1079 PyErr_Format (PyExc_NotImplementedError,
1080 _("Setting of struct elements is not currently supported."));
1084 /* Called by the Python interpreter to perform an inferior function
1085 call on the value. Returns NULL on error, with a python exception set. */
1087 valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
1089 Py_ssize_t args_count;
1090 struct value *function = ((value_object *) self)->value;
1091 struct value **vargs = NULL;
1092 struct type *ftype = NULL;
1093 PyObject *result = NULL;
1097 ftype = check_typedef (value_type (function));
1099 catch (const gdb_exception &except)
1101 GDB_PY_HANDLE_EXCEPTION (except);
1104 if (ftype->code () != TYPE_CODE_FUNC)
1106 PyErr_SetString (PyExc_RuntimeError,
1107 _("Value is not callable (not TYPE_CODE_FUNC)."));
1111 if (! PyTuple_Check (args))
1113 PyErr_SetString (PyExc_TypeError,
1114 _("Inferior arguments must be provided in a tuple."));
1118 args_count = PyTuple_Size (args);
1123 vargs = XALLOCAVEC (struct value *, args_count);
1124 for (i = 0; i < args_count; i++)
1126 PyObject *item = PyTuple_GetItem (args, i);
1131 vargs[i] = convert_value_from_python (item);
1132 if (vargs[i] == NULL)
1139 scoped_value_mark free_values;
1142 = call_function_by_hand (function, NULL,
1143 gdb::make_array_view (vargs, args_count));
1144 result = value_to_value_object (return_value);
1146 catch (const gdb_exception &except)
1148 GDB_PY_HANDLE_EXCEPTION (except);
1154 /* Called by the Python interpreter to obtain string representation
1157 valpy_str (PyObject *self)
1159 struct value_print_options opts;
1161 get_user_print_options (&opts);
1168 common_val_print (((value_object *) self)->value, &stb, 0,
1169 &opts, current_language);
1171 catch (const gdb_exception &except)
1173 GDB_PY_HANDLE_EXCEPTION (except);
1176 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
1179 /* Implements gdb.Value.is_optimized_out. */
1181 valpy_get_is_optimized_out (PyObject *self, void *closure)
1183 struct value *value = ((value_object *) self)->value;
1188 opt = value_optimized_out (value);
1190 catch (const gdb_exception &except)
1192 GDB_PY_HANDLE_EXCEPTION (except);
1201 /* Implements gdb.Value.is_lazy. */
1203 valpy_get_is_lazy (PyObject *self, void *closure)
1205 struct value *value = ((value_object *) self)->value;
1210 opt = value_lazy (value);
1212 catch (const gdb_exception &except)
1214 GDB_PY_HANDLE_EXCEPTION (except);
1223 /* Implements gdb.Value.fetch_lazy (). */
1225 valpy_fetch_lazy (PyObject *self, PyObject *args)
1227 struct value *value = ((value_object *) self)->value;
1231 if (value_lazy (value))
1232 value_fetch_lazy (value);
1234 catch (const gdb_exception &except)
1236 GDB_PY_HANDLE_EXCEPTION (except);
1242 /* Calculate and return the address of the PyObject as the value of
1243 the builtin __hash__ call. */
1245 valpy_hash (PyObject *self)
1247 return (intptr_t) self;
1265 /* If TYPE is a reference, return the target; otherwise return TYPE. */
1266 #define STRIP_REFERENCE(TYPE) \
1267 (TYPE_IS_REFERENCE (TYPE) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
1269 /* Helper for valpy_binop. Returns a value object which is the result
1270 of applying the operation specified by OPCODE to the given
1271 arguments. Throws a GDB exception on error. */
1274 valpy_binop_throw (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1276 PyObject *result = NULL;
1278 struct value *arg1, *arg2;
1279 struct value *res_val = NULL;
1280 enum exp_opcode op = OP_NULL;
1283 scoped_value_mark free_values;
1285 /* If the gdb.Value object is the second operand, then it will be
1286 passed to us as the OTHER argument, and SELF will be an entirely
1287 different kind of object, altogether. Because of this, we can't
1288 assume self is a gdb.Value object and need to convert it from
1290 arg1 = convert_value_from_python (self);
1294 arg2 = convert_value_from_python (other);
1302 struct type *ltype = value_type (arg1);
1303 struct type *rtype = value_type (arg2);
1305 ltype = check_typedef (ltype);
1306 ltype = STRIP_REFERENCE (ltype);
1307 rtype = check_typedef (rtype);
1308 rtype = STRIP_REFERENCE (rtype);
1311 if (ltype->code () == TYPE_CODE_PTR
1312 && is_integral_type (rtype))
1313 res_val = value_ptradd (arg1, value_as_long (arg2));
1314 else if (rtype->code () == TYPE_CODE_PTR
1315 && is_integral_type (ltype))
1316 res_val = value_ptradd (arg2, value_as_long (arg1));
1326 struct type *ltype = value_type (arg1);
1327 struct type *rtype = value_type (arg2);
1329 ltype = check_typedef (ltype);
1330 ltype = STRIP_REFERENCE (ltype);
1331 rtype = check_typedef (rtype);
1332 rtype = STRIP_REFERENCE (rtype);
1335 if (ltype->code () == TYPE_CODE_PTR
1336 && rtype->code () == TYPE_CODE_PTR)
1337 /* A ptrdiff_t for the target would be preferable here. */
1338 res_val = value_from_longest (builtin_type_pyint,
1339 value_ptrdiff (arg1, arg2));
1340 else if (ltype->code () == TYPE_CODE_PTR
1341 && is_integral_type (rtype))
1342 res_val = value_ptradd (arg1, - value_as_long (arg2));
1369 op = BINOP_BITWISE_AND;
1372 op = BINOP_BITWISE_IOR;
1375 op = BINOP_BITWISE_XOR;
1381 if (binop_user_defined_p (op, arg1, arg2))
1382 res_val = value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
1384 res_val = value_binop (arg1, arg2, op);
1388 result = value_to_value_object (res_val);
1393 /* Returns a value object which is the result of applying the operation
1394 specified by OPCODE to the given arguments. Returns NULL on error, with
1395 a python exception set. */
1397 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1399 PyObject *result = NULL;
1403 result = valpy_binop_throw (opcode, self, other);
1405 catch (const gdb_exception &except)
1407 GDB_PY_HANDLE_EXCEPTION (except);
1414 valpy_add (PyObject *self, PyObject *other)
1416 return valpy_binop (VALPY_ADD, self, other);
1420 valpy_subtract (PyObject *self, PyObject *other)
1422 return valpy_binop (VALPY_SUB, self, other);
1426 valpy_multiply (PyObject *self, PyObject *other)
1428 return valpy_binop (VALPY_MUL, self, other);
1432 valpy_divide (PyObject *self, PyObject *other)
1434 return valpy_binop (VALPY_DIV, self, other);
1438 valpy_remainder (PyObject *self, PyObject *other)
1440 return valpy_binop (VALPY_REM, self, other);
1444 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
1446 /* We don't support the ternary form of pow. I don't know how to express
1447 that, so let's just throw NotImplementedError to at least do something
1449 if (unused != Py_None)
1451 PyErr_SetString (PyExc_NotImplementedError,
1452 "Invalid operation on gdb.Value.");
1456 return valpy_binop (VALPY_POW, self, other);
1460 valpy_negative (PyObject *self)
1462 PyObject *result = NULL;
1466 /* Perhaps overkill, but consistency has some virtue. */
1467 scoped_value_mark free_values;
1470 val = value_neg (((value_object *) self)->value);
1471 result = value_to_value_object (val);
1473 catch (const gdb_exception &except)
1475 GDB_PY_HANDLE_EXCEPTION (except);
1482 valpy_positive (PyObject *self)
1484 return value_to_value_object (((value_object *) self)->value);
1488 valpy_absolute (PyObject *self)
1490 struct value *value = ((value_object *) self)->value;
1495 scoped_value_mark free_values;
1497 if (value_less (value, value_zero (value_type (value), not_lval)))
1500 catch (const gdb_exception &except)
1502 GDB_PY_HANDLE_EXCEPTION (except);
1506 return valpy_positive (self);
1508 return valpy_negative (self);
1511 /* Implements boolean evaluation of gdb.Value. */
1513 valpy_nonzero (PyObject *self)
1515 struct gdb_exception except;
1516 value_object *self_value = (value_object *) self;
1518 int nonzero = 0; /* Appease GCC warning. */
1522 type = check_typedef (value_type (self_value->value));
1524 if (is_integral_type (type) || type->code () == TYPE_CODE_PTR)
1525 nonzero = !!value_as_long (self_value->value);
1526 else if (is_floating_value (self_value->value))
1527 nonzero = !target_float_is_zero
1528 (value_contents (self_value->value).data (), type);
1530 /* All other values are True. */
1533 catch (gdb_exception &ex)
1535 except = std::move (ex);
1538 /* This is not documented in the Python documentation, but if this
1539 function fails, return -1 as slot_nb_nonzero does (the default
1540 Python nonzero function). */
1541 GDB_PY_SET_HANDLE_EXCEPTION (except);
1546 /* Implements ~ for value objects. */
1548 valpy_invert (PyObject *self)
1550 struct value *val = NULL;
1554 val = value_complement (((value_object *) self)->value);
1556 catch (const gdb_exception &except)
1558 GDB_PY_HANDLE_EXCEPTION (except);
1561 return value_to_value_object (val);
1564 /* Implements left shift for value objects. */
1566 valpy_lsh (PyObject *self, PyObject *other)
1568 return valpy_binop (VALPY_LSH, self, other);
1571 /* Implements right shift for value objects. */
1573 valpy_rsh (PyObject *self, PyObject *other)
1575 return valpy_binop (VALPY_RSH, self, other);
1578 /* Implements bitwise and for value objects. */
1580 valpy_and (PyObject *self, PyObject *other)
1582 return valpy_binop (VALPY_BITAND, self, other);
1585 /* Implements bitwise or for value objects. */
1587 valpy_or (PyObject *self, PyObject *other)
1589 return valpy_binop (VALPY_BITOR, self, other);
1592 /* Implements bitwise xor for value objects. */
1594 valpy_xor (PyObject *self, PyObject *other)
1596 return valpy_binop (VALPY_BITXOR, self, other);
1599 /* Helper for valpy_richcompare. Implements comparison operations for
1600 value objects. Returns true/false on success. Returns -1 with a
1601 Python exception set if a Python error is detected. Throws a GDB
1602 exception on other errors (memory error, etc.). */
1605 valpy_richcompare_throw (PyObject *self, PyObject *other, int op)
1608 struct value *value_other;
1609 struct value *value_self;
1611 scoped_value_mark free_values;
1613 value_other = convert_value_from_python (other);
1614 if (value_other == NULL)
1617 value_self = ((value_object *) self)->value;
1622 result = value_less (value_self, value_other);
1625 result = value_less (value_self, value_other)
1626 || value_equal (value_self, value_other);
1629 result = value_equal (value_self, value_other);
1632 result = !value_equal (value_self, value_other);
1635 result = value_less (value_other, value_self);
1638 result = (value_less (value_other, value_self)
1639 || value_equal (value_self, value_other));
1643 PyErr_SetString (PyExc_NotImplementedError,
1644 _("Invalid operation on gdb.Value."));
1653 /* Implements comparison operations for value objects. Returns NULL on error,
1654 with a python exception set. */
1656 valpy_richcompare (PyObject *self, PyObject *other, int op)
1660 if (other == Py_None)
1661 /* Comparing with None is special. From what I can tell, in Python
1662 None is smaller than anything else. */
1674 PyErr_SetString (PyExc_NotImplementedError,
1675 _("Invalid operation on gdb.Value."));
1681 result = valpy_richcompare_throw (self, other, op);
1683 catch (const gdb_exception &except)
1685 GDB_PY_HANDLE_EXCEPTION (except);
1688 /* In this case, the Python exception has already been set. */
1699 /* Implements conversion to int. */
1701 valpy_int (PyObject *self)
1703 struct value *value = ((value_object *) self)->value;
1704 struct type *type = value_type (value);
1709 if (is_floating_value (value))
1711 type = builtin_type_pylong;
1712 value = value_cast (type, value);
1715 if (!is_integral_type (type)
1716 && type->code () != TYPE_CODE_PTR)
1717 error (_("Cannot convert value to int."));
1719 l = value_as_long (value);
1721 catch (const gdb_exception &except)
1723 GDB_PY_HANDLE_EXCEPTION (except);
1726 if (type->is_unsigned ())
1727 return gdb_py_object_from_ulongest (l).release ();
1729 return gdb_py_object_from_longest (l).release ();
1733 /* Implements conversion to long. */
1735 valpy_long (PyObject *self)
1737 struct value *value = ((value_object *) self)->value;
1738 struct type *type = value_type (value);
1743 if (is_floating_value (value))
1745 type = builtin_type_pylong;
1746 value = value_cast (type, value);
1749 type = check_typedef (type);
1751 if (!is_integral_type (type)
1752 && type->code () != TYPE_CODE_PTR)
1753 error (_("Cannot convert value to long."));
1755 l = value_as_long (value);
1757 catch (const gdb_exception &except)
1759 GDB_PY_HANDLE_EXCEPTION (except);
1762 if (type->is_unsigned ())
1763 return gdb_py_object_from_ulongest (l).release ();
1765 return gdb_py_object_from_longest (l).release ();
1768 /* Implements conversion to float. */
1770 valpy_float (PyObject *self)
1772 struct value *value = ((value_object *) self)->value;
1773 struct type *type = value_type (value);
1778 type = check_typedef (type);
1780 if (type->code () == TYPE_CODE_FLT && is_floating_value (value))
1781 d = target_float_to_host_double (value_contents (value).data (), type);
1782 else if (type->code () == TYPE_CODE_INT)
1784 /* Note that valpy_long accepts TYPE_CODE_PTR and some
1785 others here here -- but casting a pointer or bool to a
1786 float seems wrong. */
1787 d = value_as_long (value);
1790 error (_("Cannot convert value to float."));
1792 catch (const gdb_exception &except)
1794 GDB_PY_HANDLE_EXCEPTION (except);
1797 return PyFloat_FromDouble (d);
1800 /* Returns an object for a value which is released from the all_values chain,
1801 so its lifetime is not bound to the execution of a command. */
1803 value_to_value_object (struct value *val)
1805 value_object *val_obj;
1807 val_obj = PyObject_New (value_object, &value_object_type);
1808 if (val_obj != NULL)
1810 val_obj->value = release_value (val).release ();
1811 val_obj->next = nullptr;
1812 val_obj->prev = nullptr;
1813 val_obj->address = NULL;
1814 val_obj->type = NULL;
1815 val_obj->dynamic_type = NULL;
1816 note_value (val_obj);
1819 return (PyObject *) val_obj;
1822 /* Returns an object for a value, but without releasing it from the
1823 all_values chain. */
1825 value_to_value_object_no_release (struct value *val)
1827 value_object *val_obj;
1829 val_obj = PyObject_New (value_object, &value_object_type);
1830 if (val_obj != NULL)
1833 val_obj->value = val;
1834 val_obj->next = nullptr;
1835 val_obj->prev = nullptr;
1836 val_obj->address = NULL;
1837 val_obj->type = NULL;
1838 val_obj->dynamic_type = NULL;
1839 note_value (val_obj);
1842 return (PyObject *) val_obj;
1845 /* Returns a borrowed reference to the struct value corresponding to
1846 the given value object. */
1848 value_object_to_value (PyObject *self)
1852 if (! PyObject_TypeCheck (self, &value_object_type))
1854 real = (value_object *) self;
1858 /* Try to convert a Python value to a gdb value. If the value cannot
1859 be converted, set a Python exception and return NULL. Returns a
1860 reference to a new value on the all_values chain. */
1863 convert_value_from_python (PyObject *obj)
1865 struct value *value = NULL; /* -Wall */
1868 gdb_assert (obj != NULL);
1872 if (PyBool_Check (obj))
1874 cmp = PyObject_IsTrue (obj);
1876 value = value_from_longest (builtin_type_pybool, cmp);
1878 /* Make a long logic check first. In Python 3.x, internally,
1879 all integers are represented as longs. In Python 2.x, there
1880 is still a differentiation internally between a PyInt and a
1881 PyLong. Explicitly do this long check conversion first. In
1882 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1883 to be done first to ensure we do not lose information in the
1884 conversion process. */
1885 else if (PyLong_Check (obj))
1887 LONGEST l = PyLong_AsLongLong (obj);
1889 if (PyErr_Occurred ())
1891 /* If the error was an overflow, we can try converting to
1892 ULONGEST instead. */
1893 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1895 gdbpy_err_fetch fetched_error;
1896 gdbpy_ref<> zero = gdb_py_object_from_longest (0);
1898 /* Check whether obj is positive. */
1899 if (PyObject_RichCompareBool (obj, zero.get (), Py_GT) > 0)
1903 ul = PyLong_AsUnsignedLongLong (obj);
1904 if (! PyErr_Occurred ())
1905 value = value_from_ulongest (builtin_type_upylong, ul);
1909 /* There's nothing we can do. */
1910 fetched_error.restore ();
1915 value = value_from_longest (builtin_type_pylong, l);
1917 #if PY_MAJOR_VERSION == 2
1918 else if (PyInt_Check (obj))
1920 long l = PyInt_AsLong (obj);
1922 if (! PyErr_Occurred ())
1923 value = value_from_longest (builtin_type_pyint, l);
1926 else if (PyFloat_Check (obj))
1928 double d = PyFloat_AsDouble (obj);
1930 if (! PyErr_Occurred ())
1931 value = value_from_host_double (builtin_type_pyfloat, d);
1933 else if (gdbpy_is_string (obj))
1935 gdb::unique_xmalloc_ptr<char> s
1936 = python_string_to_target_string (obj);
1938 value = value_cstring (s.get (), strlen (s.get ()),
1939 builtin_type_pychar);
1941 else if (PyObject_TypeCheck (obj, &value_object_type))
1942 value = value_copy (((value_object *) obj)->value);
1943 else if (gdbpy_is_lazy_string (obj))
1947 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
1948 value = value_copy (((value_object *) result)->value);
1952 PyErr_Format (PyExc_TypeError,
1953 _("Could not convert Python object: %S."), obj);
1955 PyErr_Format (PyExc_TypeError,
1956 _("Could not convert Python object: %s."),
1957 PyString_AsString (PyObject_Str (obj)));
1960 catch (const gdb_exception &except)
1962 gdbpy_convert_exception (except);
1969 /* Returns value object in the ARGth position in GDB's history. */
1971 gdbpy_history (PyObject *self, PyObject *args)
1974 struct value *res_val = NULL; /* Initialize to appease gcc warning. */
1976 if (!PyArg_ParseTuple (args, "i", &i))
1981 res_val = access_value_history (i);
1983 catch (const gdb_exception &except)
1985 GDB_PY_HANDLE_EXCEPTION (except);
1988 return value_to_value_object (res_val);
1991 /* Add a gdb.Value into GDB's history, and return (as an integer) the
1992 position of the newly added value. */
1994 gdbpy_add_history (PyObject *self, PyObject *args)
1996 PyObject *value_obj;
1998 if (!PyArg_ParseTuple (args, "O", &value_obj))
2001 struct value *value = convert_value_from_python (value_obj);
2002 if (value == nullptr)
2007 int idx = record_latest_value (value);
2008 return gdb_py_object_from_longest (idx).release ();
2010 catch (const gdb_exception &except)
2012 GDB_PY_HANDLE_EXCEPTION (except);
2018 /* Return an integer, the number of items in GDB's history. */
2021 gdbpy_history_count (PyObject *self, PyObject *args)
2023 return gdb_py_object_from_ulongest (value_history_count ()).release ();
2026 /* Return the value of a convenience variable. */
2028 gdbpy_convenience_variable (PyObject *self, PyObject *args)
2030 const char *varname;
2031 struct value *res_val = NULL;
2033 if (!PyArg_ParseTuple (args, "s", &varname))
2038 struct internalvar *var = lookup_only_internalvar (varname);
2042 res_val = value_of_internalvar (gdbpy_enter::get_gdbarch (), var);
2043 if (value_type (res_val)->code () == TYPE_CODE_VOID)
2047 catch (const gdb_exception &except)
2049 GDB_PY_HANDLE_EXCEPTION (except);
2052 if (res_val == NULL)
2055 return value_to_value_object (res_val);
2058 /* Set the value of a convenience variable. */
2060 gdbpy_set_convenience_variable (PyObject *self, PyObject *args)
2062 const char *varname;
2063 PyObject *value_obj;
2064 struct value *value = NULL;
2066 if (!PyArg_ParseTuple (args, "sO", &varname, &value_obj))
2069 /* None means to clear the variable. */
2070 if (value_obj != Py_None)
2072 value = convert_value_from_python (value_obj);
2081 struct internalvar *var = lookup_only_internalvar (varname);
2084 clear_internalvar (var);
2088 struct internalvar *var = lookup_internalvar (varname);
2090 set_internalvar (var, value);
2093 catch (const gdb_exception &except)
2095 GDB_PY_HANDLE_EXCEPTION (except);
2101 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
2104 gdbpy_is_value_object (PyObject *obj)
2106 return PyObject_TypeCheck (obj, &value_object_type);
2110 gdbpy_initialize_values (void)
2112 if (PyType_Ready (&value_object_type) < 0)
2115 return gdb_pymodule_addobject (gdb_module, "Value",
2116 (PyObject *) &value_object_type);
2121 static gdb_PyGetSetDef value_object_getset[] = {
2122 { "address", valpy_get_address, NULL, "The address of the value.",
2124 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
2125 "Boolean telling whether the value is optimized "
2126 "out (i.e., not available).",
2128 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
2129 { "dynamic_type", valpy_get_dynamic_type, NULL,
2130 "Dynamic type of the value.", NULL },
2131 { "is_lazy", valpy_get_is_lazy, NULL,
2132 "Boolean telling whether the value is lazy (not fetched yet\n\
2133 from the inferior). A lazy value is fetched when needed, or when\n\
2134 the \"fetch_lazy()\" method is called.", NULL },
2135 {NULL} /* Sentinel */
2138 static PyMethodDef value_object_methods[] = {
2139 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
2140 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
2141 "dynamic_cast (gdb.Type) -> gdb.Value\n\
2142 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
2144 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
2145 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
2146 Cast the value to the supplied type, as if by the C++\n\
2147 reinterpret_cast operator."
2149 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
2150 { "referenced_value", valpy_referenced_value, METH_NOARGS,
2151 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
2152 { "reference_value", valpy_lvalue_reference_value, METH_NOARGS,
2153 "Return a value of type TYPE_CODE_REF referencing this value." },
2154 { "rvalue_reference_value", valpy_rvalue_reference_value, METH_NOARGS,
2155 "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
2156 { "const_value", valpy_const_value, METH_NOARGS,
2157 "Return a 'const' qualied version of the same value." },
2158 { "lazy_string", (PyCFunction) valpy_lazy_string,
2159 METH_VARARGS | METH_KEYWORDS,
2160 "lazy_string ([encoding] [, length]) -> lazy_string\n\
2161 Return a lazy string representation of the value." },
2162 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
2163 "string ([encoding] [, errors] [, length]) -> string\n\
2164 Return Unicode string representation of the value." },
2165 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
2166 "Fetches the value from the inferior, if it was lazy." },
2167 { "format_string", (PyCFunction) valpy_format_string,
2168 METH_VARARGS | METH_KEYWORDS,
2169 "format_string (...) -> string\n\
2170 Return a string representation of the value using the specified\n\
2171 formatting options" },
2172 {NULL} /* Sentinel */
2175 static PyNumberMethods value_object_as_number = {
2183 NULL, /* nb_divmod */
2184 valpy_power, /* nb_power */
2185 valpy_negative, /* nb_negative */
2186 valpy_positive, /* nb_positive */
2187 valpy_absolute, /* nb_absolute */
2188 valpy_nonzero, /* nb_nonzero */
2189 valpy_invert, /* nb_invert */
2190 valpy_lsh, /* nb_lshift */
2191 valpy_rsh, /* nb_rshift */
2192 valpy_and, /* nb_and */
2193 valpy_xor, /* nb_xor */
2194 valpy_or, /* nb_or */
2196 valpy_long, /* nb_int */
2197 NULL, /* reserved */
2199 NULL, /* nb_coerce */
2200 valpy_int, /* nb_int */
2201 valpy_long, /* nb_long */
2203 valpy_float, /* nb_float */
2208 NULL, /* nb_inplace_add */
2209 NULL, /* nb_inplace_subtract */
2210 NULL, /* nb_inplace_multiply */
2212 NULL, /* nb_inplace_divide */
2214 NULL, /* nb_inplace_remainder */
2215 NULL, /* nb_inplace_power */
2216 NULL, /* nb_inplace_lshift */
2217 NULL, /* nb_inplace_rshift */
2218 NULL, /* nb_inplace_and */
2219 NULL, /* nb_inplace_xor */
2220 NULL, /* nb_inplace_or */
2221 NULL, /* nb_floor_divide */
2222 valpy_divide, /* nb_true_divide */
2223 NULL, /* nb_inplace_floor_divide */
2224 NULL, /* nb_inplace_true_divide */
2225 valpy_long, /* nb_index */
2228 static PyMappingMethods value_object_as_mapping = {
2234 PyTypeObject value_object_type = {
2235 PyVarObject_HEAD_INIT (NULL, 0)
2236 "gdb.Value", /*tp_name*/
2237 sizeof (value_object), /*tp_basicsize*/
2239 valpy_dealloc, /*tp_dealloc*/
2245 &value_object_as_number, /*tp_as_number*/
2246 0, /*tp_as_sequence*/
2247 &value_object_as_mapping, /*tp_as_mapping*/
2248 valpy_hash, /*tp_hash*/
2249 valpy_call, /*tp_call*/
2250 valpy_str, /*tp_str*/
2254 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
2255 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
2256 "GDB value object", /* tp_doc */
2257 0, /* tp_traverse */
2259 valpy_richcompare, /* tp_richcompare */
2260 0, /* tp_weaklistoffset */
2262 0, /* tp_iternext */
2263 value_object_methods, /* tp_methods */
2265 value_object_getset, /* tp_getset */
2268 0, /* tp_descr_get */
2269 0, /* tp_descr_set */
2270 0, /* tp_dictoffset */
2271 valpy_init, /* tp_init */
2273 PyType_GenericNew, /* tp_new */