1 /* Python interface to values.
3 Copyright (C) 2008-2020 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)
56 typedef struct value_object
{
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. */
621 "deref_refs", /* No corresponding setting. */
622 "actual_objects", /* See set print object on|off. */
623 "static_members", /* See set print static-members on|off. */
624 /* C non-bool options. */
625 "max_elements", /* See set print elements N. */
626 "max_depth", /* See set print max-depth N. */
627 "repeat_threshold", /* See set print repeats. */
628 "format", /* The format passed to the print command. */
632 /* This function has too many arguments to be useful as positionals, so
633 the user should specify them all as keyword arguments.
634 Python 3.3 and later have a way to specify it (both in C and Python
635 itself), but we could be compiled with older versions, so we just
636 check that the args tuple is empty. */
637 Py_ssize_t positional_count
= PyObject_Length (args
);
638 if (positional_count
< 0)
640 else if (positional_count
> 0)
642 /* This matches the error message that Python 3.3 raises when
643 passing positionals to functions expecting keyword-only
645 PyErr_Format (PyExc_TypeError
,
646 "format_string() takes 0 positional arguments but %zu were given",
651 struct value_print_options opts
;
652 get_user_print_options (&opts
);
655 /* We need objects for booleans as the "p" flag for bools is new in
657 PyObject
*raw_obj
= NULL
;
658 PyObject
*pretty_arrays_obj
= NULL
;
659 PyObject
*pretty_structs_obj
= NULL
;
660 PyObject
*array_indexes_obj
= NULL
;
661 PyObject
*symbols_obj
= NULL
;
662 PyObject
*unions_obj
= NULL
;
663 PyObject
*deref_refs_obj
= NULL
;
664 PyObject
*actual_objects_obj
= NULL
;
665 PyObject
*static_members_obj
= NULL
;
667 if (!gdb_PyArg_ParseTupleAndKeywords (args
,
669 "|O!O!O!O!O!O!O!O!O!IIIs",
671 &PyBool_Type
, &raw_obj
,
672 &PyBool_Type
, &pretty_arrays_obj
,
673 &PyBool_Type
, &pretty_structs_obj
,
674 &PyBool_Type
, &array_indexes_obj
,
675 &PyBool_Type
, &symbols_obj
,
676 &PyBool_Type
, &unions_obj
,
677 &PyBool_Type
, &deref_refs_obj
,
678 &PyBool_Type
, &actual_objects_obj
,
679 &PyBool_Type
, &static_members_obj
,
682 &opts
.repeat_count_threshold
,
686 /* Set boolean arguments. */
687 if (!copy_py_bool_obj (&opts
.raw
, raw_obj
))
689 if (!copy_py_bool_obj (&opts
.prettyformat_arrays
, pretty_arrays_obj
))
691 if (!copy_py_bool_obj (&opts
.prettyformat_structs
, pretty_structs_obj
))
693 if (!copy_py_bool_obj (&opts
.print_array_indexes
, array_indexes_obj
))
695 if (!copy_py_bool_obj (&opts
.symbol_print
, symbols_obj
))
697 if (!copy_py_bool_obj (&opts
.unionprint
, unions_obj
))
699 if (!copy_py_bool_obj (&opts
.deref_ref
, deref_refs_obj
))
701 if (!copy_py_bool_obj (&opts
.objectprint
, actual_objects_obj
))
703 if (!copy_py_bool_obj (&opts
.static_field_print
, static_members_obj
))
706 /* Numeric arguments for which 0 means unlimited (which we represent as
707 UINT_MAX). Note that the max-depth numeric argument uses -1 as
708 unlimited, and 0 is a valid choice. */
709 if (opts
.print_max
== 0)
710 opts
.print_max
= UINT_MAX
;
711 if (opts
.repeat_count_threshold
== 0)
712 opts
.repeat_count_threshold
= UINT_MAX
;
714 /* Other arguments. */
717 if (strlen (format
) == 1)
718 opts
.format
= format
[0];
721 /* Mimic the message on standard Python ones for similar
723 PyErr_SetString (PyExc_ValueError
,
724 "a single character is required");
733 common_val_print (((value_object
*) self
)->value
, &stb
, 0,
734 &opts
, python_language
);
736 catch (const gdb_exception
&except
)
738 GDB_PY_HANDLE_EXCEPTION (except
);
741 return PyUnicode_Decode (stb
.c_str (), stb
.size (), host_charset (), NULL
);
744 /* A helper function that implements the various cast operators. */
747 valpy_do_cast (PyObject
*self
, PyObject
*args
, enum exp_opcode op
)
749 PyObject
*type_obj
, *result
= NULL
;
752 if (! PyArg_ParseTuple (args
, "O", &type_obj
))
755 type
= type_object_to_type (type_obj
);
758 PyErr_SetString (PyExc_RuntimeError
,
759 _("Argument must be a type."));
765 struct value
*val
= ((value_object
*) self
)->value
;
766 struct value
*res_val
;
767 scoped_value_mark free_values
;
769 if (op
== UNOP_DYNAMIC_CAST
)
770 res_val
= value_dynamic_cast (type
, val
);
771 else if (op
== UNOP_REINTERPRET_CAST
)
772 res_val
= value_reinterpret_cast (type
, val
);
775 gdb_assert (op
== UNOP_CAST
);
776 res_val
= value_cast (type
, val
);
779 result
= value_to_value_object (res_val
);
781 catch (const gdb_exception
&except
)
783 GDB_PY_HANDLE_EXCEPTION (except
);
789 /* Implementation of the "cast" method. */
792 valpy_cast (PyObject
*self
, PyObject
*args
)
794 return valpy_do_cast (self
, args
, UNOP_CAST
);
797 /* Implementation of the "dynamic_cast" method. */
800 valpy_dynamic_cast (PyObject
*self
, PyObject
*args
)
802 return valpy_do_cast (self
, args
, UNOP_DYNAMIC_CAST
);
805 /* Implementation of the "reinterpret_cast" method. */
808 valpy_reinterpret_cast (PyObject
*self
, PyObject
*args
)
810 return valpy_do_cast (self
, args
, UNOP_REINTERPRET_CAST
);
814 valpy_length (PyObject
*self
)
816 /* We don't support getting the number of elements in a struct / class. */
817 PyErr_SetString (PyExc_NotImplementedError
,
818 _("Invalid operation on gdb.Value."));
822 /* Return 1 if the gdb.Field object FIELD is present in the value V.
823 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
826 value_has_field (struct value
*v
, PyObject
*field
)
828 struct type
*parent_type
, *val_type
;
829 enum type_code type_code
;
830 gdbpy_ref
<> type_object (PyObject_GetAttrString (field
, "parent_type"));
833 if (type_object
== NULL
)
836 parent_type
= type_object_to_type (type_object
.get ());
837 if (parent_type
== NULL
)
839 PyErr_SetString (PyExc_TypeError
,
840 _("'parent_type' attribute of gdb.Field object is not a"
841 "gdb.Type object."));
847 val_type
= value_type (v
);
848 val_type
= check_typedef (val_type
);
849 if (TYPE_IS_REFERENCE (val_type
) || val_type
->code () == TYPE_CODE_PTR
)
850 val_type
= check_typedef (TYPE_TARGET_TYPE (val_type
));
852 type_code
= val_type
->code ();
853 if ((type_code
== TYPE_CODE_STRUCT
|| type_code
== TYPE_CODE_UNION
)
854 && types_equal (val_type
, parent_type
))
859 catch (const gdb_exception
&except
)
861 GDB_PY_SET_HANDLE_EXCEPTION (except
);
867 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
868 Returns 1 if the flag value is true, 0 if it is false, and -1 if
869 a Python error occurs. */
872 get_field_flag (PyObject
*field
, const char *flag_name
)
874 gdbpy_ref
<> flag_object (PyObject_GetAttrString (field
, flag_name
));
876 if (flag_object
== NULL
)
879 return PyObject_IsTrue (flag_object
.get ());
882 /* Return the "type" attribute of a gdb.Field object.
883 Returns NULL on error, with a Python exception set. */
886 get_field_type (PyObject
*field
)
888 gdbpy_ref
<> ftype_obj (PyObject_GetAttrString (field
, "type"));
891 if (ftype_obj
== NULL
)
893 ftype
= type_object_to_type (ftype_obj
.get ());
895 PyErr_SetString (PyExc_TypeError
,
896 _("'type' attribute of gdb.Field object is not a "
897 "gdb.Type object."));
902 /* Given string name or a gdb.Field object corresponding to an element inside
903 a structure, return its value object. Returns NULL on error, with a python
907 valpy_getitem (PyObject
*self
, PyObject
*key
)
909 struct gdb_exception except
;
910 value_object
*self_value
= (value_object
*) self
;
911 gdb::unique_xmalloc_ptr
<char> field
;
912 struct type
*base_class_type
= NULL
, *field_type
= NULL
;
914 PyObject
*result
= NULL
;
916 if (gdbpy_is_string (key
))
918 field
= python_string_to_host_string (key
);
922 else if (gdbpy_is_field (key
))
924 int is_base_class
, valid_field
;
926 valid_field
= value_has_field (self_value
->value
, key
);
929 else if (valid_field
== 0)
931 PyErr_SetString (PyExc_TypeError
,
932 _("Invalid lookup for a field not contained in "
938 is_base_class
= get_field_flag (key
, "is_base_class");
939 if (is_base_class
< 0)
941 else if (is_base_class
> 0)
943 base_class_type
= get_field_type (key
);
944 if (base_class_type
== NULL
)
949 gdbpy_ref
<> name_obj (PyObject_GetAttrString (key
, "name"));
951 if (name_obj
== NULL
)
954 if (name_obj
!= Py_None
)
956 field
= python_string_to_host_string (name_obj
.get ());
962 if (!PyObject_HasAttrString (key
, "bitpos"))
964 PyErr_SetString (PyExc_AttributeError
,
965 _("gdb.Field object has no name and no "
966 "'bitpos' attribute."));
970 gdbpy_ref
<> bitpos_obj (PyObject_GetAttrString (key
, "bitpos"));
971 if (bitpos_obj
== NULL
)
973 if (!gdb_py_int_as_long (bitpos_obj
.get (), &bitpos
))
976 field_type
= get_field_type (key
);
977 if (field_type
== NULL
)
985 struct value
*tmp
= self_value
->value
;
986 struct value
*res_val
= NULL
;
987 scoped_value_mark free_values
;
990 res_val
= value_struct_elt (&tmp
, NULL
, field
.get (), NULL
,
991 "struct/class/union");
992 else if (bitpos
>= 0)
993 res_val
= value_struct_elt_bitpos (&tmp
, bitpos
, field_type
,
994 "struct/class/union");
995 else if (base_class_type
!= NULL
)
997 struct type
*val_type
;
999 val_type
= check_typedef (value_type (tmp
));
1000 if (val_type
->code () == TYPE_CODE_PTR
)
1001 res_val
= value_cast (lookup_pointer_type (base_class_type
), tmp
);
1002 else if (val_type
->code () == TYPE_CODE_REF
)
1003 res_val
= value_cast (lookup_lvalue_reference_type (base_class_type
),
1005 else if (val_type
->code () == TYPE_CODE_RVALUE_REF
)
1006 res_val
= value_cast (lookup_rvalue_reference_type (base_class_type
),
1009 res_val
= value_cast (base_class_type
, tmp
);
1013 /* Assume we are attempting an array access, and let the
1014 value code throw an exception if the index has an invalid
1016 struct value
*idx
= convert_value_from_python (key
);
1020 /* Check the value's type is something that can be accessed via
1024 tmp
= coerce_ref (tmp
);
1025 type
= check_typedef (value_type (tmp
));
1026 if (type
->code () != TYPE_CODE_ARRAY
1027 && type
->code () != TYPE_CODE_PTR
)
1028 error (_("Cannot subscript requested type."));
1030 res_val
= value_subscript (tmp
, value_as_long (idx
));
1035 result
= value_to_value_object (res_val
);
1037 catch (gdb_exception
&ex
)
1039 except
= std::move (ex
);
1042 GDB_PY_HANDLE_EXCEPTION (except
);
1048 valpy_setitem (PyObject
*self
, PyObject
*key
, PyObject
*value
)
1050 PyErr_Format (PyExc_NotImplementedError
,
1051 _("Setting of struct elements is not currently supported."));
1055 /* Called by the Python interpreter to perform an inferior function
1056 call on the value. Returns NULL on error, with a python exception set. */
1058 valpy_call (PyObject
*self
, PyObject
*args
, PyObject
*keywords
)
1060 Py_ssize_t args_count
;
1061 struct value
*function
= ((value_object
*) self
)->value
;
1062 struct value
**vargs
= NULL
;
1063 struct type
*ftype
= NULL
;
1064 PyObject
*result
= NULL
;
1068 ftype
= check_typedef (value_type (function
));
1070 catch (const gdb_exception
&except
)
1072 GDB_PY_HANDLE_EXCEPTION (except
);
1075 if (ftype
->code () != TYPE_CODE_FUNC
)
1077 PyErr_SetString (PyExc_RuntimeError
,
1078 _("Value is not callable (not TYPE_CODE_FUNC)."));
1082 if (! PyTuple_Check (args
))
1084 PyErr_SetString (PyExc_TypeError
,
1085 _("Inferior arguments must be provided in a tuple."));
1089 args_count
= PyTuple_Size (args
);
1094 vargs
= XALLOCAVEC (struct value
*, args_count
);
1095 for (i
= 0; i
< args_count
; i
++)
1097 PyObject
*item
= PyTuple_GetItem (args
, i
);
1102 vargs
[i
] = convert_value_from_python (item
);
1103 if (vargs
[i
] == NULL
)
1110 scoped_value_mark free_values
;
1113 = call_function_by_hand (function
, NULL
,
1114 gdb::make_array_view (vargs
, args_count
));
1115 result
= value_to_value_object (return_value
);
1117 catch (const gdb_exception
&except
)
1119 GDB_PY_HANDLE_EXCEPTION (except
);
1125 /* Called by the Python interpreter to obtain string representation
1128 valpy_str (PyObject
*self
)
1130 struct value_print_options opts
;
1132 get_user_print_options (&opts
);
1139 common_val_print (((value_object
*) self
)->value
, &stb
, 0,
1140 &opts
, python_language
);
1142 catch (const gdb_exception
&except
)
1144 GDB_PY_HANDLE_EXCEPTION (except
);
1147 return PyUnicode_Decode (stb
.c_str (), stb
.size (), host_charset (), NULL
);
1150 /* Implements gdb.Value.is_optimized_out. */
1152 valpy_get_is_optimized_out (PyObject
*self
, void *closure
)
1154 struct value
*value
= ((value_object
*) self
)->value
;
1159 opt
= value_optimized_out (value
);
1161 catch (const gdb_exception
&except
)
1163 GDB_PY_HANDLE_EXCEPTION (except
);
1172 /* Implements gdb.Value.is_lazy. */
1174 valpy_get_is_lazy (PyObject
*self
, void *closure
)
1176 struct value
*value
= ((value_object
*) self
)->value
;
1181 opt
= value_lazy (value
);
1183 catch (const gdb_exception
&except
)
1185 GDB_PY_HANDLE_EXCEPTION (except
);
1194 /* Implements gdb.Value.fetch_lazy (). */
1196 valpy_fetch_lazy (PyObject
*self
, PyObject
*args
)
1198 struct value
*value
= ((value_object
*) self
)->value
;
1202 if (value_lazy (value
))
1203 value_fetch_lazy (value
);
1205 catch (const gdb_exception
&except
)
1207 GDB_PY_HANDLE_EXCEPTION (except
);
1213 /* Calculate and return the address of the PyObject as the value of
1214 the builtin __hash__ call. */
1216 valpy_hash (PyObject
*self
)
1218 return (intptr_t) self
;
1236 /* If TYPE is a reference, return the target; otherwise return TYPE. */
1237 #define STRIP_REFERENCE(TYPE) \
1238 (TYPE_IS_REFERENCE (TYPE) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
1240 /* Helper for valpy_binop. Returns a value object which is the result
1241 of applying the operation specified by OPCODE to the given
1242 arguments. Throws a GDB exception on error. */
1245 valpy_binop_throw (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
1247 PyObject
*result
= NULL
;
1249 struct value
*arg1
, *arg2
;
1250 struct value
*res_val
= NULL
;
1251 enum exp_opcode op
= OP_NULL
;
1254 scoped_value_mark free_values
;
1256 /* If the gdb.Value object is the second operand, then it will be
1257 passed to us as the OTHER argument, and SELF will be an entirely
1258 different kind of object, altogether. Because of this, we can't
1259 assume self is a gdb.Value object and need to convert it from
1261 arg1
= convert_value_from_python (self
);
1265 arg2
= convert_value_from_python (other
);
1273 struct type
*ltype
= value_type (arg1
);
1274 struct type
*rtype
= value_type (arg2
);
1276 ltype
= check_typedef (ltype
);
1277 ltype
= STRIP_REFERENCE (ltype
);
1278 rtype
= check_typedef (rtype
);
1279 rtype
= STRIP_REFERENCE (rtype
);
1282 if (ltype
->code () == TYPE_CODE_PTR
1283 && is_integral_type (rtype
))
1284 res_val
= value_ptradd (arg1
, value_as_long (arg2
));
1285 else if (rtype
->code () == TYPE_CODE_PTR
1286 && is_integral_type (ltype
))
1287 res_val
= value_ptradd (arg2
, value_as_long (arg1
));
1297 struct type
*ltype
= value_type (arg1
);
1298 struct type
*rtype
= value_type (arg2
);
1300 ltype
= check_typedef (ltype
);
1301 ltype
= STRIP_REFERENCE (ltype
);
1302 rtype
= check_typedef (rtype
);
1303 rtype
= STRIP_REFERENCE (rtype
);
1306 if (ltype
->code () == TYPE_CODE_PTR
1307 && rtype
->code () == TYPE_CODE_PTR
)
1308 /* A ptrdiff_t for the target would be preferable here. */
1309 res_val
= value_from_longest (builtin_type_pyint
,
1310 value_ptrdiff (arg1
, arg2
));
1311 else if (ltype
->code () == TYPE_CODE_PTR
1312 && is_integral_type (rtype
))
1313 res_val
= value_ptradd (arg1
, - value_as_long (arg2
));
1340 op
= BINOP_BITWISE_AND
;
1343 op
= BINOP_BITWISE_IOR
;
1346 op
= BINOP_BITWISE_XOR
;
1352 if (binop_user_defined_p (op
, arg1
, arg2
))
1353 res_val
= value_x_binop (arg1
, arg2
, op
, OP_NULL
, EVAL_NORMAL
);
1355 res_val
= value_binop (arg1
, arg2
, op
);
1359 result
= value_to_value_object (res_val
);
1364 /* Returns a value object which is the result of applying the operation
1365 specified by OPCODE to the given arguments. Returns NULL on error, with
1366 a python exception set. */
1368 valpy_binop (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
1370 PyObject
*result
= NULL
;
1374 result
= valpy_binop_throw (opcode
, self
, other
);
1376 catch (const gdb_exception
&except
)
1378 GDB_PY_HANDLE_EXCEPTION (except
);
1385 valpy_add (PyObject
*self
, PyObject
*other
)
1387 return valpy_binop (VALPY_ADD
, self
, other
);
1391 valpy_subtract (PyObject
*self
, PyObject
*other
)
1393 return valpy_binop (VALPY_SUB
, self
, other
);
1397 valpy_multiply (PyObject
*self
, PyObject
*other
)
1399 return valpy_binop (VALPY_MUL
, self
, other
);
1403 valpy_divide (PyObject
*self
, PyObject
*other
)
1405 return valpy_binop (VALPY_DIV
, self
, other
);
1409 valpy_remainder (PyObject
*self
, PyObject
*other
)
1411 return valpy_binop (VALPY_REM
, self
, other
);
1415 valpy_power (PyObject
*self
, PyObject
*other
, PyObject
*unused
)
1417 /* We don't support the ternary form of pow. I don't know how to express
1418 that, so let's just throw NotImplementedError to at least do something
1420 if (unused
!= Py_None
)
1422 PyErr_SetString (PyExc_NotImplementedError
,
1423 "Invalid operation on gdb.Value.");
1427 return valpy_binop (VALPY_POW
, self
, other
);
1431 valpy_negative (PyObject
*self
)
1433 PyObject
*result
= NULL
;
1437 /* Perhaps overkill, but consistency has some virtue. */
1438 scoped_value_mark free_values
;
1441 val
= value_neg (((value_object
*) self
)->value
);
1442 result
= value_to_value_object (val
);
1444 catch (const gdb_exception
&except
)
1446 GDB_PY_HANDLE_EXCEPTION (except
);
1453 valpy_positive (PyObject
*self
)
1455 return value_to_value_object (((value_object
*) self
)->value
);
1459 valpy_absolute (PyObject
*self
)
1461 struct value
*value
= ((value_object
*) self
)->value
;
1466 scoped_value_mark free_values
;
1468 if (value_less (value
, value_zero (value_type (value
), not_lval
)))
1471 catch (const gdb_exception
&except
)
1473 GDB_PY_HANDLE_EXCEPTION (except
);
1477 return valpy_positive (self
);
1479 return valpy_negative (self
);
1482 /* Implements boolean evaluation of gdb.Value. */
1484 valpy_nonzero (PyObject
*self
)
1486 struct gdb_exception except
;
1487 value_object
*self_value
= (value_object
*) self
;
1489 int nonzero
= 0; /* Appease GCC warning. */
1493 type
= check_typedef (value_type (self_value
->value
));
1495 if (is_integral_type (type
) || type
->code () == TYPE_CODE_PTR
)
1496 nonzero
= !!value_as_long (self_value
->value
);
1497 else if (is_floating_value (self_value
->value
))
1498 nonzero
= !target_float_is_zero (value_contents (self_value
->value
),
1501 /* All other values are True. */
1504 catch (gdb_exception
&ex
)
1506 except
= std::move (ex
);
1509 /* This is not documented in the Python documentation, but if this
1510 function fails, return -1 as slot_nb_nonzero does (the default
1511 Python nonzero function). */
1512 GDB_PY_SET_HANDLE_EXCEPTION (except
);
1517 /* Implements ~ for value objects. */
1519 valpy_invert (PyObject
*self
)
1521 struct value
*val
= NULL
;
1525 val
= value_complement (((value_object
*) self
)->value
);
1527 catch (const gdb_exception
&except
)
1529 GDB_PY_HANDLE_EXCEPTION (except
);
1532 return value_to_value_object (val
);
1535 /* Implements left shift for value objects. */
1537 valpy_lsh (PyObject
*self
, PyObject
*other
)
1539 return valpy_binop (VALPY_LSH
, self
, other
);
1542 /* Implements right shift for value objects. */
1544 valpy_rsh (PyObject
*self
, PyObject
*other
)
1546 return valpy_binop (VALPY_RSH
, self
, other
);
1549 /* Implements bitwise and for value objects. */
1551 valpy_and (PyObject
*self
, PyObject
*other
)
1553 return valpy_binop (VALPY_BITAND
, self
, other
);
1556 /* Implements bitwise or for value objects. */
1558 valpy_or (PyObject
*self
, PyObject
*other
)
1560 return valpy_binop (VALPY_BITOR
, self
, other
);
1563 /* Implements bitwise xor for value objects. */
1565 valpy_xor (PyObject
*self
, PyObject
*other
)
1567 return valpy_binop (VALPY_BITXOR
, self
, other
);
1570 /* Helper for valpy_richcompare. Implements comparison operations for
1571 value objects. Returns true/false on success. Returns -1 with a
1572 Python exception set if a Python error is detected. Throws a GDB
1573 exception on other errors (memory error, etc.). */
1576 valpy_richcompare_throw (PyObject
*self
, PyObject
*other
, int op
)
1579 struct value
*value_other
;
1580 struct value
*value_self
;
1582 scoped_value_mark free_values
;
1584 value_other
= convert_value_from_python (other
);
1585 if (value_other
== NULL
)
1588 value_self
= ((value_object
*) self
)->value
;
1593 result
= value_less (value_self
, value_other
);
1596 result
= value_less (value_self
, value_other
)
1597 || value_equal (value_self
, value_other
);
1600 result
= value_equal (value_self
, value_other
);
1603 result
= !value_equal (value_self
, value_other
);
1606 result
= value_less (value_other
, value_self
);
1609 result
= (value_less (value_other
, value_self
)
1610 || value_equal (value_self
, value_other
));
1614 PyErr_SetString (PyExc_NotImplementedError
,
1615 _("Invalid operation on gdb.Value."));
1624 /* Implements comparison operations for value objects. Returns NULL on error,
1625 with a python exception set. */
1627 valpy_richcompare (PyObject
*self
, PyObject
*other
, int op
)
1631 if (other
== Py_None
)
1632 /* Comparing with None is special. From what I can tell, in Python
1633 None is smaller than anything else. */
1645 PyErr_SetString (PyExc_NotImplementedError
,
1646 _("Invalid operation on gdb.Value."));
1652 result
= valpy_richcompare_throw (self
, other
, op
);
1654 catch (const gdb_exception
&except
)
1656 GDB_PY_HANDLE_EXCEPTION (except
);
1659 /* In this case, the Python exception has already been set. */
1670 /* Implements conversion to int. */
1672 valpy_int (PyObject
*self
)
1674 struct value
*value
= ((value_object
*) self
)->value
;
1675 struct type
*type
= value_type (value
);
1680 if (is_floating_value (value
))
1682 type
= builtin_type_pylong
;
1683 value
= value_cast (type
, value
);
1686 if (!is_integral_type (type
)
1687 && type
->code () != TYPE_CODE_PTR
)
1688 error (_("Cannot convert value to int."));
1690 l
= value_as_long (value
);
1692 catch (const gdb_exception
&except
)
1694 GDB_PY_HANDLE_EXCEPTION (except
);
1697 if (TYPE_UNSIGNED (type
))
1698 return gdb_py_object_from_ulongest (l
).release ();
1700 return gdb_py_object_from_longest (l
).release ();
1704 /* Implements conversion to long. */
1706 valpy_long (PyObject
*self
)
1708 struct value
*value
= ((value_object
*) self
)->value
;
1709 struct type
*type
= value_type (value
);
1714 if (is_floating_value (value
))
1716 type
= builtin_type_pylong
;
1717 value
= value_cast (type
, value
);
1720 type
= check_typedef (type
);
1722 if (!is_integral_type (type
)
1723 && type
->code () != TYPE_CODE_PTR
)
1724 error (_("Cannot convert value to long."));
1726 l
= value_as_long (value
);
1728 catch (const gdb_exception
&except
)
1730 GDB_PY_HANDLE_EXCEPTION (except
);
1733 if (TYPE_UNSIGNED (type
))
1734 return gdb_py_long_from_ulongest (l
);
1736 return gdb_py_long_from_longest (l
);
1739 /* Implements conversion to float. */
1741 valpy_float (PyObject
*self
)
1743 struct value
*value
= ((value_object
*) self
)->value
;
1744 struct type
*type
= value_type (value
);
1749 type
= check_typedef (type
);
1751 if (type
->code () == TYPE_CODE_FLT
&& is_floating_value (value
))
1752 d
= target_float_to_host_double (value_contents (value
), type
);
1753 else if (type
->code () == TYPE_CODE_INT
)
1755 /* Note that valpy_long accepts TYPE_CODE_PTR and some
1756 others here here -- but casting a pointer or bool to a
1757 float seems wrong. */
1758 d
= value_as_long (value
);
1761 error (_("Cannot convert value to float."));
1763 catch (const gdb_exception
&except
)
1765 GDB_PY_HANDLE_EXCEPTION (except
);
1768 return PyFloat_FromDouble (d
);
1771 /* Returns an object for a value which is released from the all_values chain,
1772 so its lifetime is not bound to the execution of a command. */
1774 value_to_value_object (struct value
*val
)
1776 value_object
*val_obj
;
1778 val_obj
= PyObject_New (value_object
, &value_object_type
);
1779 if (val_obj
!= NULL
)
1781 val_obj
->value
= release_value (val
).release ();
1782 val_obj
->address
= NULL
;
1783 val_obj
->type
= NULL
;
1784 val_obj
->dynamic_type
= NULL
;
1785 note_value (val_obj
);
1788 return (PyObject
*) val_obj
;
1791 /* Returns an object for a value, but without releasing it from the
1792 all_values chain. */
1794 value_to_value_object_no_release (struct value
*val
)
1796 value_object
*val_obj
;
1798 val_obj
= PyObject_New (value_object
, &value_object_type
);
1799 if (val_obj
!= NULL
)
1802 val_obj
->value
= val
;
1803 val_obj
->address
= NULL
;
1804 val_obj
->type
= NULL
;
1805 val_obj
->dynamic_type
= NULL
;
1806 note_value (val_obj
);
1809 return (PyObject
*) val_obj
;
1812 /* Returns a borrowed reference to the struct value corresponding to
1813 the given value object. */
1815 value_object_to_value (PyObject
*self
)
1819 if (! PyObject_TypeCheck (self
, &value_object_type
))
1821 real
= (value_object
*) self
;
1825 /* Try to convert a Python value to a gdb value. If the value cannot
1826 be converted, set a Python exception and return NULL. Returns a
1827 reference to a new value on the all_values chain. */
1830 convert_value_from_python (PyObject
*obj
)
1832 struct value
*value
= NULL
; /* -Wall */
1835 gdb_assert (obj
!= NULL
);
1839 if (PyBool_Check (obj
))
1841 cmp
= PyObject_IsTrue (obj
);
1843 value
= value_from_longest (builtin_type_pybool
, cmp
);
1845 /* Make a long logic check first. In Python 3.x, internally,
1846 all integers are represented as longs. In Python 2.x, there
1847 is still a differentiation internally between a PyInt and a
1848 PyLong. Explicitly do this long check conversion first. In
1849 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1850 to be done first to ensure we do not lose information in the
1851 conversion process. */
1852 else if (PyLong_Check (obj
))
1854 LONGEST l
= PyLong_AsLongLong (obj
);
1856 if (PyErr_Occurred ())
1858 /* If the error was an overflow, we can try converting to
1859 ULONGEST instead. */
1860 if (PyErr_ExceptionMatches (PyExc_OverflowError
))
1862 gdbpy_err_fetch fetched_error
;
1863 gdbpy_ref
<> zero (PyInt_FromLong (0));
1865 /* Check whether obj is positive. */
1866 if (PyObject_RichCompareBool (obj
, zero
.get (), Py_GT
) > 0)
1870 ul
= PyLong_AsUnsignedLongLong (obj
);
1871 if (! PyErr_Occurred ())
1872 value
= value_from_ulongest (builtin_type_upylong
, ul
);
1876 /* There's nothing we can do. */
1877 fetched_error
.restore ();
1882 value
= value_from_longest (builtin_type_pylong
, l
);
1884 #if PY_MAJOR_VERSION == 2
1885 else if (PyInt_Check (obj
))
1887 long l
= PyInt_AsLong (obj
);
1889 if (! PyErr_Occurred ())
1890 value
= value_from_longest (builtin_type_pyint
, l
);
1893 else if (PyFloat_Check (obj
))
1895 double d
= PyFloat_AsDouble (obj
);
1897 if (! PyErr_Occurred ())
1898 value
= value_from_host_double (builtin_type_pyfloat
, d
);
1900 else if (gdbpy_is_string (obj
))
1902 gdb::unique_xmalloc_ptr
<char> s
1903 = python_string_to_target_string (obj
);
1905 value
= value_cstring (s
.get (), strlen (s
.get ()),
1906 builtin_type_pychar
);
1908 else if (PyObject_TypeCheck (obj
, &value_object_type
))
1909 value
= value_copy (((value_object
*) obj
)->value
);
1910 else if (gdbpy_is_lazy_string (obj
))
1914 result
= PyObject_CallMethodObjArgs (obj
, gdbpy_value_cst
, NULL
);
1915 value
= value_copy (((value_object
*) result
)->value
);
1919 PyErr_Format (PyExc_TypeError
,
1920 _("Could not convert Python object: %S."), obj
);
1922 PyErr_Format (PyExc_TypeError
,
1923 _("Could not convert Python object: %s."),
1924 PyString_AsString (PyObject_Str (obj
)));
1927 catch (const gdb_exception
&except
)
1929 gdbpy_convert_exception (except
);
1936 /* Returns value object in the ARGth position in GDB's history. */
1938 gdbpy_history (PyObject
*self
, PyObject
*args
)
1941 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
1943 if (!PyArg_ParseTuple (args
, "i", &i
))
1948 res_val
= access_value_history (i
);
1950 catch (const gdb_exception
&except
)
1952 GDB_PY_HANDLE_EXCEPTION (except
);
1955 return value_to_value_object (res_val
);
1958 /* Return the value of a convenience variable. */
1960 gdbpy_convenience_variable (PyObject
*self
, PyObject
*args
)
1962 const char *varname
;
1963 struct value
*res_val
= NULL
;
1965 if (!PyArg_ParseTuple (args
, "s", &varname
))
1970 struct internalvar
*var
= lookup_only_internalvar (varname
);
1974 res_val
= value_of_internalvar (python_gdbarch
, var
);
1975 if (value_type (res_val
)->code () == TYPE_CODE_VOID
)
1979 catch (const gdb_exception
&except
)
1981 GDB_PY_HANDLE_EXCEPTION (except
);
1984 if (res_val
== NULL
)
1987 return value_to_value_object (res_val
);
1990 /* Set the value of a convenience variable. */
1992 gdbpy_set_convenience_variable (PyObject
*self
, PyObject
*args
)
1994 const char *varname
;
1995 PyObject
*value_obj
;
1996 struct value
*value
= NULL
;
1998 if (!PyArg_ParseTuple (args
, "sO", &varname
, &value_obj
))
2001 /* None means to clear the variable. */
2002 if (value_obj
!= Py_None
)
2004 value
= convert_value_from_python (value_obj
);
2013 struct internalvar
*var
= lookup_only_internalvar (varname
);
2016 clear_internalvar (var
);
2020 struct internalvar
*var
= lookup_internalvar (varname
);
2022 set_internalvar (var
, value
);
2025 catch (const gdb_exception
&except
)
2027 GDB_PY_HANDLE_EXCEPTION (except
);
2033 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
2036 gdbpy_is_value_object (PyObject
*obj
)
2038 return PyObject_TypeCheck (obj
, &value_object_type
);
2042 gdbpy_initialize_values (void)
2044 if (PyType_Ready (&value_object_type
) < 0)
2047 return gdb_pymodule_addobject (gdb_module
, "Value",
2048 (PyObject
*) &value_object_type
);
2053 static gdb_PyGetSetDef value_object_getset
[] = {
2054 { "address", valpy_get_address
, NULL
, "The address of the value.",
2056 { "is_optimized_out", valpy_get_is_optimized_out
, NULL
,
2057 "Boolean telling whether the value is optimized "
2058 "out (i.e., not available).",
2060 { "type", valpy_get_type
, NULL
, "Type of the value.", NULL
},
2061 { "dynamic_type", valpy_get_dynamic_type
, NULL
,
2062 "Dynamic type of the value.", NULL
},
2063 { "is_lazy", valpy_get_is_lazy
, NULL
,
2064 "Boolean telling whether the value is lazy (not fetched yet\n\
2065 from the inferior). A lazy value is fetched when needed, or when\n\
2066 the \"fetch_lazy()\" method is called.", NULL
},
2067 {NULL
} /* Sentinel */
2070 static PyMethodDef value_object_methods
[] = {
2071 { "cast", valpy_cast
, METH_VARARGS
, "Cast the value to the supplied type." },
2072 { "dynamic_cast", valpy_dynamic_cast
, METH_VARARGS
,
2073 "dynamic_cast (gdb.Type) -> gdb.Value\n\
2074 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
2076 { "reinterpret_cast", valpy_reinterpret_cast
, METH_VARARGS
,
2077 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
2078 Cast the value to the supplied type, as if by the C++\n\
2079 reinterpret_cast operator."
2081 { "dereference", valpy_dereference
, METH_NOARGS
, "Dereferences the value." },
2082 { "referenced_value", valpy_referenced_value
, METH_NOARGS
,
2083 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
2084 { "reference_value", valpy_lvalue_reference_value
, METH_NOARGS
,
2085 "Return a value of type TYPE_CODE_REF referencing this value." },
2086 { "rvalue_reference_value", valpy_rvalue_reference_value
, METH_NOARGS
,
2087 "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
2088 { "const_value", valpy_const_value
, METH_NOARGS
,
2089 "Return a 'const' qualied version of the same value." },
2090 { "lazy_string", (PyCFunction
) valpy_lazy_string
,
2091 METH_VARARGS
| METH_KEYWORDS
,
2092 "lazy_string ([encoding] [, length]) -> lazy_string\n\
2093 Return a lazy string representation of the value." },
2094 { "string", (PyCFunction
) valpy_string
, METH_VARARGS
| METH_KEYWORDS
,
2095 "string ([encoding] [, errors] [, length]) -> string\n\
2096 Return Unicode string representation of the value." },
2097 { "fetch_lazy", valpy_fetch_lazy
, METH_NOARGS
,
2098 "Fetches the value from the inferior, if it was lazy." },
2099 { "format_string", (PyCFunction
) valpy_format_string
,
2100 METH_VARARGS
| METH_KEYWORDS
,
2101 "format_string (...) -> string\n\
2102 Return a string representation of the value using the specified\n\
2103 formatting options" },
2104 {NULL
} /* Sentinel */
2107 static PyNumberMethods value_object_as_number
= {
2115 NULL
, /* nb_divmod */
2116 valpy_power
, /* nb_power */
2117 valpy_negative
, /* nb_negative */
2118 valpy_positive
, /* nb_positive */
2119 valpy_absolute
, /* nb_absolute */
2120 valpy_nonzero
, /* nb_nonzero */
2121 valpy_invert
, /* nb_invert */
2122 valpy_lsh
, /* nb_lshift */
2123 valpy_rsh
, /* nb_rshift */
2124 valpy_and
, /* nb_and */
2125 valpy_xor
, /* nb_xor */
2126 valpy_or
, /* nb_or */
2128 valpy_long
, /* nb_int */
2129 NULL
, /* reserved */
2131 NULL
, /* nb_coerce */
2132 valpy_int
, /* nb_int */
2133 valpy_long
, /* nb_long */
2135 valpy_float
, /* nb_float */
2140 NULL
, /* nb_inplace_add */
2141 NULL
, /* nb_inplace_subtract */
2142 NULL
, /* nb_inplace_multiply */
2144 NULL
, /* nb_inplace_divide */
2146 NULL
, /* nb_inplace_remainder */
2147 NULL
, /* nb_inplace_power */
2148 NULL
, /* nb_inplace_lshift */
2149 NULL
, /* nb_inplace_rshift */
2150 NULL
, /* nb_inplace_and */
2151 NULL
, /* nb_inplace_xor */
2152 NULL
, /* nb_inplace_or */
2153 NULL
, /* nb_floor_divide */
2154 valpy_divide
, /* nb_true_divide */
2155 NULL
, /* nb_inplace_floor_divide */
2156 NULL
, /* nb_inplace_true_divide */
2157 valpy_long
, /* nb_index */
2160 static PyMappingMethods value_object_as_mapping
= {
2166 PyTypeObject value_object_type
= {
2167 PyVarObject_HEAD_INIT (NULL
, 0)
2168 "gdb.Value", /*tp_name*/
2169 sizeof (value_object
), /*tp_basicsize*/
2171 valpy_dealloc
, /*tp_dealloc*/
2177 &value_object_as_number
, /*tp_as_number*/
2178 0, /*tp_as_sequence*/
2179 &value_object_as_mapping
, /*tp_as_mapping*/
2180 valpy_hash
, /*tp_hash*/
2181 valpy_call
, /*tp_call*/
2182 valpy_str
, /*tp_str*/
2186 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_CHECKTYPES
2187 | Py_TPFLAGS_BASETYPE
, /*tp_flags*/
2188 "GDB value object", /* tp_doc */
2189 0, /* tp_traverse */
2191 valpy_richcompare
, /* tp_richcompare */
2192 0, /* tp_weaklistoffset */
2194 0, /* tp_iternext */
2195 value_object_methods
, /* tp_methods */
2197 value_object_getset
, /* tp_getset */
2200 0, /* tp_descr_get */
2201 0, /* tp_descr_set */
2202 0, /* tp_dictoffset */
2205 valpy_new
/* tp_new */