1 /* Python interface to values.
3 Copyright (C) 2008-2024 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"
32 #include "python-internal.h"
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). */
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
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
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
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
54 #define builtin_type_pybool \
55 language_bool_type (current_language, gdbpy_enter::get_gdbarch ())
59 struct value_object
*next
;
60 struct value_object
*prev
;
64 PyObject
*dynamic_type
;
65 PyObject
*content_bytes
;
68 /* List of all values which are currently exposed to Python. It is
69 maintained so that when an objfile is discarded, preserve_values
70 can copy the values' types if needed. */
71 /* This variable is unnecessarily initialized to NULL in order to
72 work around a linker bug on MacOS. */
73 static value_object
*values_in_python
= NULL
;
75 /* Clear out an old GDB value stored within SELF, and reset the fields to
76 nullptr. This should be called when a gdb.Value is deallocated, and
77 also if a gdb.Value is reinitialized with a new value. */
80 valpy_clear_value (value_object
*self
)
82 /* Indicate we are no longer interested in the value object. */
83 self
->value
->decref ();
84 self
->value
= nullptr;
86 Py_CLEAR (self
->address
);
87 Py_CLEAR (self
->type
);
88 Py_CLEAR (self
->dynamic_type
);
89 Py_CLEAR (self
->content_bytes
);
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
139 nullptr. When REQUIRE_EXACT_SIZE_P is true the buffer OBJ must be the
140 exact length of TYPE. When REQUIRE_EXACT_SIZE_P is false then the
141 buffer OBJ can be longer than TYPE, in which case only the least
142 significant bytes from the buffer are used. */
144 static struct value
*
145 convert_buffer_and_type_to_value (PyObject
*obj
, struct type
*type
,
146 bool require_exact_size_p
)
148 Py_buffer_up buffer_up
;
151 if (PyObject_CheckBuffer (obj
)
152 && PyObject_GetBuffer (obj
, &py_buf
, PyBUF_SIMPLE
) == 0)
154 /* Got a buffer, py_buf, out of obj. Cause it to be released
155 when it goes out of scope. */
156 buffer_up
.reset (&py_buf
);
160 PyErr_SetString (PyExc_TypeError
,
161 _("Object must support the python buffer protocol."));
165 if (require_exact_size_p
&& type
->length () != py_buf
.len
)
167 PyErr_SetString (PyExc_ValueError
,
168 _("Size of type is not equal to that of buffer object."));
171 else if (!require_exact_size_p
&& type
->length () > py_buf
.len
)
173 PyErr_SetString (PyExc_ValueError
,
174 _("Size of type is larger than that of buffer object."));
178 return value_from_contents (type
, (const gdb_byte
*) py_buf
.buf
);
181 /* Implement gdb.Value.__init__. */
184 valpy_init (PyObject
*self
, PyObject
*args
, PyObject
*kwds
)
186 static const char *keywords
[] = { "val", "type", NULL
};
187 PyObject
*val_obj
= nullptr;
188 PyObject
*type_obj
= nullptr;
190 if (!gdb_PyArg_ParseTupleAndKeywords (args
, kwds
, "O|O", keywords
,
191 &val_obj
, &type_obj
))
194 struct type
*type
= nullptr;
195 if (type_obj
!= nullptr && type_obj
!= Py_None
)
197 type
= type_object_to_type (type_obj
);
200 PyErr_SetString (PyExc_TypeError
,
201 _("type argument must be a gdb.Type."));
208 value
= convert_value_from_python (val_obj
);
210 value
= convert_buffer_and_type_to_value (val_obj
, type
, false);
211 if (value
== nullptr)
213 gdb_assert (PyErr_Occurred ());
217 /* There might be a previous value here. */
218 value_object
*value_obj
= (value_object
*) self
;
219 if (value_obj
->value
!= nullptr)
220 valpy_clear_value (value_obj
);
222 /* Store the value into this Python object. */
223 value_obj
->value
= release_value (value
).release ();
225 /* Ensure that this gdb.Value is in the set of all gdb.Value objects. If
226 we are already in the set then this is call does nothing. */
227 note_value (value_obj
);
232 /* Iterate over all the Value objects, calling preserve_one_value on
235 gdbpy_preserve_values (const struct extension_language_defn
*extlang
,
236 struct objfile
*objfile
,
237 copied_types_hash_t
&copied_types
)
241 for (iter
= values_in_python
; iter
; iter
= iter
->next
)
242 iter
->value
->preserve (objfile
, copied_types
);
245 /* Given a value of a pointer type, apply the C unary * operator to it. */
247 valpy_dereference (PyObject
*self
, PyObject
*args
)
249 PyObject
*result
= NULL
;
253 struct value
*res_val
;
254 scoped_value_mark free_values
;
256 res_val
= value_ind (((value_object
*) self
)->value
);
257 result
= value_to_value_object (res_val
);
259 catch (const gdb_exception
&except
)
261 return gdbpy_handle_gdb_exception (nullptr, except
);
267 /* Given a value of a pointer type or a reference type, return the value
268 referenced. The difference between this function and valpy_dereference is
269 that the latter applies * unary operator to a value, which need not always
270 result in the value referenced. For example, for a value which is a reference
271 to an 'int' pointer ('int *'), valpy_dereference will result in a value of
272 type 'int' while valpy_referenced_value will result in a value of type
276 valpy_referenced_value (PyObject
*self
, PyObject
*args
)
278 PyObject
*result
= NULL
;
282 struct value
*self_val
, *res_val
;
283 scoped_value_mark free_values
;
285 self_val
= ((value_object
*) self
)->value
;
286 switch (check_typedef (self_val
->type ())->code ())
289 res_val
= value_ind (self_val
);
292 case TYPE_CODE_RVALUE_REF
:
293 res_val
= coerce_ref (self_val
);
296 error(_("Trying to get the referenced value from a value which is "
297 "neither a pointer nor a reference."));
300 result
= value_to_value_object (res_val
);
302 catch (const gdb_exception
&except
)
304 return gdbpy_handle_gdb_exception (nullptr, except
);
310 /* Return a value which is a reference to the value. */
313 valpy_reference_value (PyObject
*self
, PyObject
*args
, enum type_code refcode
)
315 PyObject
*result
= NULL
;
319 struct value
*self_val
;
320 scoped_value_mark free_values
;
322 self_val
= ((value_object
*) self
)->value
;
323 result
= value_to_value_object (value_ref (self_val
, refcode
));
325 catch (const gdb_exception
&except
)
327 return gdbpy_handle_gdb_exception (nullptr, except
);
334 valpy_lvalue_reference_value (PyObject
*self
, PyObject
*args
)
336 return valpy_reference_value (self
, args
, TYPE_CODE_REF
);
340 valpy_rvalue_reference_value (PyObject
*self
, PyObject
*args
)
342 return valpy_reference_value (self
, args
, TYPE_CODE_RVALUE_REF
);
345 /* Implement Value.to_array. */
348 valpy_to_array (PyObject
*self
, PyObject
*args
)
350 PyObject
*result
= nullptr;
354 struct value
*val
= ((value_object
*) self
)->value
;
355 struct type
*type
= check_typedef (val
->type ());
357 if (type
->code () == TYPE_CODE_ARRAY
)
364 val
= value_to_array (val
);
366 PyErr_SetString (PyExc_TypeError
, _("Value is not array-like."));
368 result
= value_to_value_object (val
);
371 catch (const gdb_exception
&except
)
373 return gdbpy_handle_gdb_exception (nullptr, except
);
379 /* Return a "const" qualified version of the value. */
382 valpy_const_value (PyObject
*self
, PyObject
*args
)
384 PyObject
*result
= NULL
;
388 struct value
*self_val
, *res_val
;
389 scoped_value_mark free_values
;
391 self_val
= ((value_object
*) self
)->value
;
392 res_val
= make_cv_value (1, 0, self_val
);
393 result
= value_to_value_object (res_val
);
395 catch (const gdb_exception
&except
)
397 return gdbpy_handle_gdb_exception (nullptr, except
);
403 /* Return "&value". */
405 valpy_get_address (PyObject
*self
, void *closure
)
407 value_object
*val_obj
= (value_object
*) self
;
409 if (!val_obj
->address
)
413 struct value
*res_val
;
414 scoped_value_mark free_values
;
416 res_val
= value_addr (val_obj
->value
);
417 val_obj
->address
= value_to_value_object (res_val
);
419 catch (const gdb_exception_forced_quit
&except
)
421 quit_force (NULL
, 0);
423 catch (const gdb_exception
&except
)
425 val_obj
->address
= Py_None
;
430 Py_XINCREF (val_obj
->address
);
432 return val_obj
->address
;
435 /* Return type of the value. */
437 valpy_get_type (PyObject
*self
, void *closure
)
439 value_object
*obj
= (value_object
*) self
;
443 obj
->type
= type_to_type_object (obj
->value
->type ());
447 Py_INCREF (obj
->type
);
451 /* Return dynamic type of the value. */
454 valpy_get_dynamic_type (PyObject
*self
, void *closure
)
456 value_object
*obj
= (value_object
*) self
;
457 struct type
*type
= NULL
;
459 if (obj
->dynamic_type
!= NULL
)
461 Py_INCREF (obj
->dynamic_type
);
462 return obj
->dynamic_type
;
467 struct value
*val
= obj
->value
;
468 scoped_value_mark free_values
;
471 type
= check_typedef (type
);
473 if (type
->is_pointer_or_reference ()
474 && (type
->target_type ()->code () == TYPE_CODE_STRUCT
))
476 struct value
*target
;
477 int was_pointer
= type
->code () == TYPE_CODE_PTR
;
480 target
= value_ind (val
);
482 target
= coerce_ref (val
);
483 type
= value_rtti_type (target
, NULL
, NULL
, NULL
);
488 type
= lookup_pointer_type (type
);
490 type
= lookup_lvalue_reference_type (type
);
493 else if (type
->code () == TYPE_CODE_STRUCT
)
494 type
= value_rtti_type (val
, NULL
, NULL
, NULL
);
497 /* Re-use object's static type. */
501 catch (const gdb_exception
&except
)
503 return gdbpy_handle_gdb_exception (nullptr, except
);
507 obj
->dynamic_type
= valpy_get_type (self
, NULL
);
509 obj
->dynamic_type
= type_to_type_object (type
);
511 Py_XINCREF (obj
->dynamic_type
);
512 return obj
->dynamic_type
;
515 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
516 string. Return a PyObject representing a lazy_string_object type.
517 A lazy string is a pointer to a string with an optional encoding and
518 length. If ENCODING is not given, encoding is set to None. If an
519 ENCODING is provided the encoding parameter is set to ENCODING, but
520 the string is not encoded.
521 If LENGTH is provided then the length parameter is set to LENGTH.
522 Otherwise if the value is an array of known length then the array's length
523 is used. Otherwise the length will be set to -1 (meaning first null of
524 appropriate with). */
527 valpy_lazy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
529 gdb_py_longest length
= -1;
530 struct value
*value
= ((value_object
*) self
)->value
;
531 const char *user_encoding
= NULL
;
532 static const char *keywords
[] = { "encoding", "length", NULL
};
533 PyObject
*str_obj
= NULL
;
535 if (!gdb_PyArg_ParseTupleAndKeywords (args
, kw
, "|s" GDB_PY_LL_ARG
,
536 keywords
, &user_encoding
, &length
))
541 PyErr_SetString (PyExc_ValueError
, _("Invalid length."));
547 scoped_value_mark free_values
;
548 struct type
*type
, *realtype
;
551 type
= value
->type ();
552 realtype
= check_typedef (type
);
554 switch (realtype
->code ())
556 case TYPE_CODE_ARRAY
:
558 LONGEST array_length
= -1;
559 LONGEST low_bound
, high_bound
;
561 /* PR 20786: There's no way to specify an array of length zero.
562 Record a length of [0,-1] which is how Ada does it. Anything
563 we do is broken, but this one possible solution. */
564 if (get_array_bounds (realtype
, &low_bound
, &high_bound
))
565 array_length
= high_bound
- low_bound
+ 1;
567 length
= array_length
;
568 else if (array_length
== -1)
570 type
= lookup_array_range_type (realtype
->target_type (),
573 else if (length
!= array_length
)
575 /* We need to create a new array type with the
577 if (length
> array_length
)
578 error (_("Length is larger than array size."));
579 type
= lookup_array_range_type (realtype
->target_type (),
581 low_bound
+ length
- 1);
583 addr
= value
->address ();
587 /* If a length is specified we defer creating an array of the
588 specified width until we need to. */
589 addr
= value_as_address (value
);
592 error (_("Cannot make lazy string from this object"));
595 str_obj
= gdbpy_create_lazy_string_object (addr
, length
, user_encoding
,
598 catch (const gdb_exception
&except
)
600 return gdbpy_handle_gdb_exception (nullptr, except
);
606 /* Implementation of gdb.Value.string ([encoding] [, errors]
607 [, length]) -> string. Return Unicode string with value contents.
608 If ENCODING is not given, the string is assumed to be encoded in
609 the target's charset. If LENGTH is provided, only fetch string to
610 the length provided. */
613 valpy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
616 gdb::unique_xmalloc_ptr
<gdb_byte
> buffer
;
617 struct value
*value
= ((value_object
*) self
)->value
;
618 const char *encoding
= NULL
;
619 const char *errors
= NULL
;
620 const char *user_encoding
= NULL
;
621 const char *la_encoding
= NULL
;
622 struct type
*char_type
;
623 static const char *keywords
[] = { "encoding", "errors", "length", NULL
};
625 if (!gdb_PyArg_ParseTupleAndKeywords (args
, kw
, "|ssi", keywords
,
626 &user_encoding
, &errors
, &length
))
631 c_get_string (value
, &buffer
, &length
, &char_type
, &la_encoding
);
633 catch (const gdb_exception
&except
)
635 return gdbpy_handle_gdb_exception (nullptr, except
);
638 encoding
= (user_encoding
&& *user_encoding
) ? user_encoding
: la_encoding
;
639 return PyUnicode_Decode ((const char *) buffer
.get (),
640 length
* char_type
->length (),
644 /* Given a Python object, copy its truth value to a C bool (the value
646 If src_obj is NULL, then *dest is not modified.
648 Return true in case of success (including src_obj being NULL), false
652 copy_py_bool_obj (bool *dest
, PyObject
*src_obj
)
656 int cmp
= PyObject_IsTrue (src_obj
);
665 /* Implementation of gdb.Value.format_string (...) -> string.
666 Return Unicode string with value contents formatted using the
667 keyword-only arguments. */
670 valpy_format_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
672 static const char *keywords
[] =
674 /* Basic C/C++ options. */
675 "raw", /* See the /r option to print. */
676 "pretty_arrays", /* See set print array on|off. */
677 "pretty_structs", /* See set print pretty on|off. */
678 "array_indexes", /* See set print array-indexes on|off. */
679 "symbols", /* See set print symbol on|off. */
680 "unions", /* See set print union on|off. */
681 "address", /* See set print address on|off. */
682 "styling", /* Should we apply styling. */
683 "nibbles", /* See set print nibbles on|off. */
684 "summary", /* Summary mode for non-scalars. */
686 "deref_refs", /* No corresponding setting. */
687 "actual_objects", /* See set print object on|off. */
688 "static_members", /* See set print static-members on|off. */
689 /* C non-bool options. */
690 "max_characters", /* See set print characters N. */
691 "max_elements", /* See set print elements N. */
692 "max_depth", /* See set print max-depth N. */
693 "repeat_threshold", /* See set print repeats. */
694 "format", /* The format passed to the print command. */
698 /* This function has too many arguments to be useful as positionals, so
699 the user should specify them all as keyword arguments.
700 Python 3.3 and later have a way to specify it (both in C and Python
701 itself), but we could be compiled with older versions, so we just
702 check that the args tuple is empty. */
703 Py_ssize_t positional_count
= PyObject_Length (args
);
704 if (positional_count
< 0)
706 else if (positional_count
> 0)
708 /* This matches the error message that Python 3.3 raises when
709 passing positionals to functions expecting keyword-only
711 PyErr_Format (PyExc_TypeError
,
712 "format_string() takes 0 positional arguments but %zu were given",
717 struct value_print_options opts
;
718 gdbpy_get_print_options (&opts
);
719 opts
.deref_ref
= false;
721 /* We need objects for booleans as the "p" flag for bools is new in
723 PyObject
*raw_obj
= NULL
;
724 PyObject
*pretty_arrays_obj
= NULL
;
725 PyObject
*pretty_structs_obj
= NULL
;
726 PyObject
*array_indexes_obj
= NULL
;
727 PyObject
*symbols_obj
= NULL
;
728 PyObject
*unions_obj
= NULL
;
729 PyObject
*address_obj
= NULL
;
730 PyObject
*styling_obj
= Py_False
;
731 PyObject
*nibbles_obj
= NULL
;
732 PyObject
*deref_refs_obj
= NULL
;
733 PyObject
*actual_objects_obj
= NULL
;
734 PyObject
*static_members_obj
= NULL
;
735 PyObject
*summary_obj
= NULL
;
737 if (!gdb_PyArg_ParseTupleAndKeywords (args
,
739 "|O!O!O!O!O!O!O!O!O!O!O!O!O!IIIIs",
741 &PyBool_Type
, &raw_obj
,
742 &PyBool_Type
, &pretty_arrays_obj
,
743 &PyBool_Type
, &pretty_structs_obj
,
744 &PyBool_Type
, &array_indexes_obj
,
745 &PyBool_Type
, &symbols_obj
,
746 &PyBool_Type
, &unions_obj
,
747 &PyBool_Type
, &address_obj
,
748 &PyBool_Type
, &styling_obj
,
749 &PyBool_Type
, &nibbles_obj
,
750 &PyBool_Type
, &summary_obj
,
751 &PyBool_Type
, &deref_refs_obj
,
752 &PyBool_Type
, &actual_objects_obj
,
753 &PyBool_Type
, &static_members_obj
,
754 &opts
.print_max_chars
,
757 &opts
.repeat_count_threshold
,
761 /* Set boolean arguments. */
762 if (!copy_py_bool_obj (&opts
.raw
, raw_obj
))
764 if (!copy_py_bool_obj (&opts
.prettyformat_arrays
, pretty_arrays_obj
))
766 if (!copy_py_bool_obj (&opts
.prettyformat_structs
, pretty_structs_obj
))
768 if (!copy_py_bool_obj (&opts
.print_array_indexes
, array_indexes_obj
))
770 if (!copy_py_bool_obj (&opts
.symbol_print
, symbols_obj
))
772 if (!copy_py_bool_obj (&opts
.unionprint
, unions_obj
))
774 if (!copy_py_bool_obj (&opts
.addressprint
, address_obj
))
776 if (!copy_py_bool_obj (&opts
.nibblesprint
, nibbles_obj
))
778 if (!copy_py_bool_obj (&opts
.deref_ref
, deref_refs_obj
))
780 if (!copy_py_bool_obj (&opts
.objectprint
, actual_objects_obj
))
782 if (!copy_py_bool_obj (&opts
.static_field_print
, static_members_obj
))
784 if (!copy_py_bool_obj (&opts
.summary
, summary_obj
))
787 /* Numeric arguments for which 0 means unlimited (which we represent as
788 UINT_MAX). Note that the max-depth numeric argument uses -1 as
789 unlimited, and 0 is a valid choice. */
790 if (opts
.print_max
== 0)
791 opts
.print_max
= UINT_MAX
;
792 if (opts
.repeat_count_threshold
== 0)
793 opts
.repeat_count_threshold
= UINT_MAX
;
795 /* Other arguments. */
798 if (strlen (format
) == 1)
799 opts
.format
= format
[0];
802 /* Mimic the message on standard Python ones for similar
804 PyErr_SetString (PyExc_ValueError
,
805 "a single character is required");
810 /* We force styling_obj to be a 'bool' when we parse the args above. */
811 gdb_assert (PyBool_Check (styling_obj
));
812 string_file
stb (styling_obj
== Py_True
);
816 common_val_print (((value_object
*) self
)->value
, &stb
, 0,
817 &opts
, current_language
);
819 catch (const gdb_exception
&except
)
821 return gdbpy_handle_gdb_exception (nullptr, except
);
824 return PyUnicode_Decode (stb
.c_str (), stb
.size (), host_charset (), NULL
);
827 /* A helper function that implements the various cast operators. */
830 valpy_do_cast (PyObject
*self
, PyObject
*args
, enum exp_opcode op
)
832 PyObject
*type_obj
, *result
= NULL
;
835 if (! PyArg_ParseTuple (args
, "O", &type_obj
))
838 type
= type_object_to_type (type_obj
);
841 PyErr_SetString (PyExc_RuntimeError
,
842 _("Argument must be a type."));
848 struct value
*val
= ((value_object
*) self
)->value
;
849 struct value
*res_val
;
850 scoped_value_mark free_values
;
852 if (op
== UNOP_DYNAMIC_CAST
)
853 res_val
= value_dynamic_cast (type
, val
);
854 else if (op
== UNOP_REINTERPRET_CAST
)
855 res_val
= value_reinterpret_cast (type
, val
);
858 gdb_assert (op
== UNOP_CAST
);
859 res_val
= value_cast (type
, val
);
862 result
= value_to_value_object (res_val
);
864 catch (const gdb_exception
&except
)
866 return gdbpy_handle_gdb_exception (nullptr, except
);
872 /* Implementation of the "cast" method. */
875 valpy_cast (PyObject
*self
, PyObject
*args
)
877 return valpy_do_cast (self
, args
, UNOP_CAST
);
880 /* Implementation of the "dynamic_cast" method. */
883 valpy_dynamic_cast (PyObject
*self
, PyObject
*args
)
885 return valpy_do_cast (self
, args
, UNOP_DYNAMIC_CAST
);
888 /* Implementation of the "reinterpret_cast" method. */
891 valpy_reinterpret_cast (PyObject
*self
, PyObject
*args
)
893 return valpy_do_cast (self
, args
, UNOP_REINTERPRET_CAST
);
896 /* Assign NEW_VALUE into SELF, handles 'struct value' reference counting,
897 and also clearing the bytes data cached within SELF. Return true if
898 the assignment was successful, otherwise return false, in which case a
899 Python exception will be set. */
902 valpy_assign_core (value_object
*self
, struct value
*new_value
)
906 new_value
= value_assign (self
->value
, new_value
);
908 /* value_as_address returns a new value with the same location
909 as the old one. Ensure that this gdb.Value is updated to
910 reflect the new value. */
911 new_value
->incref ();
912 self
->value
->decref ();
913 Py_CLEAR (self
->content_bytes
);
914 self
->value
= new_value
;
916 catch (const gdb_exception
&except
)
918 return gdbpy_handle_gdb_exception (false, except
);
924 /* Implementation of the "assign" method. */
927 valpy_assign (PyObject
*self_obj
, PyObject
*args
)
931 if (! PyArg_ParseTuple (args
, "O", &val_obj
))
934 struct value
*val
= convert_value_from_python (val_obj
);
938 value_object
*self
= (value_object
*) self_obj
;
939 if (!valpy_assign_core (self
, val
))
946 valpy_length (PyObject
*self
)
948 /* We don't support getting the number of elements in a struct / class. */
949 PyErr_SetString (PyExc_NotImplementedError
,
950 _("Invalid operation on gdb.Value."));
954 /* Return 1 if the gdb.Field object FIELD is present in the value V.
955 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
958 value_has_field (struct value
*v
, PyObject
*field
)
960 struct type
*parent_type
, *val_type
;
961 enum type_code type_code
;
962 gdbpy_ref
<> type_object (PyObject_GetAttrString (field
, "parent_type"));
965 if (type_object
== NULL
)
968 parent_type
= type_object_to_type (type_object
.get ());
969 if (parent_type
== NULL
)
971 PyErr_SetString (PyExc_TypeError
,
972 _("'parent_type' attribute of gdb.Field object is not a"
973 "gdb.Type object."));
979 val_type
= v
->type ();
980 val_type
= check_typedef (val_type
);
981 if (val_type
->is_pointer_or_reference ())
982 val_type
= check_typedef (val_type
->target_type ());
984 type_code
= val_type
->code ();
985 if ((type_code
== TYPE_CODE_STRUCT
|| type_code
== TYPE_CODE_UNION
)
986 && types_equal (val_type
, parent_type
))
991 catch (const gdb_exception
&except
)
993 return gdbpy_handle_gdb_exception (-1, except
);
999 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
1000 Returns 1 if the flag value is true, 0 if it is false, and -1 if
1001 a Python error occurs. */
1004 get_field_flag (PyObject
*field
, const char *flag_name
)
1006 gdbpy_ref
<> flag_object (PyObject_GetAttrString (field
, flag_name
));
1008 if (flag_object
== NULL
)
1011 return PyObject_IsTrue (flag_object
.get ());
1014 /* Return the "type" attribute of a gdb.Field object.
1015 Returns NULL on error, with a Python exception set. */
1017 static struct type
*
1018 get_field_type (PyObject
*field
)
1020 gdbpy_ref
<> ftype_obj (PyObject_GetAttrString (field
, "type"));
1023 if (ftype_obj
== NULL
)
1025 ftype
= type_object_to_type (ftype_obj
.get ());
1027 PyErr_SetString (PyExc_TypeError
,
1028 _("'type' attribute of gdb.Field object is not a "
1029 "gdb.Type object."));
1034 /* Given string name or a gdb.Field object corresponding to an element inside
1035 a structure, return its value object. Returns NULL on error, with a python
1039 valpy_getitem (PyObject
*self
, PyObject
*key
)
1041 value_object
*self_value
= (value_object
*) self
;
1042 gdb::unique_xmalloc_ptr
<char> field
;
1043 struct type
*base_class_type
= NULL
, *field_type
= NULL
;
1045 PyObject
*result
= NULL
;
1047 if (gdbpy_is_string (key
))
1049 field
= python_string_to_host_string (key
);
1053 else if (gdbpy_is_field (key
))
1055 int is_base_class
, valid_field
;
1057 valid_field
= value_has_field (self_value
->value
, key
);
1058 if (valid_field
< 0)
1060 else if (valid_field
== 0)
1062 PyErr_SetString (PyExc_TypeError
,
1063 _("Invalid lookup for a field not contained in "
1069 is_base_class
= get_field_flag (key
, "is_base_class");
1070 if (is_base_class
< 0)
1072 else if (is_base_class
> 0)
1074 base_class_type
= get_field_type (key
);
1075 if (base_class_type
== NULL
)
1080 gdbpy_ref
<> name_obj (PyObject_GetAttrString (key
, "name"));
1082 if (name_obj
== NULL
)
1085 if (name_obj
!= Py_None
)
1087 field
= python_string_to_host_string (name_obj
.get ());
1093 if (!PyObject_HasAttrString (key
, "bitpos"))
1095 PyErr_SetString (PyExc_AttributeError
,
1096 _("gdb.Field object has no name and no "
1097 "'bitpos' attribute."));
1101 gdbpy_ref
<> bitpos_obj (PyObject_GetAttrString (key
, "bitpos"));
1102 if (bitpos_obj
== NULL
)
1104 if (!gdb_py_int_as_long (bitpos_obj
.get (), &bitpos
))
1107 field_type
= get_field_type (key
);
1108 if (field_type
== NULL
)
1116 struct value
*tmp
= self_value
->value
;
1117 struct value
*res_val
= NULL
;
1118 scoped_value_mark free_values
;
1121 res_val
= value_struct_elt (&tmp
, {}, field
.get (), NULL
,
1122 "struct/class/union");
1123 else if (bitpos
>= 0)
1124 res_val
= value_struct_elt_bitpos (&tmp
, bitpos
, field_type
,
1125 "struct/class/union");
1126 else if (base_class_type
!= NULL
)
1128 struct type
*val_type
;
1130 val_type
= check_typedef (tmp
->type ());
1131 if (val_type
->code () == TYPE_CODE_PTR
)
1132 res_val
= value_cast (lookup_pointer_type (base_class_type
), tmp
);
1133 else if (val_type
->code () == TYPE_CODE_REF
)
1134 res_val
= value_cast (lookup_lvalue_reference_type (base_class_type
),
1136 else if (val_type
->code () == TYPE_CODE_RVALUE_REF
)
1137 res_val
= value_cast (lookup_rvalue_reference_type (base_class_type
),
1140 res_val
= value_cast (base_class_type
, tmp
);
1144 /* Assume we are attempting an array access, and let the
1145 value code throw an exception if the index has an invalid
1147 struct value
*idx
= convert_value_from_python (key
);
1150 && binop_user_defined_p (BINOP_SUBSCRIPT
, tmp
, idx
))
1151 res_val
= value_x_binop (tmp
, idx
, BINOP_SUBSCRIPT
,
1152 OP_NULL
, EVAL_NORMAL
);
1153 else if (idx
!= NULL
)
1155 /* Check the value's type is something that can be accessed via
1159 tmp
= coerce_ref (tmp
);
1160 type
= check_typedef (tmp
->type ());
1161 if (type
->code () != TYPE_CODE_ARRAY
1162 && type
->code () != TYPE_CODE_PTR
)
1163 error (_("Cannot subscript requested type."));
1164 else if (ADA_TYPE_P (type
))
1165 res_val
= ada_value_subscript (tmp
, 1, &idx
);
1167 res_val
= value_subscript (tmp
, value_as_long (idx
));
1172 result
= value_to_value_object (res_val
);
1174 catch (const gdb_exception
&ex
)
1176 return gdbpy_handle_gdb_exception (nullptr, ex
);
1183 valpy_setitem (PyObject
*self
, PyObject
*key
, PyObject
*value
)
1185 PyErr_Format (PyExc_NotImplementedError
,
1186 _("Setting of struct elements is not currently supported."));
1190 /* Called by the Python interpreter to perform an inferior function
1191 call on the value. Returns NULL on error, with a python exception set. */
1193 valpy_call (PyObject
*self
, PyObject
*args
, PyObject
*keywords
)
1195 Py_ssize_t args_count
;
1196 struct value
*function
= ((value_object
*) self
)->value
;
1197 struct value
**vargs
= NULL
;
1198 struct type
*ftype
= NULL
;
1199 PyObject
*result
= NULL
;
1203 ftype
= check_typedef (function
->type ());
1205 catch (const gdb_exception
&except
)
1207 return gdbpy_handle_gdb_exception (nullptr, except
);
1210 if (ftype
->code () != TYPE_CODE_FUNC
&& ftype
->code () != TYPE_CODE_METHOD
1211 && ftype
->code () != TYPE_CODE_INTERNAL_FUNCTION
)
1213 PyErr_SetString (PyExc_RuntimeError
,
1214 _("Value is not callable (not TYPE_CODE_FUNC"
1215 " or TYPE_CODE_METHOD"
1216 " or TYPE_CODE_INTERNAL_FUNCTION)."));
1220 if (! PyTuple_Check (args
))
1222 PyErr_SetString (PyExc_TypeError
,
1223 _("Inferior arguments must be provided in a tuple."));
1227 args_count
= PyTuple_Size (args
);
1232 vargs
= XALLOCAVEC (struct value
*, args_count
);
1233 for (i
= 0; i
< args_count
; i
++)
1235 PyObject
*item
= PyTuple_GetItem (args
, i
);
1240 vargs
[i
] = convert_value_from_python (item
);
1241 if (vargs
[i
] == NULL
)
1248 scoped_value_mark free_values
;
1250 value
*return_value
;
1251 if (ftype
->code () == TYPE_CODE_INTERNAL_FUNCTION
)
1252 return_value
= call_internal_function (gdbpy_enter::get_gdbarch (),
1254 function
, args_count
, vargs
,
1258 = call_function_by_hand (function
, NULL
,
1259 gdb::make_array_view (vargs
, args_count
));
1260 result
= value_to_value_object (return_value
);
1262 catch (const gdb_exception
&except
)
1264 return gdbpy_handle_gdb_exception (nullptr, except
);
1270 /* Called by the Python interpreter to obtain string representation
1273 valpy_str (PyObject
*self
)
1275 struct value_print_options opts
;
1277 gdbpy_get_print_options (&opts
);
1278 opts
.deref_ref
= false;
1284 common_val_print (((value_object
*) self
)->value
, &stb
, 0,
1285 &opts
, current_language
);
1287 catch (const gdb_exception
&except
)
1289 return gdbpy_handle_gdb_exception (nullptr, except
);
1292 return PyUnicode_Decode (stb
.c_str (), stb
.size (), host_charset (), NULL
);
1295 /* Implements gdb.Value.is_optimized_out. */
1297 valpy_get_is_optimized_out (PyObject
*self
, void *closure
)
1299 struct value
*value
= ((value_object
*) self
)->value
;
1304 opt
= value
->optimized_out ();
1306 catch (const gdb_exception
&except
)
1308 return gdbpy_handle_gdb_exception (nullptr, except
);
1317 /* Implements gdb.Value.is_lazy. */
1319 valpy_get_is_lazy (PyObject
*self
, void *closure
)
1321 struct value
*value
= ((value_object
*) self
)->value
;
1326 opt
= value
->lazy ();
1328 catch (const gdb_exception
&except
)
1330 return gdbpy_handle_gdb_exception (nullptr, except
);
1339 /* Get gdb.Value.bytes attribute. */
1342 valpy_get_bytes (PyObject
*self
, void *closure
)
1344 value_object
*value_obj
= (value_object
*) self
;
1345 struct value
*value
= value_obj
->value
;
1347 if (value_obj
->content_bytes
!= nullptr)
1349 Py_INCREF (value_obj
->content_bytes
);
1350 return value_obj
->content_bytes
;
1353 gdb::array_view
<const gdb_byte
> contents
;
1356 contents
= value
->contents ();
1358 catch (const gdb_exception
&except
)
1360 return gdbpy_handle_gdb_exception (nullptr, except
);
1363 value_obj
->content_bytes
1364 = PyBytes_FromStringAndSize ((const char *) contents
.data (),
1366 Py_XINCREF (value_obj
->content_bytes
);
1367 return value_obj
->content_bytes
;
1370 /* Set gdb.Value.bytes attribute. */
1373 valpy_set_bytes (PyObject
*self_obj
, PyObject
*new_value_obj
, void *closure
)
1375 value_object
*self
= (value_object
*) self_obj
;
1377 /* Create a new value from the buffer NEW_VALUE_OBJ. We pass true here
1378 to indicate that NEW_VALUE_OBJ must match exactly the type length. */
1379 struct value
*new_value
1380 = convert_buffer_and_type_to_value (new_value_obj
, self
->value
->type (),
1382 if (new_value
== nullptr)
1385 if (!valpy_assign_core (self
, new_value
))
1391 /* Implements gdb.Value.fetch_lazy (). */
1393 valpy_fetch_lazy (PyObject
*self
, PyObject
*args
)
1395 struct value
*value
= ((value_object
*) self
)->value
;
1400 value
->fetch_lazy ();
1402 catch (const gdb_exception
&except
)
1404 return gdbpy_handle_gdb_exception (nullptr, except
);
1410 /* Calculate and return the address of the PyObject as the value of
1411 the builtin __hash__ call. */
1413 valpy_hash (PyObject
*self
)
1415 return (intptr_t) self
;
1433 /* If TYPE is a reference, return the target; otherwise return TYPE. */
1434 #define STRIP_REFERENCE(TYPE) \
1435 (TYPE_IS_REFERENCE (TYPE) ? ((TYPE)->target_type ()) : (TYPE))
1437 /* Helper for valpy_binop. Returns a value object which is the result
1438 of applying the operation specified by OPCODE to the given
1439 arguments. Throws a GDB exception on error. */
1442 valpy_binop_throw (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
1444 PyObject
*result
= NULL
;
1446 struct value
*arg1
, *arg2
;
1447 struct value
*res_val
= NULL
;
1448 enum exp_opcode op
= OP_NULL
;
1451 scoped_value_mark free_values
;
1453 /* If the gdb.Value object is the second operand, then it will be
1454 passed to us as the OTHER argument, and SELF will be an entirely
1455 different kind of object, altogether. Because of this, we can't
1456 assume self is a gdb.Value object and need to convert it from
1458 arg1
= convert_value_from_python (self
);
1462 arg2
= convert_value_from_python (other
);
1470 struct type
*ltype
= arg1
->type ();
1471 struct type
*rtype
= arg2
->type ();
1473 ltype
= check_typedef (ltype
);
1474 ltype
= STRIP_REFERENCE (ltype
);
1475 rtype
= check_typedef (rtype
);
1476 rtype
= STRIP_REFERENCE (rtype
);
1479 if (ltype
->code () == TYPE_CODE_PTR
1480 && is_integral_type (rtype
))
1481 res_val
= value_ptradd (arg1
, value_as_long (arg2
));
1482 else if (rtype
->code () == TYPE_CODE_PTR
1483 && is_integral_type (ltype
))
1484 res_val
= value_ptradd (arg2
, value_as_long (arg1
));
1494 struct type
*ltype
= arg1
->type ();
1495 struct type
*rtype
= arg2
->type ();
1497 ltype
= check_typedef (ltype
);
1498 ltype
= STRIP_REFERENCE (ltype
);
1499 rtype
= check_typedef (rtype
);
1500 rtype
= STRIP_REFERENCE (rtype
);
1503 if (ltype
->code () == TYPE_CODE_PTR
1504 && rtype
->code () == TYPE_CODE_PTR
)
1505 /* A ptrdiff_t for the target would be preferable here. */
1506 res_val
= value_from_longest (builtin_type_pyint
,
1507 value_ptrdiff (arg1
, arg2
));
1508 else if (ltype
->code () == TYPE_CODE_PTR
1509 && is_integral_type (rtype
))
1510 res_val
= value_ptradd (arg1
, - value_as_long (arg2
));
1537 op
= BINOP_BITWISE_AND
;
1540 op
= BINOP_BITWISE_IOR
;
1543 op
= BINOP_BITWISE_XOR
;
1549 if (binop_user_defined_p (op
, arg1
, arg2
))
1550 res_val
= value_x_binop (arg1
, arg2
, op
, OP_NULL
, EVAL_NORMAL
);
1552 res_val
= value_binop (arg1
, arg2
, op
);
1556 result
= value_to_value_object (res_val
);
1561 /* Returns a value object which is the result of applying the operation
1562 specified by OPCODE to the given arguments. Returns NULL on error, with
1563 a python exception set. */
1565 valpy_binop (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
1567 PyObject
*result
= NULL
;
1571 result
= valpy_binop_throw (opcode
, self
, other
);
1573 catch (const gdb_exception
&except
)
1575 return gdbpy_handle_gdb_exception (nullptr, except
);
1582 valpy_add (PyObject
*self
, PyObject
*other
)
1584 return valpy_binop (VALPY_ADD
, self
, other
);
1588 valpy_subtract (PyObject
*self
, PyObject
*other
)
1590 return valpy_binop (VALPY_SUB
, self
, other
);
1594 valpy_multiply (PyObject
*self
, PyObject
*other
)
1596 return valpy_binop (VALPY_MUL
, self
, other
);
1600 valpy_divide (PyObject
*self
, PyObject
*other
)
1602 return valpy_binop (VALPY_DIV
, self
, other
);
1606 valpy_remainder (PyObject
*self
, PyObject
*other
)
1608 return valpy_binop (VALPY_REM
, self
, other
);
1612 valpy_power (PyObject
*self
, PyObject
*other
, PyObject
*unused
)
1614 /* We don't support the ternary form of pow. I don't know how to express
1615 that, so let's just throw NotImplementedError to at least do something
1617 if (unused
!= Py_None
)
1619 PyErr_SetString (PyExc_NotImplementedError
,
1620 "Invalid operation on gdb.Value.");
1624 return valpy_binop (VALPY_POW
, self
, other
);
1628 valpy_negative (PyObject
*self
)
1630 PyObject
*result
= NULL
;
1634 /* Perhaps overkill, but consistency has some virtue. */
1635 scoped_value_mark free_values
;
1638 val
= value_neg (((value_object
*) self
)->value
);
1639 result
= value_to_value_object (val
);
1641 catch (const gdb_exception
&except
)
1643 return gdbpy_handle_gdb_exception (nullptr, except
);
1650 valpy_positive (PyObject
*self
)
1652 return value_to_value_object (((value_object
*) self
)->value
);
1656 valpy_absolute (PyObject
*self
)
1658 struct value
*value
= ((value_object
*) self
)->value
;
1663 scoped_value_mark free_values
;
1665 if (value_less (value
, value::zero (value
->type (), not_lval
)))
1668 catch (const gdb_exception
&except
)
1670 return gdbpy_handle_gdb_exception (nullptr, except
);
1674 return valpy_positive (self
);
1676 return valpy_negative (self
);
1679 /* Implements boolean evaluation of gdb.Value. */
1681 valpy_nonzero (PyObject
*self
)
1683 value_object
*self_value
= (value_object
*) self
;
1685 int nonzero
= 0; /* Appease GCC warning. */
1689 type
= check_typedef (self_value
->value
->type ());
1691 if (is_integral_type (type
) || type
->code () == TYPE_CODE_PTR
)
1692 nonzero
= !!value_as_long (self_value
->value
);
1693 else if (is_floating_value (self_value
->value
))
1694 nonzero
= !target_float_is_zero
1695 (self_value
->value
->contents ().data (), type
);
1697 /* All other values are True. */
1700 catch (const gdb_exception
&ex
)
1702 /* This is not documented in the Python documentation, but if
1703 this function fails, return -1 as slot_nb_nonzero does (the
1704 default Python nonzero function). */
1705 return gdbpy_handle_gdb_exception (-1, ex
);
1711 /* Implements ~ for value objects. */
1713 valpy_invert (PyObject
*self
)
1715 PyObject
*result
= nullptr;
1719 scoped_value_mark free_values
;
1720 struct value
*val
= value_complement (((value_object
*) self
)->value
);
1721 result
= value_to_value_object (val
);
1723 catch (const gdb_exception
&except
)
1725 return gdbpy_handle_gdb_exception (nullptr, except
);
1731 /* Implements left shift for value objects. */
1733 valpy_lsh (PyObject
*self
, PyObject
*other
)
1735 return valpy_binop (VALPY_LSH
, self
, other
);
1738 /* Implements right shift for value objects. */
1740 valpy_rsh (PyObject
*self
, PyObject
*other
)
1742 return valpy_binop (VALPY_RSH
, self
, other
);
1745 /* Implements bitwise and for value objects. */
1747 valpy_and (PyObject
*self
, PyObject
*other
)
1749 return valpy_binop (VALPY_BITAND
, self
, other
);
1752 /* Implements bitwise or for value objects. */
1754 valpy_or (PyObject
*self
, PyObject
*other
)
1756 return valpy_binop (VALPY_BITOR
, self
, other
);
1759 /* Implements bitwise xor for value objects. */
1761 valpy_xor (PyObject
*self
, PyObject
*other
)
1763 return valpy_binop (VALPY_BITXOR
, self
, other
);
1766 /* Helper for valpy_richcompare. Implements comparison operations for
1767 value objects. Returns true/false on success. Returns -1 with a
1768 Python exception set if a Python error is detected. Throws a GDB
1769 exception on other errors (memory error, etc.). */
1772 valpy_richcompare_throw (PyObject
*self
, PyObject
*other
, int op
)
1775 struct value
*value_other
;
1776 struct value
*value_self
;
1778 scoped_value_mark free_values
;
1780 value_other
= convert_value_from_python (other
);
1781 if (value_other
== NULL
)
1784 value_self
= ((value_object
*) self
)->value
;
1789 result
= value_less (value_self
, value_other
);
1792 result
= value_less (value_self
, value_other
)
1793 || value_equal (value_self
, value_other
);
1796 result
= value_equal (value_self
, value_other
);
1799 result
= !value_equal (value_self
, value_other
);
1802 result
= value_less (value_other
, value_self
);
1805 result
= (value_less (value_other
, value_self
)
1806 || value_equal (value_self
, value_other
));
1810 PyErr_SetString (PyExc_NotImplementedError
,
1811 _("Invalid operation on gdb.Value."));
1820 /* Implements comparison operations for value objects. Returns NULL on error,
1821 with a python exception set. */
1823 valpy_richcompare (PyObject
*self
, PyObject
*other
, int op
)
1827 if (other
== Py_None
)
1828 /* Comparing with None is special. From what I can tell, in Python
1829 None is smaller than anything else. */
1841 PyErr_SetString (PyExc_NotImplementedError
,
1842 _("Invalid operation on gdb.Value."));
1848 result
= valpy_richcompare_throw (self
, other
, op
);
1850 catch (const gdb_exception
&except
)
1852 return gdbpy_handle_gdb_exception (nullptr, except
);
1855 /* In this case, the Python exception has already been set. */
1865 /* Implements conversion to long. */
1867 valpy_long (PyObject
*self
)
1869 struct value
*value
= ((value_object
*) self
)->value
;
1870 struct type
*type
= value
->type ();
1875 if (is_floating_value (value
))
1877 type
= builtin_type_pylong
;
1878 value
= value_cast (type
, value
);
1881 type
= check_typedef (type
);
1883 if (!is_integral_type (type
)
1884 && type
->code () != TYPE_CODE_PTR
)
1885 error (_("Cannot convert value to long."));
1887 l
= value_as_long (value
);
1889 catch (const gdb_exception
&except
)
1891 return gdbpy_handle_gdb_exception (nullptr, except
);
1894 if (type
->is_unsigned ())
1895 return gdb_py_object_from_ulongest (l
).release ();
1897 return gdb_py_object_from_longest (l
).release ();
1900 /* Implements conversion to float. */
1902 valpy_float (PyObject
*self
)
1904 struct value
*value
= ((value_object
*) self
)->value
;
1905 struct type
*type
= value
->type ();
1910 type
= check_typedef (type
);
1912 if (type
->code () == TYPE_CODE_FLT
&& is_floating_value (value
))
1913 d
= target_float_to_host_double (value
->contents ().data (), type
);
1914 else if (type
->code () == TYPE_CODE_INT
)
1916 /* Note that valpy_long accepts TYPE_CODE_PTR and some
1917 others here here -- but casting a pointer or bool to a
1918 float seems wrong. */
1919 d
= value_as_long (value
);
1922 error (_("Cannot convert value to float."));
1924 catch (const gdb_exception
&except
)
1926 return gdbpy_handle_gdb_exception (nullptr, except
);
1929 return PyFloat_FromDouble (d
);
1932 /* Returns an object for a value, without releasing it from the
1933 all_values chain. */
1935 value_to_value_object (struct value
*val
)
1937 value_object
*val_obj
;
1939 val_obj
= PyObject_New (value_object
, &value_object_type
);
1940 if (val_obj
!= NULL
)
1943 val_obj
->value
= val
;
1944 val_obj
->next
= nullptr;
1945 val_obj
->prev
= nullptr;
1946 val_obj
->address
= NULL
;
1947 val_obj
->type
= NULL
;
1948 val_obj
->dynamic_type
= NULL
;
1949 val_obj
->content_bytes
= nullptr;
1950 note_value (val_obj
);
1953 return (PyObject
*) val_obj
;
1956 /* Returns a borrowed reference to the struct value corresponding to
1957 the given value object. */
1959 value_object_to_value (PyObject
*self
)
1963 if (! PyObject_TypeCheck (self
, &value_object_type
))
1965 real
= (value_object
*) self
;
1969 /* Try to convert a Python value to a gdb value. If the value cannot
1970 be converted, set a Python exception and return NULL. Returns a
1971 reference to a new value on the all_values chain. */
1974 convert_value_from_python (PyObject
*obj
)
1976 struct value
*value
= NULL
; /* -Wall */
1979 gdb_assert (obj
!= NULL
);
1983 if (PyBool_Check (obj
))
1985 cmp
= obj
== Py_True
? 1 : 0;
1986 value
= value_from_longest (builtin_type_pybool
, cmp
);
1988 else if (PyLong_Check (obj
))
1990 LONGEST l
= PyLong_AsLongLong (obj
);
1992 if (PyErr_Occurred ())
1994 /* If the error was an overflow, we can try converting to
1995 ULONGEST instead. */
1996 if (PyErr_ExceptionMatches (PyExc_OverflowError
))
1998 gdbpy_err_fetch fetched_error
;
1999 gdbpy_ref
<> zero
= gdb_py_object_from_longest (0);
2001 /* Check whether obj is positive. */
2002 if (PyObject_RichCompareBool (obj
, zero
.get (), Py_GT
) > 0)
2006 ul
= PyLong_AsUnsignedLongLong (obj
);
2007 if (! PyErr_Occurred ())
2008 value
= value_from_ulongest (builtin_type_upylong
, ul
);
2012 /* There's nothing we can do. */
2013 fetched_error
.restore ();
2018 value
= value_from_longest (builtin_type_pylong
, l
);
2020 else if (PyFloat_Check (obj
))
2022 double d
= PyFloat_AsDouble (obj
);
2024 if (! PyErr_Occurred ())
2025 value
= value_from_host_double (builtin_type_pyfloat
, d
);
2027 else if (gdbpy_is_string (obj
))
2029 gdb::unique_xmalloc_ptr
<char> s
2030 = python_string_to_target_string (obj
);
2033 = current_language
->value_string (gdbpy_enter::get_gdbarch (),
2034 s
.get (), strlen (s
.get ()));
2036 else if (PyObject_TypeCheck (obj
, &value_object_type
))
2037 value
= ((value_object
*) obj
)->value
->copy ();
2038 else if (gdbpy_is_lazy_string (obj
))
2042 result
= PyObject_CallMethodObjArgs (obj
, gdbpy_value_cst
, NULL
);
2043 value
= ((value_object
*) result
)->value
->copy ();
2046 PyErr_Format (PyExc_TypeError
,
2047 _("Could not convert Python object: %S."), obj
);
2049 catch (const gdb_exception
&except
)
2051 return gdbpy_handle_gdb_exception (nullptr, except
);
2057 /* Returns value object in the ARGth position in GDB's history. */
2059 gdbpy_history (PyObject
*self
, PyObject
*args
)
2063 if (!PyArg_ParseTuple (args
, "i", &i
))
2066 PyObject
*result
= nullptr;
2069 scoped_value_mark free_values
;
2070 struct value
*res_val
= access_value_history (i
);
2071 result
= value_to_value_object (res_val
);
2073 catch (const gdb_exception
&except
)
2075 return gdbpy_handle_gdb_exception (nullptr, except
);
2081 /* Add a gdb.Value into GDB's history, and return (as an integer) the
2082 position of the newly added value. */
2084 gdbpy_add_history (PyObject
*self
, PyObject
*args
)
2086 PyObject
*value_obj
;
2088 if (!PyArg_ParseTuple (args
, "O", &value_obj
))
2091 struct value
*value
= convert_value_from_python (value_obj
);
2092 if (value
== nullptr)
2097 int idx
= value
->record_latest ();
2098 return gdb_py_object_from_longest (idx
).release ();
2100 catch (const gdb_exception
&except
)
2102 return gdbpy_handle_gdb_exception (nullptr, except
);
2108 /* Return an integer, the number of items in GDB's history. */
2111 gdbpy_history_count (PyObject
*self
, PyObject
*args
)
2113 return gdb_py_object_from_ulongest (value_history_count ()).release ();
2116 /* Return the value of a convenience variable. */
2118 gdbpy_convenience_variable (PyObject
*self
, PyObject
*args
)
2120 const char *varname
;
2121 struct value
*res_val
= NULL
;
2123 if (!PyArg_ParseTuple (args
, "s", &varname
))
2126 PyObject
*result
= nullptr;
2130 struct internalvar
*var
= lookup_only_internalvar (varname
);
2134 scoped_value_mark free_values
;
2135 res_val
= value_of_internalvar (gdbpy_enter::get_gdbarch (), var
);
2136 if (res_val
->type ()->code () == TYPE_CODE_VOID
)
2141 result
= value_to_value_object (res_val
);
2145 catch (const gdb_exception
&except
)
2147 return gdbpy_handle_gdb_exception (nullptr, except
);
2150 if (result
== nullptr && !found
)
2156 /* Set the value of a convenience variable. */
2158 gdbpy_set_convenience_variable (PyObject
*self
, PyObject
*args
)
2160 const char *varname
;
2161 PyObject
*value_obj
;
2162 struct value
*value
= NULL
;
2164 if (!PyArg_ParseTuple (args
, "sO", &varname
, &value_obj
))
2167 /* None means to clear the variable. */
2168 if (value_obj
!= Py_None
)
2170 value
= convert_value_from_python (value_obj
);
2179 struct internalvar
*var
= lookup_only_internalvar (varname
);
2182 clear_internalvar (var
);
2186 struct internalvar
*var
= lookup_internalvar (varname
);
2188 set_internalvar (var
, value
);
2191 catch (const gdb_exception
&except
)
2193 return gdbpy_handle_gdb_exception (nullptr, except
);
2199 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
2202 gdbpy_is_value_object (PyObject
*obj
)
2204 return PyObject_TypeCheck (obj
, &value_object_type
);
2207 static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
2208 gdbpy_initialize_values (void)
2210 return gdbpy_type_ready (&value_object_type
);
2213 GDBPY_INITIALIZE_FILE (gdbpy_initialize_values
);
2217 static gdb_PyGetSetDef value_object_getset
[] = {
2218 { "address", valpy_get_address
, NULL
, "The address of the value.",
2220 { "is_optimized_out", valpy_get_is_optimized_out
, NULL
,
2221 "Boolean telling whether the value is optimized "
2222 "out (i.e., not available).",
2224 { "type", valpy_get_type
, NULL
, "Type of the value.", NULL
},
2225 { "dynamic_type", valpy_get_dynamic_type
, NULL
,
2226 "Dynamic type of the value.", NULL
},
2227 { "is_lazy", valpy_get_is_lazy
, NULL
,
2228 "Boolean telling whether the value is lazy (not fetched yet\n\
2229 from the inferior). A lazy value is fetched when needed, or when\n\
2230 the \"fetch_lazy()\" method is called.", NULL
},
2231 { "bytes", valpy_get_bytes
, valpy_set_bytes
,
2232 "Return a bytearray containing the bytes of this value.", nullptr },
2233 {NULL
} /* Sentinel */
2236 static PyMethodDef value_object_methods
[] = {
2237 { "cast", valpy_cast
, METH_VARARGS
, "Cast the value to the supplied type." },
2238 { "dynamic_cast", valpy_dynamic_cast
, METH_VARARGS
,
2239 "dynamic_cast (gdb.Type) -> gdb.Value\n\
2240 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
2242 { "reinterpret_cast", valpy_reinterpret_cast
, METH_VARARGS
,
2243 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
2244 Cast the value to the supplied type, as if by the C++\n\
2245 reinterpret_cast operator."
2247 { "dereference", valpy_dereference
, METH_NOARGS
, "Dereferences the value." },
2248 { "referenced_value", valpy_referenced_value
, METH_NOARGS
,
2249 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
2250 { "reference_value", valpy_lvalue_reference_value
, METH_NOARGS
,
2251 "Return a value of type TYPE_CODE_REF referencing this value." },
2252 { "rvalue_reference_value", valpy_rvalue_reference_value
, METH_NOARGS
,
2253 "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
2254 { "const_value", valpy_const_value
, METH_NOARGS
,
2255 "Return a 'const' qualified version of the same value." },
2256 { "lazy_string", (PyCFunction
) valpy_lazy_string
,
2257 METH_VARARGS
| METH_KEYWORDS
,
2258 "lazy_string ([encoding] [, length]) -> lazy_string\n\
2259 Return a lazy string representation of the value." },
2260 { "string", (PyCFunction
) valpy_string
, METH_VARARGS
| METH_KEYWORDS
,
2261 "string ([encoding] [, errors] [, length]) -> string\n\
2262 Return Unicode string representation of the value." },
2263 { "fetch_lazy", valpy_fetch_lazy
, METH_NOARGS
,
2264 "Fetches the value from the inferior, if it was lazy." },
2265 { "format_string", (PyCFunction
) valpy_format_string
,
2266 METH_VARARGS
| METH_KEYWORDS
,
2267 "format_string (...) -> string\n\
2268 Return a string representation of the value using the specified\n\
2269 formatting options" },
2270 { "assign", (PyCFunction
) valpy_assign
, METH_VARARGS
,
2271 "assign (VAL) -> None\n\
2272 Assign VAL to this value." },
2273 { "to_array", valpy_to_array
, METH_NOARGS
,
2274 "to_array () -> Value\n\
2275 Return value as an array, if possible." },
2276 {NULL
} /* Sentinel */
2279 static PyNumberMethods value_object_as_number
= {
2284 NULL
, /* nb_divmod */
2285 valpy_power
, /* nb_power */
2286 valpy_negative
, /* nb_negative */
2287 valpy_positive
, /* nb_positive */
2288 valpy_absolute
, /* nb_absolute */
2289 valpy_nonzero
, /* nb_nonzero */
2290 valpy_invert
, /* nb_invert */
2291 valpy_lsh
, /* nb_lshift */
2292 valpy_rsh
, /* nb_rshift */
2293 valpy_and
, /* nb_and */
2294 valpy_xor
, /* nb_xor */
2295 valpy_or
, /* nb_or */
2296 valpy_long
, /* nb_int */
2297 NULL
, /* reserved */
2298 valpy_float
, /* nb_float */
2299 NULL
, /* nb_inplace_add */
2300 NULL
, /* nb_inplace_subtract */
2301 NULL
, /* nb_inplace_multiply */
2302 NULL
, /* nb_inplace_remainder */
2303 NULL
, /* nb_inplace_power */
2304 NULL
, /* nb_inplace_lshift */
2305 NULL
, /* nb_inplace_rshift */
2306 NULL
, /* nb_inplace_and */
2307 NULL
, /* nb_inplace_xor */
2308 NULL
, /* nb_inplace_or */
2309 NULL
, /* nb_floor_divide */
2310 valpy_divide
, /* nb_true_divide */
2311 NULL
, /* nb_inplace_floor_divide */
2312 NULL
, /* nb_inplace_true_divide */
2313 valpy_long
, /* nb_index */
2316 static PyMappingMethods value_object_as_mapping
= {
2322 PyTypeObject value_object_type
= {
2323 PyVarObject_HEAD_INIT (NULL
, 0)
2324 "gdb.Value", /*tp_name*/
2325 sizeof (value_object
), /*tp_basicsize*/
2327 valpy_dealloc
, /*tp_dealloc*/
2333 &value_object_as_number
, /*tp_as_number*/
2334 0, /*tp_as_sequence*/
2335 &value_object_as_mapping
, /*tp_as_mapping*/
2336 valpy_hash
, /*tp_hash*/
2337 valpy_call
, /*tp_call*/
2338 valpy_str
, /*tp_str*/
2342 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_CHECKTYPES
2343 | Py_TPFLAGS_BASETYPE
, /*tp_flags*/
2344 "GDB value object", /* tp_doc */
2345 0, /* tp_traverse */
2347 valpy_richcompare
, /* tp_richcompare */
2348 0, /* tp_weaklistoffset */
2350 0, /* tp_iternext */
2351 value_object_methods
, /* tp_methods */
2353 value_object_getset
, /* tp_getset */
2356 0, /* tp_descr_get */
2357 0, /* tp_descr_set */
2358 0, /* tp_dictoffset */
2359 valpy_init
, /* tp_init */
2361 PyType_GenericNew
, /* tp_new */