1 /* Python interface to values.
3 Copyright (C) 2008-2021 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 builtin_type (python_gdbarch)->builtin_long
40 /* Python's float type corresponds to C's double type. */
41 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
43 /* Python's long type corresponds to C's long long type. */
44 #define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
46 /* Python's long type corresponds to C's long long type. Unsigned version. */
47 #define builtin_type_upylong builtin_type \
48 (python_gdbarch)->builtin_unsigned_long_long
50 #define builtin_type_pybool \
51 language_bool_type (python_language, python_gdbarch)
53 #define builtin_type_pychar \
54 language_string_char_type (python_language, python_gdbarch)
58 struct value_object
*next
;
59 struct value_object
*prev
;
63 PyObject
*dynamic_type
;
66 /* List of all values which are currently exposed to Python. It is
67 maintained so that when an objfile is discarded, preserve_values
68 can copy the values' types if needed. */
69 /* This variable is unnecessarily initialized to NULL in order to
70 work around a linker bug on MacOS. */
71 static value_object
*values_in_python
= NULL
;
73 /* Called by the Python interpreter when deallocating a value object. */
75 valpy_dealloc (PyObject
*obj
)
77 value_object
*self
= (value_object
*) obj
;
79 /* Remove SELF from the global list. */
81 self
->prev
->next
= self
->next
;
84 gdb_assert (values_in_python
== self
);
85 values_in_python
= self
->next
;
88 self
->next
->prev
= self
->prev
;
90 value_decref (self
->value
);
92 Py_XDECREF (self
->address
);
93 Py_XDECREF (self
->type
);
94 Py_XDECREF (self
->dynamic_type
);
96 Py_TYPE (self
)->tp_free (self
);
99 /* Helper to push a Value object on the global list. */
101 note_value (value_object
*value_obj
)
103 value_obj
->next
= values_in_python
;
105 value_obj
->next
->prev
= value_obj
;
106 value_obj
->prev
= NULL
;
107 values_in_python
= value_obj
;
110 /* Convert a python object OBJ with type TYPE to a gdb value. The
111 python object in question must conform to the python buffer
112 protocol. On success, return the converted value, otherwise
115 static struct value
*
116 convert_buffer_and_type_to_value (PyObject
*obj
, struct type
*type
)
118 Py_buffer_up buffer_up
;
121 if (PyObject_CheckBuffer (obj
)
122 && PyObject_GetBuffer (obj
, &py_buf
, PyBUF_SIMPLE
) == 0)
124 /* Got a buffer, py_buf, out of obj. Cause it to be released
125 when it goes out of scope. */
126 buffer_up
.reset (&py_buf
);
130 PyErr_SetString (PyExc_TypeError
,
131 _("Object must support the python buffer protocol."));
135 if (TYPE_LENGTH (type
) > py_buf
.len
)
137 PyErr_SetString (PyExc_ValueError
,
138 _("Size of type is larger than that of buffer object."));
142 return value_from_contents (type
, (const gdb_byte
*) py_buf
.buf
);
145 /* Called when a new gdb.Value object needs to be allocated. Returns NULL on
146 error, with a python exception set. */
148 valpy_new (PyTypeObject
*subtype
, PyObject
*args
, PyObject
*kwargs
)
150 static const char *keywords
[] = { "val", "type", NULL
};
151 PyObject
*val_obj
= nullptr;
152 PyObject
*type_obj
= nullptr;
154 if (!gdb_PyArg_ParseTupleAndKeywords (args
, kwargs
, "O|O", keywords
,
155 &val_obj
, &type_obj
))
158 struct type
*type
= nullptr;
160 if (type_obj
!= nullptr)
162 type
= type_object_to_type (type_obj
);
165 PyErr_SetString (PyExc_TypeError
,
166 _("type argument must be a gdb.Type."));
171 value_object
*value_obj
= (value_object
*) subtype
->tp_alloc (subtype
, 1);
172 if (value_obj
== NULL
)
174 PyErr_SetString (PyExc_MemoryError
, _("Could not allocate memory to "
175 "create Value object."));
182 value
= convert_value_from_python (val_obj
);
184 value
= convert_buffer_and_type_to_value (val_obj
, type
);
186 if (value
== nullptr)
188 subtype
->tp_free (value_obj
);
192 value_obj
->value
= release_value (value
).release ();
193 value_obj
->address
= NULL
;
194 value_obj
->type
= NULL
;
195 value_obj
->dynamic_type
= NULL
;
196 note_value (value_obj
);
198 return (PyObject
*) value_obj
;
201 /* Iterate over all the Value objects, calling preserve_one_value on
204 gdbpy_preserve_values (const struct extension_language_defn
*extlang
,
205 struct objfile
*objfile
, htab_t copied_types
)
209 for (iter
= values_in_python
; iter
; iter
= iter
->next
)
210 preserve_one_value (iter
->value
, objfile
, copied_types
);
213 /* Given a value of a pointer type, apply the C unary * operator to it. */
215 valpy_dereference (PyObject
*self
, PyObject
*args
)
217 PyObject
*result
= NULL
;
221 struct value
*res_val
;
222 scoped_value_mark free_values
;
224 res_val
= value_ind (((value_object
*) self
)->value
);
225 result
= value_to_value_object (res_val
);
227 catch (const gdb_exception
&except
)
229 GDB_PY_HANDLE_EXCEPTION (except
);
235 /* Given a value of a pointer type or a reference type, return the value
236 referenced. The difference between this function and valpy_dereference is
237 that the latter applies * unary operator to a value, which need not always
238 result in the value referenced. For example, for a value which is a reference
239 to an 'int' pointer ('int *'), valpy_dereference will result in a value of
240 type 'int' while valpy_referenced_value will result in a value of type
244 valpy_referenced_value (PyObject
*self
, PyObject
*args
)
246 PyObject
*result
= NULL
;
250 struct value
*self_val
, *res_val
;
251 scoped_value_mark free_values
;
253 self_val
= ((value_object
*) self
)->value
;
254 switch (check_typedef (value_type (self_val
))->code ())
257 res_val
= value_ind (self_val
);
260 case TYPE_CODE_RVALUE_REF
:
261 res_val
= coerce_ref (self_val
);
264 error(_("Trying to get the referenced value from a value which is "
265 "neither a pointer nor a reference."));
268 result
= value_to_value_object (res_val
);
270 catch (const gdb_exception
&except
)
272 GDB_PY_HANDLE_EXCEPTION (except
);
278 /* Return a value which is a reference to the value. */
281 valpy_reference_value (PyObject
*self
, PyObject
*args
, enum type_code refcode
)
283 PyObject
*result
= NULL
;
287 struct value
*self_val
;
288 scoped_value_mark free_values
;
290 self_val
= ((value_object
*) self
)->value
;
291 result
= value_to_value_object (value_ref (self_val
, refcode
));
293 catch (const gdb_exception
&except
)
295 GDB_PY_HANDLE_EXCEPTION (except
);
302 valpy_lvalue_reference_value (PyObject
*self
, PyObject
*args
)
304 return valpy_reference_value (self
, args
, TYPE_CODE_REF
);
308 valpy_rvalue_reference_value (PyObject
*self
, PyObject
*args
)
310 return valpy_reference_value (self
, args
, TYPE_CODE_RVALUE_REF
);
313 /* Return a "const" qualified version of the value. */
316 valpy_const_value (PyObject
*self
, PyObject
*args
)
318 PyObject
*result
= NULL
;
322 struct value
*self_val
, *res_val
;
323 scoped_value_mark free_values
;
325 self_val
= ((value_object
*) self
)->value
;
326 res_val
= make_cv_value (1, 0, self_val
);
327 result
= value_to_value_object (res_val
);
329 catch (const gdb_exception
&except
)
331 GDB_PY_HANDLE_EXCEPTION (except
);
337 /* Return "&value". */
339 valpy_get_address (PyObject
*self
, void *closure
)
341 value_object
*val_obj
= (value_object
*) self
;
343 if (!val_obj
->address
)
347 struct value
*res_val
;
348 scoped_value_mark free_values
;
350 res_val
= value_addr (val_obj
->value
);
351 val_obj
->address
= value_to_value_object (res_val
);
353 catch (const gdb_exception
&except
)
355 val_obj
->address
= Py_None
;
360 Py_XINCREF (val_obj
->address
);
362 return val_obj
->address
;
365 /* Return type of the value. */
367 valpy_get_type (PyObject
*self
, void *closure
)
369 value_object
*obj
= (value_object
*) self
;
373 obj
->type
= type_to_type_object (value_type (obj
->value
));
377 Py_INCREF (obj
->type
);
381 /* Return dynamic type of the value. */
384 valpy_get_dynamic_type (PyObject
*self
, void *closure
)
386 value_object
*obj
= (value_object
*) self
;
387 struct type
*type
= NULL
;
389 if (obj
->dynamic_type
!= NULL
)
391 Py_INCREF (obj
->dynamic_type
);
392 return obj
->dynamic_type
;
397 struct value
*val
= obj
->value
;
398 scoped_value_mark free_values
;
400 type
= value_type (val
);
401 type
= check_typedef (type
);
403 if (((type
->code () == TYPE_CODE_PTR
) || TYPE_IS_REFERENCE (type
))
404 && (TYPE_TARGET_TYPE (type
)->code () == TYPE_CODE_STRUCT
))
406 struct value
*target
;
407 int was_pointer
= type
->code () == TYPE_CODE_PTR
;
410 target
= value_ind (val
);
412 target
= coerce_ref (val
);
413 type
= value_rtti_type (target
, NULL
, NULL
, NULL
);
418 type
= lookup_pointer_type (type
);
420 type
= lookup_lvalue_reference_type (type
);
423 else if (type
->code () == TYPE_CODE_STRUCT
)
424 type
= value_rtti_type (val
, NULL
, NULL
, NULL
);
427 /* Re-use object's static type. */
431 catch (const gdb_exception
&except
)
433 GDB_PY_HANDLE_EXCEPTION (except
);
437 obj
->dynamic_type
= valpy_get_type (self
, NULL
);
439 obj
->dynamic_type
= type_to_type_object (type
);
441 Py_XINCREF (obj
->dynamic_type
);
442 return obj
->dynamic_type
;
445 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
446 string. Return a PyObject representing a lazy_string_object type.
447 A lazy string is a pointer to a string with an optional encoding and
448 length. If ENCODING is not given, encoding is set to None. If an
449 ENCODING is provided the encoding parameter is set to ENCODING, but
450 the string is not encoded.
451 If LENGTH is provided then the length parameter is set to LENGTH.
452 Otherwise if the value is an array of known length then the array's length
453 is used. Otherwise the length will be set to -1 (meaning first null of
456 Note: In order to not break any existing uses this allows creating
457 lazy strings from anything. PR 20769. E.g.,
458 gdb.parse_and_eval("my_int_variable").lazy_string().
459 "It's easier to relax restrictions than it is to impose them after the
460 fact." So we should be flagging any unintended uses as errors, but it's
461 perhaps too late for that. */
464 valpy_lazy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
466 gdb_py_longest length
= -1;
467 struct value
*value
= ((value_object
*) self
)->value
;
468 const char *user_encoding
= NULL
;
469 static const char *keywords
[] = { "encoding", "length", NULL
};
470 PyObject
*str_obj
= NULL
;
472 if (!gdb_PyArg_ParseTupleAndKeywords (args
, kw
, "|s" GDB_PY_LL_ARG
,
473 keywords
, &user_encoding
, &length
))
478 PyErr_SetString (PyExc_ValueError
, _("Invalid length."));
484 scoped_value_mark free_values
;
485 struct type
*type
, *realtype
;
488 type
= value_type (value
);
489 realtype
= check_typedef (type
);
491 switch (realtype
->code ())
493 case TYPE_CODE_ARRAY
:
495 LONGEST array_length
= -1;
496 LONGEST low_bound
, high_bound
;
498 /* PR 20786: There's no way to specify an array of length zero.
499 Record a length of [0,-1] which is how Ada does it. Anything
500 we do is broken, but this one possible solution. */
501 if (get_array_bounds (realtype
, &low_bound
, &high_bound
))
502 array_length
= high_bound
- low_bound
+ 1;
504 length
= array_length
;
505 else if (array_length
== -1)
507 type
= lookup_array_range_type (TYPE_TARGET_TYPE (realtype
),
510 else if (length
!= array_length
)
512 /* We need to create a new array type with the
514 if (length
> array_length
)
515 error (_("Length is larger than array size."));
516 type
= lookup_array_range_type (TYPE_TARGET_TYPE (realtype
),
518 low_bound
+ length
- 1);
520 addr
= value_address (value
);
524 /* If a length is specified we defer creating an array of the
525 specified width until we need to. */
526 addr
= value_as_address (value
);
529 /* Should flag an error here. PR 20769. */
530 addr
= value_address (value
);
534 str_obj
= gdbpy_create_lazy_string_object (addr
, length
, user_encoding
,
537 catch (const gdb_exception
&except
)
539 GDB_PY_HANDLE_EXCEPTION (except
);
545 /* Implementation of gdb.Value.string ([encoding] [, errors]
546 [, length]) -> string. Return Unicode string with value contents.
547 If ENCODING is not given, the string is assumed to be encoded in
548 the target's charset. If LENGTH is provided, only fetch string to
549 the length provided. */
552 valpy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
555 gdb::unique_xmalloc_ptr
<gdb_byte
> buffer
;
556 struct value
*value
= ((value_object
*) self
)->value
;
557 const char *encoding
= NULL
;
558 const char *errors
= NULL
;
559 const char *user_encoding
= NULL
;
560 const char *la_encoding
= NULL
;
561 struct type
*char_type
;
562 static const char *keywords
[] = { "encoding", "errors", "length", NULL
};
564 if (!gdb_PyArg_ParseTupleAndKeywords (args
, kw
, "|ssi", keywords
,
565 &user_encoding
, &errors
, &length
))
570 c_get_string (value
, &buffer
, &length
, &char_type
, &la_encoding
);
572 catch (const gdb_exception
&except
)
574 GDB_PY_HANDLE_EXCEPTION (except
);
577 encoding
= (user_encoding
&& *user_encoding
) ? user_encoding
: la_encoding
;
578 return PyUnicode_Decode ((const char *) buffer
.get (),
579 length
* TYPE_LENGTH (char_type
),
583 /* Given a Python object, copy its truth value to a C bool (the value
585 If src_obj is NULL, then *dest is not modified.
587 Return true in case of success (including src_obj being NULL), false
591 copy_py_bool_obj (bool *dest
, PyObject
*src_obj
)
595 int cmp
= PyObject_IsTrue (src_obj
);
604 /* Implementation of gdb.Value.format_string (...) -> string.
605 Return Unicode string with value contents formatted using the
606 keyword-only arguments. */
609 valpy_format_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
611 static const char *keywords
[] =
613 /* Basic C/C++ options. */
614 "raw", /* See the /r option to print. */
615 "pretty_arrays", /* See set print array on|off. */
616 "pretty_structs", /* See set print pretty on|off. */
617 "array_indexes", /* See set print array-indexes on|off. */
618 "symbols", /* See set print symbol on|off. */
619 "unions", /* See set print union on|off. */
620 "address", /* See set print address on|off. */
622 "deref_refs", /* No corresponding setting. */
623 "actual_objects", /* See set print object on|off. */
624 "static_members", /* See set print static-members on|off. */
625 /* C non-bool options. */
626 "max_elements", /* See set print elements N. */
627 "max_depth", /* See set print max-depth N. */
628 "repeat_threshold", /* See set print repeats. */
629 "format", /* The format passed to the print command. */
633 /* This function has too many arguments to be useful as positionals, so
634 the user should specify them all as keyword arguments.
635 Python 3.3 and later have a way to specify it (both in C and Python
636 itself), but we could be compiled with older versions, so we just
637 check that the args tuple is empty. */
638 Py_ssize_t positional_count
= PyObject_Length (args
);
639 if (positional_count
< 0)
641 else if (positional_count
> 0)
643 /* This matches the error message that Python 3.3 raises when
644 passing positionals to functions expecting keyword-only
646 PyErr_Format (PyExc_TypeError
,
647 "format_string() takes 0 positional arguments but %zu were given",
652 struct value_print_options opts
;
653 get_user_print_options (&opts
);
656 /* We need objects for booleans as the "p" flag for bools is new in
658 PyObject
*raw_obj
= NULL
;
659 PyObject
*pretty_arrays_obj
= NULL
;
660 PyObject
*pretty_structs_obj
= NULL
;
661 PyObject
*array_indexes_obj
= NULL
;
662 PyObject
*symbols_obj
= NULL
;
663 PyObject
*unions_obj
= NULL
;
664 PyObject
*address_obj
= NULL
;
665 PyObject
*deref_refs_obj
= NULL
;
666 PyObject
*actual_objects_obj
= NULL
;
667 PyObject
*static_members_obj
= NULL
;
669 if (!gdb_PyArg_ParseTupleAndKeywords (args
,
671 "|O!O!O!O!O!O!O!O!O!O!IIIs",
673 &PyBool_Type
, &raw_obj
,
674 &PyBool_Type
, &pretty_arrays_obj
,
675 &PyBool_Type
, &pretty_structs_obj
,
676 &PyBool_Type
, &array_indexes_obj
,
677 &PyBool_Type
, &symbols_obj
,
678 &PyBool_Type
, &unions_obj
,
679 &PyBool_Type
, &address_obj
,
680 &PyBool_Type
, &deref_refs_obj
,
681 &PyBool_Type
, &actual_objects_obj
,
682 &PyBool_Type
, &static_members_obj
,
685 &opts
.repeat_count_threshold
,
689 /* Set boolean arguments. */
690 if (!copy_py_bool_obj (&opts
.raw
, raw_obj
))
692 if (!copy_py_bool_obj (&opts
.prettyformat_arrays
, pretty_arrays_obj
))
694 if (!copy_py_bool_obj (&opts
.prettyformat_structs
, pretty_structs_obj
))
696 if (!copy_py_bool_obj (&opts
.print_array_indexes
, array_indexes_obj
))
698 if (!copy_py_bool_obj (&opts
.symbol_print
, symbols_obj
))
700 if (!copy_py_bool_obj (&opts
.unionprint
, unions_obj
))
702 if (!copy_py_bool_obj (&opts
.addressprint
, address_obj
))
704 if (!copy_py_bool_obj (&opts
.deref_ref
, deref_refs_obj
))
706 if (!copy_py_bool_obj (&opts
.objectprint
, actual_objects_obj
))
708 if (!copy_py_bool_obj (&opts
.static_field_print
, static_members_obj
))
711 /* Numeric arguments for which 0 means unlimited (which we represent as
712 UINT_MAX). Note that the max-depth numeric argument uses -1 as
713 unlimited, and 0 is a valid choice. */
714 if (opts
.print_max
== 0)
715 opts
.print_max
= UINT_MAX
;
716 if (opts
.repeat_count_threshold
== 0)
717 opts
.repeat_count_threshold
= UINT_MAX
;
719 /* Other arguments. */
722 if (strlen (format
) == 1)
723 opts
.format
= format
[0];
726 /* Mimic the message on standard Python ones for similar
728 PyErr_SetString (PyExc_ValueError
,
729 "a single character is required");
738 common_val_print (((value_object
*) self
)->value
, &stb
, 0,
739 &opts
, python_language
);
741 catch (const gdb_exception
&except
)
743 GDB_PY_HANDLE_EXCEPTION (except
);
746 return PyUnicode_Decode (stb
.c_str (), stb
.size (), host_charset (), NULL
);
749 /* A helper function that implements the various cast operators. */
752 valpy_do_cast (PyObject
*self
, PyObject
*args
, enum exp_opcode op
)
754 PyObject
*type_obj
, *result
= NULL
;
757 if (! PyArg_ParseTuple (args
, "O", &type_obj
))
760 type
= type_object_to_type (type_obj
);
763 PyErr_SetString (PyExc_RuntimeError
,
764 _("Argument must be a type."));
770 struct value
*val
= ((value_object
*) self
)->value
;
771 struct value
*res_val
;
772 scoped_value_mark free_values
;
774 if (op
== UNOP_DYNAMIC_CAST
)
775 res_val
= value_dynamic_cast (type
, val
);
776 else if (op
== UNOP_REINTERPRET_CAST
)
777 res_val
= value_reinterpret_cast (type
, val
);
780 gdb_assert (op
== UNOP_CAST
);
781 res_val
= value_cast (type
, val
);
784 result
= value_to_value_object (res_val
);
786 catch (const gdb_exception
&except
)
788 GDB_PY_HANDLE_EXCEPTION (except
);
794 /* Implementation of the "cast" method. */
797 valpy_cast (PyObject
*self
, PyObject
*args
)
799 return valpy_do_cast (self
, args
, UNOP_CAST
);
802 /* Implementation of the "dynamic_cast" method. */
805 valpy_dynamic_cast (PyObject
*self
, PyObject
*args
)
807 return valpy_do_cast (self
, args
, UNOP_DYNAMIC_CAST
);
810 /* Implementation of the "reinterpret_cast" method. */
813 valpy_reinterpret_cast (PyObject
*self
, PyObject
*args
)
815 return valpy_do_cast (self
, args
, UNOP_REINTERPRET_CAST
);
819 valpy_length (PyObject
*self
)
821 /* We don't support getting the number of elements in a struct / class. */
822 PyErr_SetString (PyExc_NotImplementedError
,
823 _("Invalid operation on gdb.Value."));
827 /* Return 1 if the gdb.Field object FIELD is present in the value V.
828 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
831 value_has_field (struct value
*v
, PyObject
*field
)
833 struct type
*parent_type
, *val_type
;
834 enum type_code type_code
;
835 gdbpy_ref
<> type_object (PyObject_GetAttrString (field
, "parent_type"));
838 if (type_object
== NULL
)
841 parent_type
= type_object_to_type (type_object
.get ());
842 if (parent_type
== NULL
)
844 PyErr_SetString (PyExc_TypeError
,
845 _("'parent_type' attribute of gdb.Field object is not a"
846 "gdb.Type object."));
852 val_type
= value_type (v
);
853 val_type
= check_typedef (val_type
);
854 if (TYPE_IS_REFERENCE (val_type
) || val_type
->code () == TYPE_CODE_PTR
)
855 val_type
= check_typedef (TYPE_TARGET_TYPE (val_type
));
857 type_code
= val_type
->code ();
858 if ((type_code
== TYPE_CODE_STRUCT
|| type_code
== TYPE_CODE_UNION
)
859 && types_equal (val_type
, parent_type
))
864 catch (const gdb_exception
&except
)
866 GDB_PY_SET_HANDLE_EXCEPTION (except
);
872 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
873 Returns 1 if the flag value is true, 0 if it is false, and -1 if
874 a Python error occurs. */
877 get_field_flag (PyObject
*field
, const char *flag_name
)
879 gdbpy_ref
<> flag_object (PyObject_GetAttrString (field
, flag_name
));
881 if (flag_object
== NULL
)
884 return PyObject_IsTrue (flag_object
.get ());
887 /* Return the "type" attribute of a gdb.Field object.
888 Returns NULL on error, with a Python exception set. */
891 get_field_type (PyObject
*field
)
893 gdbpy_ref
<> ftype_obj (PyObject_GetAttrString (field
, "type"));
896 if (ftype_obj
== NULL
)
898 ftype
= type_object_to_type (ftype_obj
.get ());
900 PyErr_SetString (PyExc_TypeError
,
901 _("'type' attribute of gdb.Field object is not a "
902 "gdb.Type object."));
907 /* Given string name or a gdb.Field object corresponding to an element inside
908 a structure, return its value object. Returns NULL on error, with a python
912 valpy_getitem (PyObject
*self
, PyObject
*key
)
914 struct gdb_exception except
;
915 value_object
*self_value
= (value_object
*) self
;
916 gdb::unique_xmalloc_ptr
<char> field
;
917 struct type
*base_class_type
= NULL
, *field_type
= NULL
;
919 PyObject
*result
= NULL
;
921 if (gdbpy_is_string (key
))
923 field
= python_string_to_host_string (key
);
927 else if (gdbpy_is_field (key
))
929 int is_base_class
, valid_field
;
931 valid_field
= value_has_field (self_value
->value
, key
);
934 else if (valid_field
== 0)
936 PyErr_SetString (PyExc_TypeError
,
937 _("Invalid lookup for a field not contained in "
943 is_base_class
= get_field_flag (key
, "is_base_class");
944 if (is_base_class
< 0)
946 else if (is_base_class
> 0)
948 base_class_type
= get_field_type (key
);
949 if (base_class_type
== NULL
)
954 gdbpy_ref
<> name_obj (PyObject_GetAttrString (key
, "name"));
956 if (name_obj
== NULL
)
959 if (name_obj
!= Py_None
)
961 field
= python_string_to_host_string (name_obj
.get ());
967 if (!PyObject_HasAttrString (key
, "bitpos"))
969 PyErr_SetString (PyExc_AttributeError
,
970 _("gdb.Field object has no name and no "
971 "'bitpos' attribute."));
975 gdbpy_ref
<> bitpos_obj (PyObject_GetAttrString (key
, "bitpos"));
976 if (bitpos_obj
== NULL
)
978 if (!gdb_py_int_as_long (bitpos_obj
.get (), &bitpos
))
981 field_type
= get_field_type (key
);
982 if (field_type
== NULL
)
990 struct value
*tmp
= self_value
->value
;
991 struct value
*res_val
= NULL
;
992 scoped_value_mark free_values
;
995 res_val
= value_struct_elt (&tmp
, NULL
, field
.get (), NULL
,
996 "struct/class/union");
997 else if (bitpos
>= 0)
998 res_val
= value_struct_elt_bitpos (&tmp
, bitpos
, field_type
,
999 "struct/class/union");
1000 else if (base_class_type
!= NULL
)
1002 struct type
*val_type
;
1004 val_type
= check_typedef (value_type (tmp
));
1005 if (val_type
->code () == TYPE_CODE_PTR
)
1006 res_val
= value_cast (lookup_pointer_type (base_class_type
), tmp
);
1007 else if (val_type
->code () == TYPE_CODE_REF
)
1008 res_val
= value_cast (lookup_lvalue_reference_type (base_class_type
),
1010 else if (val_type
->code () == TYPE_CODE_RVALUE_REF
)
1011 res_val
= value_cast (lookup_rvalue_reference_type (base_class_type
),
1014 res_val
= value_cast (base_class_type
, tmp
);
1018 /* Assume we are attempting an array access, and let the
1019 value code throw an exception if the index has an invalid
1021 struct value
*idx
= convert_value_from_python (key
);
1025 /* Check the value's type is something that can be accessed via
1029 tmp
= coerce_ref (tmp
);
1030 type
= check_typedef (value_type (tmp
));
1031 if (type
->code () != TYPE_CODE_ARRAY
1032 && type
->code () != TYPE_CODE_PTR
)
1033 error (_("Cannot subscript requested type."));
1035 res_val
= value_subscript (tmp
, value_as_long (idx
));
1040 result
= value_to_value_object (res_val
);
1042 catch (gdb_exception
&ex
)
1044 except
= std::move (ex
);
1047 GDB_PY_HANDLE_EXCEPTION (except
);
1053 valpy_setitem (PyObject
*self
, PyObject
*key
, PyObject
*value
)
1055 PyErr_Format (PyExc_NotImplementedError
,
1056 _("Setting of struct elements is not currently supported."));
1060 /* Called by the Python interpreter to perform an inferior function
1061 call on the value. Returns NULL on error, with a python exception set. */
1063 valpy_call (PyObject
*self
, PyObject
*args
, PyObject
*keywords
)
1065 Py_ssize_t args_count
;
1066 struct value
*function
= ((value_object
*) self
)->value
;
1067 struct value
**vargs
= NULL
;
1068 struct type
*ftype
= NULL
;
1069 PyObject
*result
= NULL
;
1073 ftype
= check_typedef (value_type (function
));
1075 catch (const gdb_exception
&except
)
1077 GDB_PY_HANDLE_EXCEPTION (except
);
1080 if (ftype
->code () != TYPE_CODE_FUNC
)
1082 PyErr_SetString (PyExc_RuntimeError
,
1083 _("Value is not callable (not TYPE_CODE_FUNC)."));
1087 if (! PyTuple_Check (args
))
1089 PyErr_SetString (PyExc_TypeError
,
1090 _("Inferior arguments must be provided in a tuple."));
1094 args_count
= PyTuple_Size (args
);
1099 vargs
= XALLOCAVEC (struct value
*, args_count
);
1100 for (i
= 0; i
< args_count
; i
++)
1102 PyObject
*item
= PyTuple_GetItem (args
, i
);
1107 vargs
[i
] = convert_value_from_python (item
);
1108 if (vargs
[i
] == NULL
)
1115 scoped_value_mark free_values
;
1118 = call_function_by_hand (function
, NULL
,
1119 gdb::make_array_view (vargs
, args_count
));
1120 result
= value_to_value_object (return_value
);
1122 catch (const gdb_exception
&except
)
1124 GDB_PY_HANDLE_EXCEPTION (except
);
1130 /* Called by the Python interpreter to obtain string representation
1133 valpy_str (PyObject
*self
)
1135 struct value_print_options opts
;
1137 get_user_print_options (&opts
);
1144 common_val_print (((value_object
*) self
)->value
, &stb
, 0,
1145 &opts
, python_language
);
1147 catch (const gdb_exception
&except
)
1149 GDB_PY_HANDLE_EXCEPTION (except
);
1152 return PyUnicode_Decode (stb
.c_str (), stb
.size (), host_charset (), NULL
);
1155 /* Implements gdb.Value.is_optimized_out. */
1157 valpy_get_is_optimized_out (PyObject
*self
, void *closure
)
1159 struct value
*value
= ((value_object
*) self
)->value
;
1164 opt
= value_optimized_out (value
);
1166 catch (const gdb_exception
&except
)
1168 GDB_PY_HANDLE_EXCEPTION (except
);
1177 /* Implements gdb.Value.is_lazy. */
1179 valpy_get_is_lazy (PyObject
*self
, void *closure
)
1181 struct value
*value
= ((value_object
*) self
)->value
;
1186 opt
= value_lazy (value
);
1188 catch (const gdb_exception
&except
)
1190 GDB_PY_HANDLE_EXCEPTION (except
);
1199 /* Implements gdb.Value.fetch_lazy (). */
1201 valpy_fetch_lazy (PyObject
*self
, PyObject
*args
)
1203 struct value
*value
= ((value_object
*) self
)->value
;
1207 if (value_lazy (value
))
1208 value_fetch_lazy (value
);
1210 catch (const gdb_exception
&except
)
1212 GDB_PY_HANDLE_EXCEPTION (except
);
1218 /* Calculate and return the address of the PyObject as the value of
1219 the builtin __hash__ call. */
1221 valpy_hash (PyObject
*self
)
1223 return (intptr_t) self
;
1241 /* If TYPE is a reference, return the target; otherwise return TYPE. */
1242 #define STRIP_REFERENCE(TYPE) \
1243 (TYPE_IS_REFERENCE (TYPE) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
1245 /* Helper for valpy_binop. Returns a value object which is the result
1246 of applying the operation specified by OPCODE to the given
1247 arguments. Throws a GDB exception on error. */
1250 valpy_binop_throw (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
1252 PyObject
*result
= NULL
;
1254 struct value
*arg1
, *arg2
;
1255 struct value
*res_val
= NULL
;
1256 enum exp_opcode op
= OP_NULL
;
1259 scoped_value_mark free_values
;
1261 /* If the gdb.Value object is the second operand, then it will be
1262 passed to us as the OTHER argument, and SELF will be an entirely
1263 different kind of object, altogether. Because of this, we can't
1264 assume self is a gdb.Value object and need to convert it from
1266 arg1
= convert_value_from_python (self
);
1270 arg2
= convert_value_from_python (other
);
1278 struct type
*ltype
= value_type (arg1
);
1279 struct type
*rtype
= value_type (arg2
);
1281 ltype
= check_typedef (ltype
);
1282 ltype
= STRIP_REFERENCE (ltype
);
1283 rtype
= check_typedef (rtype
);
1284 rtype
= STRIP_REFERENCE (rtype
);
1287 if (ltype
->code () == TYPE_CODE_PTR
1288 && is_integral_type (rtype
))
1289 res_val
= value_ptradd (arg1
, value_as_long (arg2
));
1290 else if (rtype
->code () == TYPE_CODE_PTR
1291 && is_integral_type (ltype
))
1292 res_val
= value_ptradd (arg2
, value_as_long (arg1
));
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 && rtype
->code () == TYPE_CODE_PTR
)
1313 /* A ptrdiff_t for the target would be preferable here. */
1314 res_val
= value_from_longest (builtin_type_pyint
,
1315 value_ptrdiff (arg1
, arg2
));
1316 else if (ltype
->code () == TYPE_CODE_PTR
1317 && is_integral_type (rtype
))
1318 res_val
= value_ptradd (arg1
, - value_as_long (arg2
));
1345 op
= BINOP_BITWISE_AND
;
1348 op
= BINOP_BITWISE_IOR
;
1351 op
= BINOP_BITWISE_XOR
;
1357 if (binop_user_defined_p (op
, arg1
, arg2
))
1358 res_val
= value_x_binop (arg1
, arg2
, op
, OP_NULL
, EVAL_NORMAL
);
1360 res_val
= value_binop (arg1
, arg2
, op
);
1364 result
= value_to_value_object (res_val
);
1369 /* Returns a value object which is the result of applying the operation
1370 specified by OPCODE to the given arguments. Returns NULL on error, with
1371 a python exception set. */
1373 valpy_binop (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
1375 PyObject
*result
= NULL
;
1379 result
= valpy_binop_throw (opcode
, self
, other
);
1381 catch (const gdb_exception
&except
)
1383 GDB_PY_HANDLE_EXCEPTION (except
);
1390 valpy_add (PyObject
*self
, PyObject
*other
)
1392 return valpy_binop (VALPY_ADD
, self
, other
);
1396 valpy_subtract (PyObject
*self
, PyObject
*other
)
1398 return valpy_binop (VALPY_SUB
, self
, other
);
1402 valpy_multiply (PyObject
*self
, PyObject
*other
)
1404 return valpy_binop (VALPY_MUL
, self
, other
);
1408 valpy_divide (PyObject
*self
, PyObject
*other
)
1410 return valpy_binop (VALPY_DIV
, self
, other
);
1414 valpy_remainder (PyObject
*self
, PyObject
*other
)
1416 return valpy_binop (VALPY_REM
, self
, other
);
1420 valpy_power (PyObject
*self
, PyObject
*other
, PyObject
*unused
)
1422 /* We don't support the ternary form of pow. I don't know how to express
1423 that, so let's just throw NotImplementedError to at least do something
1425 if (unused
!= Py_None
)
1427 PyErr_SetString (PyExc_NotImplementedError
,
1428 "Invalid operation on gdb.Value.");
1432 return valpy_binop (VALPY_POW
, self
, other
);
1436 valpy_negative (PyObject
*self
)
1438 PyObject
*result
= NULL
;
1442 /* Perhaps overkill, but consistency has some virtue. */
1443 scoped_value_mark free_values
;
1446 val
= value_neg (((value_object
*) self
)->value
);
1447 result
= value_to_value_object (val
);
1449 catch (const gdb_exception
&except
)
1451 GDB_PY_HANDLE_EXCEPTION (except
);
1458 valpy_positive (PyObject
*self
)
1460 return value_to_value_object (((value_object
*) self
)->value
);
1464 valpy_absolute (PyObject
*self
)
1466 struct value
*value
= ((value_object
*) self
)->value
;
1471 scoped_value_mark free_values
;
1473 if (value_less (value
, value_zero (value_type (value
), not_lval
)))
1476 catch (const gdb_exception
&except
)
1478 GDB_PY_HANDLE_EXCEPTION (except
);
1482 return valpy_positive (self
);
1484 return valpy_negative (self
);
1487 /* Implements boolean evaluation of gdb.Value. */
1489 valpy_nonzero (PyObject
*self
)
1491 struct gdb_exception except
;
1492 value_object
*self_value
= (value_object
*) self
;
1494 int nonzero
= 0; /* Appease GCC warning. */
1498 type
= check_typedef (value_type (self_value
->value
));
1500 if (is_integral_type (type
) || type
->code () == TYPE_CODE_PTR
)
1501 nonzero
= !!value_as_long (self_value
->value
);
1502 else if (is_floating_value (self_value
->value
))
1503 nonzero
= !target_float_is_zero (value_contents (self_value
->value
),
1506 /* All other values are True. */
1509 catch (gdb_exception
&ex
)
1511 except
= std::move (ex
);
1514 /* This is not documented in the Python documentation, but if this
1515 function fails, return -1 as slot_nb_nonzero does (the default
1516 Python nonzero function). */
1517 GDB_PY_SET_HANDLE_EXCEPTION (except
);
1522 /* Implements ~ for value objects. */
1524 valpy_invert (PyObject
*self
)
1526 struct value
*val
= NULL
;
1530 val
= value_complement (((value_object
*) self
)->value
);
1532 catch (const gdb_exception
&except
)
1534 GDB_PY_HANDLE_EXCEPTION (except
);
1537 return value_to_value_object (val
);
1540 /* Implements left shift for value objects. */
1542 valpy_lsh (PyObject
*self
, PyObject
*other
)
1544 return valpy_binop (VALPY_LSH
, self
, other
);
1547 /* Implements right shift for value objects. */
1549 valpy_rsh (PyObject
*self
, PyObject
*other
)
1551 return valpy_binop (VALPY_RSH
, self
, other
);
1554 /* Implements bitwise and for value objects. */
1556 valpy_and (PyObject
*self
, PyObject
*other
)
1558 return valpy_binop (VALPY_BITAND
, self
, other
);
1561 /* Implements bitwise or for value objects. */
1563 valpy_or (PyObject
*self
, PyObject
*other
)
1565 return valpy_binop (VALPY_BITOR
, self
, other
);
1568 /* Implements bitwise xor for value objects. */
1570 valpy_xor (PyObject
*self
, PyObject
*other
)
1572 return valpy_binop (VALPY_BITXOR
, self
, other
);
1575 /* Helper for valpy_richcompare. Implements comparison operations for
1576 value objects. Returns true/false on success. Returns -1 with a
1577 Python exception set if a Python error is detected. Throws a GDB
1578 exception on other errors (memory error, etc.). */
1581 valpy_richcompare_throw (PyObject
*self
, PyObject
*other
, int op
)
1584 struct value
*value_other
;
1585 struct value
*value_self
;
1587 scoped_value_mark free_values
;
1589 value_other
= convert_value_from_python (other
);
1590 if (value_other
== NULL
)
1593 value_self
= ((value_object
*) self
)->value
;
1598 result
= value_less (value_self
, value_other
);
1601 result
= value_less (value_self
, value_other
)
1602 || value_equal (value_self
, value_other
);
1605 result
= value_equal (value_self
, value_other
);
1608 result
= !value_equal (value_self
, value_other
);
1611 result
= value_less (value_other
, value_self
);
1614 result
= (value_less (value_other
, value_self
)
1615 || value_equal (value_self
, value_other
));
1619 PyErr_SetString (PyExc_NotImplementedError
,
1620 _("Invalid operation on gdb.Value."));
1629 /* Implements comparison operations for value objects. Returns NULL on error,
1630 with a python exception set. */
1632 valpy_richcompare (PyObject
*self
, PyObject
*other
, int op
)
1636 if (other
== Py_None
)
1637 /* Comparing with None is special. From what I can tell, in Python
1638 None is smaller than anything else. */
1650 PyErr_SetString (PyExc_NotImplementedError
,
1651 _("Invalid operation on gdb.Value."));
1657 result
= valpy_richcompare_throw (self
, other
, op
);
1659 catch (const gdb_exception
&except
)
1661 GDB_PY_HANDLE_EXCEPTION (except
);
1664 /* In this case, the Python exception has already been set. */
1675 /* Implements conversion to int. */
1677 valpy_int (PyObject
*self
)
1679 struct value
*value
= ((value_object
*) self
)->value
;
1680 struct type
*type
= value_type (value
);
1685 if (is_floating_value (value
))
1687 type
= builtin_type_pylong
;
1688 value
= value_cast (type
, value
);
1691 if (!is_integral_type (type
)
1692 && type
->code () != TYPE_CODE_PTR
)
1693 error (_("Cannot convert value to int."));
1695 l
= value_as_long (value
);
1697 catch (const gdb_exception
&except
)
1699 GDB_PY_HANDLE_EXCEPTION (except
);
1702 if (type
->is_unsigned ())
1703 return gdb_py_object_from_ulongest (l
).release ();
1705 return gdb_py_object_from_longest (l
).release ();
1709 /* Implements conversion to long. */
1711 valpy_long (PyObject
*self
)
1713 struct value
*value
= ((value_object
*) self
)->value
;
1714 struct type
*type
= value_type (value
);
1719 if (is_floating_value (value
))
1721 type
= builtin_type_pylong
;
1722 value
= value_cast (type
, value
);
1725 type
= check_typedef (type
);
1727 if (!is_integral_type (type
)
1728 && type
->code () != TYPE_CODE_PTR
)
1729 error (_("Cannot convert value to long."));
1731 l
= value_as_long (value
);
1733 catch (const gdb_exception
&except
)
1735 GDB_PY_HANDLE_EXCEPTION (except
);
1738 if (type
->is_unsigned ())
1739 return gdb_py_object_from_ulongest (l
).release ();
1741 return gdb_py_object_from_longest (l
).release ();
1744 /* Implements conversion to float. */
1746 valpy_float (PyObject
*self
)
1748 struct value
*value
= ((value_object
*) self
)->value
;
1749 struct type
*type
= value_type (value
);
1754 type
= check_typedef (type
);
1756 if (type
->code () == TYPE_CODE_FLT
&& is_floating_value (value
))
1757 d
= target_float_to_host_double (value_contents (value
), type
);
1758 else if (type
->code () == TYPE_CODE_INT
)
1760 /* Note that valpy_long accepts TYPE_CODE_PTR and some
1761 others here here -- but casting a pointer or bool to a
1762 float seems wrong. */
1763 d
= value_as_long (value
);
1766 error (_("Cannot convert value to float."));
1768 catch (const gdb_exception
&except
)
1770 GDB_PY_HANDLE_EXCEPTION (except
);
1773 return PyFloat_FromDouble (d
);
1776 /* Returns an object for a value which is released from the all_values chain,
1777 so its lifetime is not bound to the execution of a command. */
1779 value_to_value_object (struct value
*val
)
1781 value_object
*val_obj
;
1783 val_obj
= PyObject_New (value_object
, &value_object_type
);
1784 if (val_obj
!= NULL
)
1786 val_obj
->value
= release_value (val
).release ();
1787 val_obj
->address
= NULL
;
1788 val_obj
->type
= NULL
;
1789 val_obj
->dynamic_type
= NULL
;
1790 note_value (val_obj
);
1793 return (PyObject
*) val_obj
;
1796 /* Returns an object for a value, but without releasing it from the
1797 all_values chain. */
1799 value_to_value_object_no_release (struct value
*val
)
1801 value_object
*val_obj
;
1803 val_obj
= PyObject_New (value_object
, &value_object_type
);
1804 if (val_obj
!= NULL
)
1807 val_obj
->value
= val
;
1808 val_obj
->address
= NULL
;
1809 val_obj
->type
= NULL
;
1810 val_obj
->dynamic_type
= NULL
;
1811 note_value (val_obj
);
1814 return (PyObject
*) val_obj
;
1817 /* Returns a borrowed reference to the struct value corresponding to
1818 the given value object. */
1820 value_object_to_value (PyObject
*self
)
1824 if (! PyObject_TypeCheck (self
, &value_object_type
))
1826 real
= (value_object
*) self
;
1830 /* Try to convert a Python value to a gdb value. If the value cannot
1831 be converted, set a Python exception and return NULL. Returns a
1832 reference to a new value on the all_values chain. */
1835 convert_value_from_python (PyObject
*obj
)
1837 struct value
*value
= NULL
; /* -Wall */
1840 gdb_assert (obj
!= NULL
);
1844 if (PyBool_Check (obj
))
1846 cmp
= PyObject_IsTrue (obj
);
1848 value
= value_from_longest (builtin_type_pybool
, cmp
);
1850 /* Make a long logic check first. In Python 3.x, internally,
1851 all integers are represented as longs. In Python 2.x, there
1852 is still a differentiation internally between a PyInt and a
1853 PyLong. Explicitly do this long check conversion first. In
1854 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1855 to be done first to ensure we do not lose information in the
1856 conversion process. */
1857 else if (PyLong_Check (obj
))
1859 LONGEST l
= PyLong_AsLongLong (obj
);
1861 if (PyErr_Occurred ())
1863 /* If the error was an overflow, we can try converting to
1864 ULONGEST instead. */
1865 if (PyErr_ExceptionMatches (PyExc_OverflowError
))
1867 gdbpy_err_fetch fetched_error
;
1868 gdbpy_ref
<> zero
= gdb_py_object_from_longest (0);
1870 /* Check whether obj is positive. */
1871 if (PyObject_RichCompareBool (obj
, zero
.get (), Py_GT
) > 0)
1875 ul
= PyLong_AsUnsignedLongLong (obj
);
1876 if (! PyErr_Occurred ())
1877 value
= value_from_ulongest (builtin_type_upylong
, ul
);
1881 /* There's nothing we can do. */
1882 fetched_error
.restore ();
1887 value
= value_from_longest (builtin_type_pylong
, l
);
1889 #if PY_MAJOR_VERSION == 2
1890 else if (PyInt_Check (obj
))
1892 long l
= PyInt_AsLong (obj
);
1894 if (! PyErr_Occurred ())
1895 value
= value_from_longest (builtin_type_pyint
, l
);
1898 else if (PyFloat_Check (obj
))
1900 double d
= PyFloat_AsDouble (obj
);
1902 if (! PyErr_Occurred ())
1903 value
= value_from_host_double (builtin_type_pyfloat
, d
);
1905 else if (gdbpy_is_string (obj
))
1907 gdb::unique_xmalloc_ptr
<char> s
1908 = python_string_to_target_string (obj
);
1910 value
= value_cstring (s
.get (), strlen (s
.get ()),
1911 builtin_type_pychar
);
1913 else if (PyObject_TypeCheck (obj
, &value_object_type
))
1914 value
= value_copy (((value_object
*) obj
)->value
);
1915 else if (gdbpy_is_lazy_string (obj
))
1919 result
= PyObject_CallMethodObjArgs (obj
, gdbpy_value_cst
, NULL
);
1920 value
= value_copy (((value_object
*) result
)->value
);
1924 PyErr_Format (PyExc_TypeError
,
1925 _("Could not convert Python object: %S."), obj
);
1927 PyErr_Format (PyExc_TypeError
,
1928 _("Could not convert Python object: %s."),
1929 PyString_AsString (PyObject_Str (obj
)));
1932 catch (const gdb_exception
&except
)
1934 gdbpy_convert_exception (except
);
1941 /* Returns value object in the ARGth position in GDB's history. */
1943 gdbpy_history (PyObject
*self
, PyObject
*args
)
1946 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
1948 if (!PyArg_ParseTuple (args
, "i", &i
))
1953 res_val
= access_value_history (i
);
1955 catch (const gdb_exception
&except
)
1957 GDB_PY_HANDLE_EXCEPTION (except
);
1960 return value_to_value_object (res_val
);
1963 /* Return the value of a convenience variable. */
1965 gdbpy_convenience_variable (PyObject
*self
, PyObject
*args
)
1967 const char *varname
;
1968 struct value
*res_val
= NULL
;
1970 if (!PyArg_ParseTuple (args
, "s", &varname
))
1975 struct internalvar
*var
= lookup_only_internalvar (varname
);
1979 res_val
= value_of_internalvar (python_gdbarch
, var
);
1980 if (value_type (res_val
)->code () == TYPE_CODE_VOID
)
1984 catch (const gdb_exception
&except
)
1986 GDB_PY_HANDLE_EXCEPTION (except
);
1989 if (res_val
== NULL
)
1992 return value_to_value_object (res_val
);
1995 /* Set the value of a convenience variable. */
1997 gdbpy_set_convenience_variable (PyObject
*self
, PyObject
*args
)
1999 const char *varname
;
2000 PyObject
*value_obj
;
2001 struct value
*value
= NULL
;
2003 if (!PyArg_ParseTuple (args
, "sO", &varname
, &value_obj
))
2006 /* None means to clear the variable. */
2007 if (value_obj
!= Py_None
)
2009 value
= convert_value_from_python (value_obj
);
2018 struct internalvar
*var
= lookup_only_internalvar (varname
);
2021 clear_internalvar (var
);
2025 struct internalvar
*var
= lookup_internalvar (varname
);
2027 set_internalvar (var
, value
);
2030 catch (const gdb_exception
&except
)
2032 GDB_PY_HANDLE_EXCEPTION (except
);
2038 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
2041 gdbpy_is_value_object (PyObject
*obj
)
2043 return PyObject_TypeCheck (obj
, &value_object_type
);
2047 gdbpy_initialize_values (void)
2049 if (PyType_Ready (&value_object_type
) < 0)
2052 return gdb_pymodule_addobject (gdb_module
, "Value",
2053 (PyObject
*) &value_object_type
);
2058 static gdb_PyGetSetDef value_object_getset
[] = {
2059 { "address", valpy_get_address
, NULL
, "The address of the value.",
2061 { "is_optimized_out", valpy_get_is_optimized_out
, NULL
,
2062 "Boolean telling whether the value is optimized "
2063 "out (i.e., not available).",
2065 { "type", valpy_get_type
, NULL
, "Type of the value.", NULL
},
2066 { "dynamic_type", valpy_get_dynamic_type
, NULL
,
2067 "Dynamic type of the value.", NULL
},
2068 { "is_lazy", valpy_get_is_lazy
, NULL
,
2069 "Boolean telling whether the value is lazy (not fetched yet\n\
2070 from the inferior). A lazy value is fetched when needed, or when\n\
2071 the \"fetch_lazy()\" method is called.", NULL
},
2072 {NULL
} /* Sentinel */
2075 static PyMethodDef value_object_methods
[] = {
2076 { "cast", valpy_cast
, METH_VARARGS
, "Cast the value to the supplied type." },
2077 { "dynamic_cast", valpy_dynamic_cast
, METH_VARARGS
,
2078 "dynamic_cast (gdb.Type) -> gdb.Value\n\
2079 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
2081 { "reinterpret_cast", valpy_reinterpret_cast
, METH_VARARGS
,
2082 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
2083 Cast the value to the supplied type, as if by the C++\n\
2084 reinterpret_cast operator."
2086 { "dereference", valpy_dereference
, METH_NOARGS
, "Dereferences the value." },
2087 { "referenced_value", valpy_referenced_value
, METH_NOARGS
,
2088 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
2089 { "reference_value", valpy_lvalue_reference_value
, METH_NOARGS
,
2090 "Return a value of type TYPE_CODE_REF referencing this value." },
2091 { "rvalue_reference_value", valpy_rvalue_reference_value
, METH_NOARGS
,
2092 "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
2093 { "const_value", valpy_const_value
, METH_NOARGS
,
2094 "Return a 'const' qualied version of the same value." },
2095 { "lazy_string", (PyCFunction
) valpy_lazy_string
,
2096 METH_VARARGS
| METH_KEYWORDS
,
2097 "lazy_string ([encoding] [, length]) -> lazy_string\n\
2098 Return a lazy string representation of the value." },
2099 { "string", (PyCFunction
) valpy_string
, METH_VARARGS
| METH_KEYWORDS
,
2100 "string ([encoding] [, errors] [, length]) -> string\n\
2101 Return Unicode string representation of the value." },
2102 { "fetch_lazy", valpy_fetch_lazy
, METH_NOARGS
,
2103 "Fetches the value from the inferior, if it was lazy." },
2104 { "format_string", (PyCFunction
) valpy_format_string
,
2105 METH_VARARGS
| METH_KEYWORDS
,
2106 "format_string (...) -> string\n\
2107 Return a string representation of the value using the specified\n\
2108 formatting options" },
2109 {NULL
} /* Sentinel */
2112 static PyNumberMethods value_object_as_number
= {
2120 NULL
, /* nb_divmod */
2121 valpy_power
, /* nb_power */
2122 valpy_negative
, /* nb_negative */
2123 valpy_positive
, /* nb_positive */
2124 valpy_absolute
, /* nb_absolute */
2125 valpy_nonzero
, /* nb_nonzero */
2126 valpy_invert
, /* nb_invert */
2127 valpy_lsh
, /* nb_lshift */
2128 valpy_rsh
, /* nb_rshift */
2129 valpy_and
, /* nb_and */
2130 valpy_xor
, /* nb_xor */
2131 valpy_or
, /* nb_or */
2133 valpy_long
, /* nb_int */
2134 NULL
, /* reserved */
2136 NULL
, /* nb_coerce */
2137 valpy_int
, /* nb_int */
2138 valpy_long
, /* nb_long */
2140 valpy_float
, /* nb_float */
2145 NULL
, /* nb_inplace_add */
2146 NULL
, /* nb_inplace_subtract */
2147 NULL
, /* nb_inplace_multiply */
2149 NULL
, /* nb_inplace_divide */
2151 NULL
, /* nb_inplace_remainder */
2152 NULL
, /* nb_inplace_power */
2153 NULL
, /* nb_inplace_lshift */
2154 NULL
, /* nb_inplace_rshift */
2155 NULL
, /* nb_inplace_and */
2156 NULL
, /* nb_inplace_xor */
2157 NULL
, /* nb_inplace_or */
2158 NULL
, /* nb_floor_divide */
2159 valpy_divide
, /* nb_true_divide */
2160 NULL
, /* nb_inplace_floor_divide */
2161 NULL
, /* nb_inplace_true_divide */
2162 valpy_long
, /* nb_index */
2165 static PyMappingMethods value_object_as_mapping
= {
2171 PyTypeObject value_object_type
= {
2172 PyVarObject_HEAD_INIT (NULL
, 0)
2173 "gdb.Value", /*tp_name*/
2174 sizeof (value_object
), /*tp_basicsize*/
2176 valpy_dealloc
, /*tp_dealloc*/
2182 &value_object_as_number
, /*tp_as_number*/
2183 0, /*tp_as_sequence*/
2184 &value_object_as_mapping
, /*tp_as_mapping*/
2185 valpy_hash
, /*tp_hash*/
2186 valpy_call
, /*tp_call*/
2187 valpy_str
, /*tp_str*/
2191 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_CHECKTYPES
2192 | Py_TPFLAGS_BASETYPE
, /*tp_flags*/
2193 "GDB value object", /* tp_doc */
2194 0, /* tp_traverse */
2196 valpy_richcompare
, /* tp_richcompare */
2197 0, /* tp_weaklistoffset */
2199 0, /* tp_iternext */
2200 value_object_methods
, /* tp_methods */
2202 value_object_getset
, /* tp_getset */
2205 0, /* tp_descr_get */
2206 0, /* tp_descr_set */
2207 0, /* tp_dictoffset */
2210 valpy_new
/* tp_new */