More updated translations
[binutils-gdb.git] / gdb / python / py-value.c
blob02c50b48fd2e10eed6298265675f96863bc89317
1 /* Python interface to values.
3 Copyright (C) 2008-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "top.h"
21 #include "charset.h"
22 #include "value.h"
23 #include "language.h"
24 #include "target-float.h"
25 #include "valprint.h"
26 #include "infcall.h"
27 #include "expression.h"
28 #include "cp-abi.h"
29 #include "python.h"
30 #include "ada-lang.h"
32 #include "python-internal.h"
34 /* Even though Python scalar types directly map to host types, we use
35 target types here to remain consistent with the values system in
36 GDB (which uses target arithmetic). */
38 /* Python's integer type corresponds to C's long type. */
39 #define builtin_type_pyint \
40 builtin_type (gdbpy_enter::get_gdbarch ())->builtin_long
42 /* Python's float type corresponds to C's double type. */
43 #define builtin_type_pyfloat \
44 builtin_type (gdbpy_enter::get_gdbarch ())->builtin_double
46 /* Python's long type corresponds to C's long long type. */
47 #define builtin_type_pylong \
48 builtin_type (gdbpy_enter::get_gdbarch ())->builtin_long_long
50 /* Python's long type corresponds to C's long long type. Unsigned version. */
51 #define builtin_type_upylong builtin_type \
52 (gdbpy_enter::get_gdbarch ())->builtin_unsigned_long_long
54 #define builtin_type_pybool \
55 language_bool_type (current_language, gdbpy_enter::get_gdbarch ())
57 struct value_object {
58 PyObject_HEAD
59 struct value_object *next;
60 struct value_object *prev;
61 struct value *value;
62 PyObject *address;
63 PyObject *type;
64 PyObject *dynamic_type;
65 PyObject *content_bytes;
68 /* List of all values which are currently exposed to Python. It is
69 maintained so that when an objfile is discarded, preserve_values
70 can copy the values' types if needed. */
71 /* This variable is unnecessarily initialized to NULL in order to
72 work around a linker bug on MacOS. */
73 static value_object *values_in_python = NULL;
75 /* Clear out an old GDB value stored within SELF, and reset the fields to
76 nullptr. This should be called when a gdb.Value is deallocated, and
77 also if a gdb.Value is reinitialized with a new value. */
79 static void
80 valpy_clear_value (value_object *self)
82 /* Indicate we are no longer interested in the value object. */
83 self->value->decref ();
84 self->value = nullptr;
86 Py_CLEAR (self->address);
87 Py_CLEAR (self->type);
88 Py_CLEAR (self->dynamic_type);
89 Py_CLEAR (self->content_bytes);
92 /* Called by the Python interpreter when deallocating a value object. */
93 static void
94 valpy_dealloc (PyObject *obj)
96 value_object *self = (value_object *) obj;
98 /* If SELF failed to initialize correctly then it may not have a value
99 contained within it. */
100 if (self->value != nullptr)
102 /* Remove SELF from the global list of values. */
103 if (self->prev != nullptr)
104 self->prev->next = self->next;
105 else
107 gdb_assert (values_in_python == self);
108 values_in_python = self->next;
110 if (self->next != nullptr)
111 self->next->prev = self->prev;
113 /* Release the value object and any cached Python objects. */
114 valpy_clear_value (self);
117 Py_TYPE (self)->tp_free (self);
120 /* Helper to push a gdb.Value object on to the global list of values. If
121 VALUE_OBJ is already on the lit then this does nothing. */
123 static void
124 note_value (value_object *value_obj)
126 if (value_obj->next == nullptr)
128 gdb_assert (value_obj->prev == nullptr);
129 value_obj->next = values_in_python;
130 if (value_obj->next != nullptr)
131 value_obj->next->prev = value_obj;
132 values_in_python = value_obj;
136 /* Convert a python object OBJ with type TYPE to a gdb value. The
137 python object in question must conform to the python buffer
138 protocol. On success, return the converted value, otherwise
139 nullptr. When REQUIRE_EXACT_SIZE_P is true the buffer OBJ must be the
140 exact length of TYPE. When REQUIRE_EXACT_SIZE_P is false then the
141 buffer OBJ can be longer than TYPE, in which case only the least
142 significant bytes from the buffer are used. */
144 static struct value *
145 convert_buffer_and_type_to_value (PyObject *obj, struct type *type,
146 bool require_exact_size_p)
148 Py_buffer_up buffer_up;
149 Py_buffer py_buf;
151 if (PyObject_CheckBuffer (obj)
152 && PyObject_GetBuffer (obj, &py_buf, PyBUF_SIMPLE) == 0)
154 /* Got a buffer, py_buf, out of obj. Cause it to be released
155 when it goes out of scope. */
156 buffer_up.reset (&py_buf);
158 else
160 PyErr_SetString (PyExc_TypeError,
161 _("Object must support the python buffer protocol."));
162 return nullptr;
165 if (require_exact_size_p && type->length () != py_buf.len)
167 PyErr_SetString (PyExc_ValueError,
168 _("Size of type is not equal to that of buffer object."));
169 return nullptr;
171 else if (!require_exact_size_p && type->length () > py_buf.len)
173 PyErr_SetString (PyExc_ValueError,
174 _("Size of type is larger than that of buffer object."));
175 return nullptr;
178 return value_from_contents (type, (const gdb_byte *) py_buf.buf);
181 /* Implement gdb.Value.__init__. */
183 static int
184 valpy_init (PyObject *self, PyObject *args, PyObject *kwds)
186 static const char *keywords[] = { "val", "type", NULL };
187 PyObject *val_obj = nullptr;
188 PyObject *type_obj = nullptr;
190 if (!gdb_PyArg_ParseTupleAndKeywords (args, kwds, "O|O", keywords,
191 &val_obj, &type_obj))
192 return -1;
194 struct type *type = nullptr;
195 if (type_obj != nullptr && type_obj != Py_None)
197 type = type_object_to_type (type_obj);
198 if (type == nullptr)
200 PyErr_SetString (PyExc_TypeError,
201 _("type argument must be a gdb.Type."));
202 return -1;
206 struct value *value;
207 if (type == nullptr)
208 value = convert_value_from_python (val_obj);
209 else
210 value = convert_buffer_and_type_to_value (val_obj, type, false);
211 if (value == nullptr)
213 gdb_assert (PyErr_Occurred ());
214 return -1;
217 /* There might be a previous value here. */
218 value_object *value_obj = (value_object *) self;
219 if (value_obj->value != nullptr)
220 valpy_clear_value (value_obj);
222 /* Store the value into this Python object. */
223 value_obj->value = release_value (value).release ();
225 /* Ensure that this gdb.Value is in the set of all gdb.Value objects. If
226 we are already in the set then this is call does nothing. */
227 note_value (value_obj);
229 return 0;
232 /* Iterate over all the Value objects, calling preserve_one_value on
233 each. */
234 void
235 gdbpy_preserve_values (const struct extension_language_defn *extlang,
236 struct objfile *objfile,
237 copied_types_hash_t &copied_types)
239 value_object *iter;
241 for (iter = values_in_python; iter; iter = iter->next)
242 iter->value->preserve (objfile, copied_types);
245 /* Given a value of a pointer type, apply the C unary * operator to it. */
246 static PyObject *
247 valpy_dereference (PyObject *self, PyObject *args)
249 PyObject *result = NULL;
253 struct value *res_val;
254 scoped_value_mark free_values;
256 res_val = value_ind (((value_object *) self)->value);
257 result = value_to_value_object (res_val);
259 catch (const gdb_exception &except)
261 return gdbpy_handle_gdb_exception (nullptr, except);
264 return result;
267 /* Given a value of a pointer type or a reference type, return the value
268 referenced. The difference between this function and valpy_dereference is
269 that the latter applies * unary operator to a value, which need not always
270 result in the value referenced. For example, for a value which is a reference
271 to an 'int' pointer ('int *'), valpy_dereference will result in a value of
272 type 'int' while valpy_referenced_value will result in a value of type
273 'int *'. */
275 static PyObject *
276 valpy_referenced_value (PyObject *self, PyObject *args)
278 PyObject *result = NULL;
282 struct value *self_val, *res_val;
283 scoped_value_mark free_values;
285 self_val = ((value_object *) self)->value;
286 switch (check_typedef (self_val->type ())->code ())
288 case TYPE_CODE_PTR:
289 res_val = value_ind (self_val);
290 break;
291 case TYPE_CODE_REF:
292 case TYPE_CODE_RVALUE_REF:
293 res_val = coerce_ref (self_val);
294 break;
295 default:
296 error(_("Trying to get the referenced value from a value which is "
297 "neither a pointer nor a reference."));
300 result = value_to_value_object (res_val);
302 catch (const gdb_exception &except)
304 return gdbpy_handle_gdb_exception (nullptr, except);
307 return result;
310 /* Return a value which is a reference to the value. */
312 static PyObject *
313 valpy_reference_value (PyObject *self, PyObject *args, enum type_code refcode)
315 PyObject *result = NULL;
319 struct value *self_val;
320 scoped_value_mark free_values;
322 self_val = ((value_object *) self)->value;
323 result = value_to_value_object (value_ref (self_val, refcode));
325 catch (const gdb_exception &except)
327 return gdbpy_handle_gdb_exception (nullptr, except);
330 return result;
333 static PyObject *
334 valpy_lvalue_reference_value (PyObject *self, PyObject *args)
336 return valpy_reference_value (self, args, TYPE_CODE_REF);
339 static PyObject *
340 valpy_rvalue_reference_value (PyObject *self, PyObject *args)
342 return valpy_reference_value (self, args, TYPE_CODE_RVALUE_REF);
345 /* Implement Value.to_array. */
347 static PyObject *
348 valpy_to_array (PyObject *self, PyObject *args)
350 PyObject *result = nullptr;
354 struct value *val = ((value_object *) self)->value;
355 struct type *type = check_typedef (val->type ());
357 if (type->code () == TYPE_CODE_ARRAY)
359 result = self;
360 Py_INCREF (result);
362 else
364 val = value_to_array (val);
365 if (val == nullptr)
366 PyErr_SetString (PyExc_TypeError, _("Value is not array-like."));
367 else
368 result = value_to_value_object (val);
371 catch (const gdb_exception &except)
373 return gdbpy_handle_gdb_exception (nullptr, except);
376 return result;
379 /* Return a "const" qualified version of the value. */
381 static PyObject *
382 valpy_const_value (PyObject *self, PyObject *args)
384 PyObject *result = NULL;
388 struct value *self_val, *res_val;
389 scoped_value_mark free_values;
391 self_val = ((value_object *) self)->value;
392 res_val = make_cv_value (1, 0, self_val);
393 result = value_to_value_object (res_val);
395 catch (const gdb_exception &except)
397 return gdbpy_handle_gdb_exception (nullptr, except);
400 return result;
403 /* Return "&value". */
404 static PyObject *
405 valpy_get_address (PyObject *self, void *closure)
407 value_object *val_obj = (value_object *) self;
409 if (!val_obj->address)
413 struct value *res_val;
414 scoped_value_mark free_values;
416 res_val = value_addr (val_obj->value);
417 val_obj->address = value_to_value_object (res_val);
419 catch (const gdb_exception_forced_quit &except)
421 quit_force (NULL, 0);
423 catch (const gdb_exception &except)
425 val_obj->address = Py_None;
426 Py_INCREF (Py_None);
430 Py_XINCREF (val_obj->address);
432 return val_obj->address;
435 /* Return type of the value. */
436 static PyObject *
437 valpy_get_type (PyObject *self, void *closure)
439 value_object *obj = (value_object *) self;
441 if (!obj->type)
443 obj->type = type_to_type_object (obj->value->type ());
444 if (!obj->type)
445 return NULL;
447 Py_INCREF (obj->type);
448 return obj->type;
451 /* Return dynamic type of the value. */
453 static PyObject *
454 valpy_get_dynamic_type (PyObject *self, void *closure)
456 value_object *obj = (value_object *) self;
457 struct type *type = NULL;
459 if (obj->dynamic_type != NULL)
461 Py_INCREF (obj->dynamic_type);
462 return obj->dynamic_type;
467 struct value *val = obj->value;
468 scoped_value_mark free_values;
470 type = val->type ();
471 type = check_typedef (type);
473 if (type->is_pointer_or_reference ()
474 && (type->target_type ()->code () == TYPE_CODE_STRUCT))
476 struct value *target;
477 int was_pointer = type->code () == TYPE_CODE_PTR;
479 if (was_pointer)
480 target = value_ind (val);
481 else
482 target = coerce_ref (val);
483 type = value_rtti_type (target, NULL, NULL, NULL);
485 if (type)
487 if (was_pointer)
488 type = lookup_pointer_type (type);
489 else
490 type = lookup_lvalue_reference_type (type);
493 else if (type->code () == TYPE_CODE_STRUCT)
494 type = value_rtti_type (val, NULL, NULL, NULL);
495 else
497 /* Re-use object's static type. */
498 type = NULL;
501 catch (const gdb_exception &except)
503 return gdbpy_handle_gdb_exception (nullptr, except);
506 if (type == NULL)
507 obj->dynamic_type = valpy_get_type (self, NULL);
508 else
509 obj->dynamic_type = type_to_type_object (type);
511 Py_XINCREF (obj->dynamic_type);
512 return obj->dynamic_type;
515 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
516 string. Return a PyObject representing a lazy_string_object type.
517 A lazy string is a pointer to a string with an optional encoding and
518 length. If ENCODING is not given, encoding is set to None. If an
519 ENCODING is provided the encoding parameter is set to ENCODING, but
520 the string is not encoded.
521 If LENGTH is provided then the length parameter is set to LENGTH.
522 Otherwise if the value is an array of known length then the array's length
523 is used. Otherwise the length will be set to -1 (meaning first null of
524 appropriate with). */
526 static PyObject *
527 valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
529 gdb_py_longest length = -1;
530 struct value *value = ((value_object *) self)->value;
531 const char *user_encoding = NULL;
532 static const char *keywords[] = { "encoding", "length", NULL };
533 PyObject *str_obj = NULL;
535 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG,
536 keywords, &user_encoding, &length))
537 return NULL;
539 if (length < -1)
541 PyErr_SetString (PyExc_ValueError, _("Invalid length."));
542 return NULL;
547 scoped_value_mark free_values;
548 struct type *type, *realtype;
549 CORE_ADDR addr;
551 type = value->type ();
552 realtype = check_typedef (type);
554 switch (realtype->code ())
556 case TYPE_CODE_ARRAY:
558 LONGEST array_length = -1;
559 LONGEST low_bound, high_bound;
561 /* PR 20786: There's no way to specify an array of length zero.
562 Record a length of [0,-1] which is how Ada does it. Anything
563 we do is broken, but this one possible solution. */
564 if (get_array_bounds (realtype, &low_bound, &high_bound))
565 array_length = high_bound - low_bound + 1;
566 if (length == -1)
567 length = array_length;
568 else if (array_length == -1)
570 type = lookup_array_range_type (realtype->target_type (),
571 0, length - 1);
573 else if (length != array_length)
575 /* We need to create a new array type with the
576 specified length. */
577 if (length > array_length)
578 error (_("Length is larger than array size."));
579 type = lookup_array_range_type (realtype->target_type (),
580 low_bound,
581 low_bound + length - 1);
583 addr = value->address ();
584 break;
586 case TYPE_CODE_PTR:
587 /* If a length is specified we defer creating an array of the
588 specified width until we need to. */
589 addr = value_as_address (value);
590 break;
591 default:
592 error (_("Cannot make lazy string from this object"));
595 str_obj = gdbpy_create_lazy_string_object (addr, length, user_encoding,
596 type);
598 catch (const gdb_exception &except)
600 return gdbpy_handle_gdb_exception (nullptr, except);
603 return str_obj;
606 /* Implementation of gdb.Value.string ([encoding] [, errors]
607 [, length]) -> string. Return Unicode string with value contents.
608 If ENCODING is not given, the string is assumed to be encoded in
609 the target's charset. If LENGTH is provided, only fetch string to
610 the length provided. */
612 static PyObject *
613 valpy_string (PyObject *self, PyObject *args, PyObject *kw)
615 int length = -1;
616 gdb::unique_xmalloc_ptr<gdb_byte> buffer;
617 struct value *value = ((value_object *) self)->value;
618 const char *encoding = NULL;
619 const char *errors = NULL;
620 const char *user_encoding = NULL;
621 const char *la_encoding = NULL;
622 struct type *char_type;
623 static const char *keywords[] = { "encoding", "errors", "length", NULL };
625 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords,
626 &user_encoding, &errors, &length))
627 return NULL;
631 c_get_string (value, &buffer, &length, &char_type, &la_encoding);
633 catch (const gdb_exception &except)
635 return gdbpy_handle_gdb_exception (nullptr, except);
638 encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding;
639 return PyUnicode_Decode ((const char *) buffer.get (),
640 length * char_type->length (),
641 encoding, errors);
644 /* Given a Python object, copy its truth value to a C bool (the value
645 pointed by dest).
646 If src_obj is NULL, then *dest is not modified.
648 Return true in case of success (including src_obj being NULL), false
649 in case of error. */
651 static bool
652 copy_py_bool_obj (bool *dest, PyObject *src_obj)
654 if (src_obj)
656 int cmp = PyObject_IsTrue (src_obj);
657 if (cmp < 0)
658 return false;
659 *dest = cmp;
662 return true;
665 /* Implementation of gdb.Value.format_string (...) -> string.
666 Return Unicode string with value contents formatted using the
667 keyword-only arguments. */
669 static PyObject *
670 valpy_format_string (PyObject *self, PyObject *args, PyObject *kw)
672 static const char *keywords[] =
674 /* Basic C/C++ options. */
675 "raw", /* See the /r option to print. */
676 "pretty_arrays", /* See set print array on|off. */
677 "pretty_structs", /* See set print pretty on|off. */
678 "array_indexes", /* See set print array-indexes on|off. */
679 "symbols", /* See set print symbol on|off. */
680 "unions", /* See set print union on|off. */
681 "address", /* See set print address on|off. */
682 "styling", /* Should we apply styling. */
683 "nibbles", /* See set print nibbles on|off. */
684 "summary", /* Summary mode for non-scalars. */
685 /* C++ options. */
686 "deref_refs", /* No corresponding setting. */
687 "actual_objects", /* See set print object on|off. */
688 "static_members", /* See set print static-members on|off. */
689 /* C non-bool options. */
690 "max_characters", /* See set print characters N. */
691 "max_elements", /* See set print elements N. */
692 "max_depth", /* See set print max-depth N. */
693 "repeat_threshold", /* See set print repeats. */
694 "format", /* The format passed to the print command. */
695 NULL
698 /* This function has too many arguments to be useful as positionals, so
699 the user should specify them all as keyword arguments.
700 Python 3.3 and later have a way to specify it (both in C and Python
701 itself), but we could be compiled with older versions, so we just
702 check that the args tuple is empty. */
703 Py_ssize_t positional_count = PyObject_Length (args);
704 if (positional_count < 0)
705 return NULL;
706 else if (positional_count > 0)
708 /* This matches the error message that Python 3.3 raises when
709 passing positionals to functions expecting keyword-only
710 arguments. */
711 PyErr_Format (PyExc_TypeError,
712 "format_string() takes 0 positional arguments but %zu were given",
713 positional_count);
714 return NULL;
717 struct value_print_options opts;
718 gdbpy_get_print_options (&opts);
719 opts.deref_ref = false;
721 /* We need objects for booleans as the "p" flag for bools is new in
722 Python 3.3. */
723 PyObject *raw_obj = NULL;
724 PyObject *pretty_arrays_obj = NULL;
725 PyObject *pretty_structs_obj = NULL;
726 PyObject *array_indexes_obj = NULL;
727 PyObject *symbols_obj = NULL;
728 PyObject *unions_obj = NULL;
729 PyObject *address_obj = NULL;
730 PyObject *styling_obj = Py_False;
731 PyObject *nibbles_obj = NULL;
732 PyObject *deref_refs_obj = NULL;
733 PyObject *actual_objects_obj = NULL;
734 PyObject *static_members_obj = NULL;
735 PyObject *summary_obj = NULL;
736 char *format = NULL;
737 if (!gdb_PyArg_ParseTupleAndKeywords (args,
739 "|O!O!O!O!O!O!O!O!O!O!O!O!O!IIIIs",
740 keywords,
741 &PyBool_Type, &raw_obj,
742 &PyBool_Type, &pretty_arrays_obj,
743 &PyBool_Type, &pretty_structs_obj,
744 &PyBool_Type, &array_indexes_obj,
745 &PyBool_Type, &symbols_obj,
746 &PyBool_Type, &unions_obj,
747 &PyBool_Type, &address_obj,
748 &PyBool_Type, &styling_obj,
749 &PyBool_Type, &nibbles_obj,
750 &PyBool_Type, &summary_obj,
751 &PyBool_Type, &deref_refs_obj,
752 &PyBool_Type, &actual_objects_obj,
753 &PyBool_Type, &static_members_obj,
754 &opts.print_max_chars,
755 &opts.print_max,
756 &opts.max_depth,
757 &opts.repeat_count_threshold,
758 &format))
759 return NULL;
761 /* Set boolean arguments. */
762 if (!copy_py_bool_obj (&opts.raw, raw_obj))
763 return NULL;
764 if (!copy_py_bool_obj (&opts.prettyformat_arrays, pretty_arrays_obj))
765 return NULL;
766 if (!copy_py_bool_obj (&opts.prettyformat_structs, pretty_structs_obj))
767 return NULL;
768 if (!copy_py_bool_obj (&opts.print_array_indexes, array_indexes_obj))
769 return NULL;
770 if (!copy_py_bool_obj (&opts.symbol_print, symbols_obj))
771 return NULL;
772 if (!copy_py_bool_obj (&opts.unionprint, unions_obj))
773 return NULL;
774 if (!copy_py_bool_obj (&opts.addressprint, address_obj))
775 return NULL;
776 if (!copy_py_bool_obj (&opts.nibblesprint, nibbles_obj))
777 return NULL;
778 if (!copy_py_bool_obj (&opts.deref_ref, deref_refs_obj))
779 return NULL;
780 if (!copy_py_bool_obj (&opts.objectprint, actual_objects_obj))
781 return NULL;
782 if (!copy_py_bool_obj (&opts.static_field_print, static_members_obj))
783 return NULL;
784 if (!copy_py_bool_obj (&opts.summary, summary_obj))
785 return nullptr;
787 /* Numeric arguments for which 0 means unlimited (which we represent as
788 UINT_MAX). Note that the max-depth numeric argument uses -1 as
789 unlimited, and 0 is a valid choice. */
790 if (opts.print_max == 0)
791 opts.print_max = UINT_MAX;
792 if (opts.repeat_count_threshold == 0)
793 opts.repeat_count_threshold = UINT_MAX;
795 /* Other arguments. */
796 if (format != NULL)
798 if (strlen (format) == 1)
799 opts.format = format[0];
800 else
802 /* Mimic the message on standard Python ones for similar
803 errors. */
804 PyErr_SetString (PyExc_ValueError,
805 "a single character is required");
806 return NULL;
810 /* We force styling_obj to be a 'bool' when we parse the args above. */
811 gdb_assert (PyBool_Check (styling_obj));
812 string_file stb (styling_obj == Py_True);
816 common_val_print (((value_object *) self)->value, &stb, 0,
817 &opts, current_language);
819 catch (const gdb_exception &except)
821 return gdbpy_handle_gdb_exception (nullptr, except);
824 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
827 /* A helper function that implements the various cast operators. */
829 static PyObject *
830 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
832 PyObject *type_obj, *result = NULL;
833 struct type *type;
835 if (! PyArg_ParseTuple (args, "O", &type_obj))
836 return NULL;
838 type = type_object_to_type (type_obj);
839 if (! type)
841 PyErr_SetString (PyExc_RuntimeError,
842 _("Argument must be a type."));
843 return NULL;
848 struct value *val = ((value_object *) self)->value;
849 struct value *res_val;
850 scoped_value_mark free_values;
852 if (op == UNOP_DYNAMIC_CAST)
853 res_val = value_dynamic_cast (type, val);
854 else if (op == UNOP_REINTERPRET_CAST)
855 res_val = value_reinterpret_cast (type, val);
856 else
858 gdb_assert (op == UNOP_CAST);
859 res_val = value_cast (type, val);
862 result = value_to_value_object (res_val);
864 catch (const gdb_exception &except)
866 return gdbpy_handle_gdb_exception (nullptr, except);
869 return result;
872 /* Implementation of the "cast" method. */
874 static PyObject *
875 valpy_cast (PyObject *self, PyObject *args)
877 return valpy_do_cast (self, args, UNOP_CAST);
880 /* Implementation of the "dynamic_cast" method. */
882 static PyObject *
883 valpy_dynamic_cast (PyObject *self, PyObject *args)
885 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
888 /* Implementation of the "reinterpret_cast" method. */
890 static PyObject *
891 valpy_reinterpret_cast (PyObject *self, PyObject *args)
893 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
896 /* Assign NEW_VALUE into SELF, handles 'struct value' reference counting,
897 and also clearing the bytes data cached within SELF. Return true if
898 the assignment was successful, otherwise return false, in which case a
899 Python exception will be set. */
901 static bool
902 valpy_assign_core (value_object *self, struct value *new_value)
906 new_value = value_assign (self->value, new_value);
908 /* value_as_address returns a new value with the same location
909 as the old one. Ensure that this gdb.Value is updated to
910 reflect the new value. */
911 new_value->incref ();
912 self->value->decref ();
913 Py_CLEAR (self->content_bytes);
914 self->value = new_value;
916 catch (const gdb_exception &except)
918 return gdbpy_handle_gdb_exception (false, except);
921 return true;
924 /* Implementation of the "assign" method. */
926 static PyObject *
927 valpy_assign (PyObject *self_obj, PyObject *args)
929 PyObject *val_obj;
931 if (! PyArg_ParseTuple (args, "O", &val_obj))
932 return nullptr;
934 struct value *val = convert_value_from_python (val_obj);
935 if (val == nullptr)
936 return nullptr;
938 value_object *self = (value_object *) self_obj;
939 if (!valpy_assign_core (self, val))
940 return nullptr;
942 Py_RETURN_NONE;
945 static Py_ssize_t
946 valpy_length (PyObject *self)
948 /* We don't support getting the number of elements in a struct / class. */
949 PyErr_SetString (PyExc_NotImplementedError,
950 _("Invalid operation on gdb.Value."));
951 return -1;
954 /* Return 1 if the gdb.Field object FIELD is present in the value V.
955 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
957 static int
958 value_has_field (struct value *v, PyObject *field)
960 struct type *parent_type, *val_type;
961 enum type_code type_code;
962 gdbpy_ref<> type_object (PyObject_GetAttrString (field, "parent_type"));
963 int has_field = 0;
965 if (type_object == NULL)
966 return -1;
968 parent_type = type_object_to_type (type_object.get ());
969 if (parent_type == NULL)
971 PyErr_SetString (PyExc_TypeError,
972 _("'parent_type' attribute of gdb.Field object is not a"
973 "gdb.Type object."));
974 return -1;
979 val_type = v->type ();
980 val_type = check_typedef (val_type);
981 if (val_type->is_pointer_or_reference ())
982 val_type = check_typedef (val_type->target_type ());
984 type_code = val_type->code ();
985 if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION)
986 && types_equal (val_type, parent_type))
987 has_field = 1;
988 else
989 has_field = 0;
991 catch (const gdb_exception &except)
993 return gdbpy_handle_gdb_exception (-1, except);
996 return has_field;
999 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
1000 Returns 1 if the flag value is true, 0 if it is false, and -1 if
1001 a Python error occurs. */
1003 static int
1004 get_field_flag (PyObject *field, const char *flag_name)
1006 gdbpy_ref<> flag_object (PyObject_GetAttrString (field, flag_name));
1008 if (flag_object == NULL)
1009 return -1;
1011 return PyObject_IsTrue (flag_object.get ());
1014 /* Return the "type" attribute of a gdb.Field object.
1015 Returns NULL on error, with a Python exception set. */
1017 static struct type *
1018 get_field_type (PyObject *field)
1020 gdbpy_ref<> ftype_obj (PyObject_GetAttrString (field, "type"));
1021 struct type *ftype;
1023 if (ftype_obj == NULL)
1024 return NULL;
1025 ftype = type_object_to_type (ftype_obj.get ());
1026 if (ftype == NULL)
1027 PyErr_SetString (PyExc_TypeError,
1028 _("'type' attribute of gdb.Field object is not a "
1029 "gdb.Type object."));
1031 return ftype;
1034 /* Given string name or a gdb.Field object corresponding to an element inside
1035 a structure, return its value object. Returns NULL on error, with a python
1036 exception set. */
1038 static PyObject *
1039 valpy_getitem (PyObject *self, PyObject *key)
1041 value_object *self_value = (value_object *) self;
1042 gdb::unique_xmalloc_ptr<char> field;
1043 struct type *base_class_type = NULL, *field_type = NULL;
1044 long bitpos = -1;
1045 PyObject *result = NULL;
1047 if (gdbpy_is_string (key))
1049 field = python_string_to_host_string (key);
1050 if (field == NULL)
1051 return NULL;
1053 else if (gdbpy_is_field (key))
1055 int is_base_class, valid_field;
1057 valid_field = value_has_field (self_value->value, key);
1058 if (valid_field < 0)
1059 return NULL;
1060 else if (valid_field == 0)
1062 PyErr_SetString (PyExc_TypeError,
1063 _("Invalid lookup for a field not contained in "
1064 "the value."));
1066 return NULL;
1069 is_base_class = get_field_flag (key, "is_base_class");
1070 if (is_base_class < 0)
1071 return NULL;
1072 else if (is_base_class > 0)
1074 base_class_type = get_field_type (key);
1075 if (base_class_type == NULL)
1076 return NULL;
1078 else
1080 gdbpy_ref<> name_obj (PyObject_GetAttrString (key, "name"));
1082 if (name_obj == NULL)
1083 return NULL;
1085 if (name_obj != Py_None)
1087 field = python_string_to_host_string (name_obj.get ());
1088 if (field == NULL)
1089 return NULL;
1091 else
1093 if (!PyObject_HasAttrString (key, "bitpos"))
1095 PyErr_SetString (PyExc_AttributeError,
1096 _("gdb.Field object has no name and no "
1097 "'bitpos' attribute."));
1099 return NULL;
1101 gdbpy_ref<> bitpos_obj (PyObject_GetAttrString (key, "bitpos"));
1102 if (bitpos_obj == NULL)
1103 return NULL;
1104 if (!gdb_py_int_as_long (bitpos_obj.get (), &bitpos))
1105 return NULL;
1107 field_type = get_field_type (key);
1108 if (field_type == NULL)
1109 return NULL;
1116 struct value *tmp = self_value->value;
1117 struct value *res_val = NULL;
1118 scoped_value_mark free_values;
1120 if (field)
1121 res_val = value_struct_elt (&tmp, {}, field.get (), NULL,
1122 "struct/class/union");
1123 else if (bitpos >= 0)
1124 res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type,
1125 "struct/class/union");
1126 else if (base_class_type != NULL)
1128 struct type *val_type;
1130 val_type = check_typedef (tmp->type ());
1131 if (val_type->code () == TYPE_CODE_PTR)
1132 res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
1133 else if (val_type->code () == TYPE_CODE_REF)
1134 res_val = value_cast (lookup_lvalue_reference_type (base_class_type),
1135 tmp);
1136 else if (val_type->code () == TYPE_CODE_RVALUE_REF)
1137 res_val = value_cast (lookup_rvalue_reference_type (base_class_type),
1138 tmp);
1139 else
1140 res_val = value_cast (base_class_type, tmp);
1142 else
1144 /* Assume we are attempting an array access, and let the
1145 value code throw an exception if the index has an invalid
1146 type. */
1147 struct value *idx = convert_value_from_python (key);
1149 if (idx != NULL
1150 && binop_user_defined_p (BINOP_SUBSCRIPT, tmp, idx))
1151 res_val = value_x_binop (tmp, idx, BINOP_SUBSCRIPT,
1152 OP_NULL, EVAL_NORMAL);
1153 else if (idx != NULL)
1155 /* Check the value's type is something that can be accessed via
1156 a subscript. */
1157 struct type *type;
1159 tmp = coerce_ref (tmp);
1160 type = check_typedef (tmp->type ());
1161 if (type->code () != TYPE_CODE_ARRAY
1162 && type->code () != TYPE_CODE_PTR)
1163 error (_("Cannot subscript requested type."));
1164 else if (ADA_TYPE_P (type))
1165 res_val = ada_value_subscript (tmp, 1, &idx);
1166 else
1167 res_val = value_subscript (tmp, value_as_long (idx));
1171 if (res_val)
1172 result = value_to_value_object (res_val);
1174 catch (const gdb_exception &ex)
1176 return gdbpy_handle_gdb_exception (nullptr, ex);
1179 return result;
1182 static int
1183 valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
1185 PyErr_Format (PyExc_NotImplementedError,
1186 _("Setting of struct elements is not currently supported."));
1187 return -1;
1190 /* Called by the Python interpreter to perform an inferior function
1191 call on the value. Returns NULL on error, with a python exception set. */
1192 static PyObject *
1193 valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
1195 Py_ssize_t args_count;
1196 struct value *function = ((value_object *) self)->value;
1197 struct value **vargs = NULL;
1198 struct type *ftype = NULL;
1199 PyObject *result = NULL;
1203 ftype = check_typedef (function->type ());
1205 catch (const gdb_exception &except)
1207 return gdbpy_handle_gdb_exception (nullptr, except);
1210 if (ftype->code () != TYPE_CODE_FUNC && ftype->code () != TYPE_CODE_METHOD
1211 && ftype->code () != TYPE_CODE_INTERNAL_FUNCTION)
1213 PyErr_SetString (PyExc_RuntimeError,
1214 _("Value is not callable (not TYPE_CODE_FUNC"
1215 " or TYPE_CODE_METHOD"
1216 " or TYPE_CODE_INTERNAL_FUNCTION)."));
1217 return NULL;
1220 if (! PyTuple_Check (args))
1222 PyErr_SetString (PyExc_TypeError,
1223 _("Inferior arguments must be provided in a tuple."));
1224 return NULL;
1227 args_count = PyTuple_Size (args);
1228 if (args_count > 0)
1230 int i;
1232 vargs = XALLOCAVEC (struct value *, args_count);
1233 for (i = 0; i < args_count; i++)
1235 PyObject *item = PyTuple_GetItem (args, i);
1237 if (item == NULL)
1238 return NULL;
1240 vargs[i] = convert_value_from_python (item);
1241 if (vargs[i] == NULL)
1242 return NULL;
1248 scoped_value_mark free_values;
1250 value *return_value;
1251 if (ftype->code () == TYPE_CODE_INTERNAL_FUNCTION)
1252 return_value = call_internal_function (gdbpy_enter::get_gdbarch (),
1253 current_language,
1254 function, args_count, vargs,
1255 EVAL_NORMAL);
1256 else
1257 return_value
1258 = call_function_by_hand (function, NULL,
1259 gdb::make_array_view (vargs, args_count));
1260 result = value_to_value_object (return_value);
1262 catch (const gdb_exception &except)
1264 return gdbpy_handle_gdb_exception (nullptr, except);
1267 return result;
1270 /* Called by the Python interpreter to obtain string representation
1271 of the object. */
1272 static PyObject *
1273 valpy_str (PyObject *self)
1275 struct value_print_options opts;
1277 gdbpy_get_print_options (&opts);
1278 opts.deref_ref = false;
1280 string_file stb;
1284 common_val_print (((value_object *) self)->value, &stb, 0,
1285 &opts, current_language);
1287 catch (const gdb_exception &except)
1289 return gdbpy_handle_gdb_exception (nullptr, except);
1292 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
1295 /* Implements gdb.Value.is_optimized_out. */
1296 static PyObject *
1297 valpy_get_is_optimized_out (PyObject *self, void *closure)
1299 struct value *value = ((value_object *) self)->value;
1300 int opt = 0;
1304 opt = value->optimized_out ();
1306 catch (const gdb_exception &except)
1308 return gdbpy_handle_gdb_exception (nullptr, except);
1311 if (opt)
1312 Py_RETURN_TRUE;
1314 Py_RETURN_FALSE;
1317 /* Implements gdb.Value.is_lazy. */
1318 static PyObject *
1319 valpy_get_is_lazy (PyObject *self, void *closure)
1321 struct value *value = ((value_object *) self)->value;
1322 int opt = 0;
1326 opt = value->lazy ();
1328 catch (const gdb_exception &except)
1330 return gdbpy_handle_gdb_exception (nullptr, except);
1333 if (opt)
1334 Py_RETURN_TRUE;
1336 Py_RETURN_FALSE;
1339 /* Get gdb.Value.bytes attribute. */
1341 static PyObject *
1342 valpy_get_bytes (PyObject *self, void *closure)
1344 value_object *value_obj = (value_object *) self;
1345 struct value *value = value_obj->value;
1347 if (value_obj->content_bytes != nullptr)
1349 Py_INCREF (value_obj->content_bytes);
1350 return value_obj->content_bytes;
1353 gdb::array_view<const gdb_byte> contents;
1356 contents = value->contents ();
1358 catch (const gdb_exception &except)
1360 return gdbpy_handle_gdb_exception (nullptr, except);
1363 value_obj->content_bytes
1364 = PyBytes_FromStringAndSize ((const char *) contents.data (),
1365 contents.size ());
1366 Py_XINCREF (value_obj->content_bytes);
1367 return value_obj->content_bytes;
1370 /* Set gdb.Value.bytes attribute. */
1372 static int
1373 valpy_set_bytes (PyObject *self_obj, PyObject *new_value_obj, void *closure)
1375 value_object *self = (value_object *) self_obj;
1377 /* Create a new value from the buffer NEW_VALUE_OBJ. We pass true here
1378 to indicate that NEW_VALUE_OBJ must match exactly the type length. */
1379 struct value *new_value
1380 = convert_buffer_and_type_to_value (new_value_obj, self->value->type (),
1381 true);
1382 if (new_value == nullptr)
1383 return -1;
1385 if (!valpy_assign_core (self, new_value))
1386 return -1;
1388 return 0;
1391 /* Implements gdb.Value.fetch_lazy (). */
1392 static PyObject *
1393 valpy_fetch_lazy (PyObject *self, PyObject *args)
1395 struct value *value = ((value_object *) self)->value;
1399 if (value->lazy ())
1400 value->fetch_lazy ();
1402 catch (const gdb_exception &except)
1404 return gdbpy_handle_gdb_exception (nullptr, except);
1407 Py_RETURN_NONE;
1410 /* Calculate and return the address of the PyObject as the value of
1411 the builtin __hash__ call. */
1412 static Py_hash_t
1413 valpy_hash (PyObject *self)
1415 return (intptr_t) self;
1418 enum valpy_opcode
1420 VALPY_ADD,
1421 VALPY_SUB,
1422 VALPY_MUL,
1423 VALPY_DIV,
1424 VALPY_REM,
1425 VALPY_POW,
1426 VALPY_LSH,
1427 VALPY_RSH,
1428 VALPY_BITAND,
1429 VALPY_BITOR,
1430 VALPY_BITXOR
1433 /* If TYPE is a reference, return the target; otherwise return TYPE. */
1434 #define STRIP_REFERENCE(TYPE) \
1435 (TYPE_IS_REFERENCE (TYPE) ? ((TYPE)->target_type ()) : (TYPE))
1437 /* Helper for valpy_binop. Returns a value object which is the result
1438 of applying the operation specified by OPCODE to the given
1439 arguments. Throws a GDB exception on error. */
1441 static PyObject *
1442 valpy_binop_throw (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1444 PyObject *result = NULL;
1446 struct value *arg1, *arg2;
1447 struct value *res_val = NULL;
1448 enum exp_opcode op = OP_NULL;
1449 int handled = 0;
1451 scoped_value_mark free_values;
1453 /* If the gdb.Value object is the second operand, then it will be
1454 passed to us as the OTHER argument, and SELF will be an entirely
1455 different kind of object, altogether. Because of this, we can't
1456 assume self is a gdb.Value object and need to convert it from
1457 python as well. */
1458 arg1 = convert_value_from_python (self);
1459 if (arg1 == NULL)
1460 return NULL;
1462 arg2 = convert_value_from_python (other);
1463 if (arg2 == NULL)
1464 return NULL;
1466 switch (opcode)
1468 case VALPY_ADD:
1470 struct type *ltype = arg1->type ();
1471 struct type *rtype = arg2->type ();
1473 ltype = check_typedef (ltype);
1474 ltype = STRIP_REFERENCE (ltype);
1475 rtype = check_typedef (rtype);
1476 rtype = STRIP_REFERENCE (rtype);
1478 handled = 1;
1479 if (ltype->code () == TYPE_CODE_PTR
1480 && is_integral_type (rtype))
1481 res_val = value_ptradd (arg1, value_as_long (arg2));
1482 else if (rtype->code () == TYPE_CODE_PTR
1483 && is_integral_type (ltype))
1484 res_val = value_ptradd (arg2, value_as_long (arg1));
1485 else
1487 handled = 0;
1488 op = BINOP_ADD;
1491 break;
1492 case VALPY_SUB:
1494 struct type *ltype = arg1->type ();
1495 struct type *rtype = arg2->type ();
1497 ltype = check_typedef (ltype);
1498 ltype = STRIP_REFERENCE (ltype);
1499 rtype = check_typedef (rtype);
1500 rtype = STRIP_REFERENCE (rtype);
1502 handled = 1;
1503 if (ltype->code () == TYPE_CODE_PTR
1504 && rtype->code () == TYPE_CODE_PTR)
1505 /* A ptrdiff_t for the target would be preferable here. */
1506 res_val = value_from_longest (builtin_type_pyint,
1507 value_ptrdiff (arg1, arg2));
1508 else if (ltype->code () == TYPE_CODE_PTR
1509 && is_integral_type (rtype))
1510 res_val = value_ptradd (arg1, - value_as_long (arg2));
1511 else
1513 handled = 0;
1514 op = BINOP_SUB;
1517 break;
1518 case VALPY_MUL:
1519 op = BINOP_MUL;
1520 break;
1521 case VALPY_DIV:
1522 op = BINOP_DIV;
1523 break;
1524 case VALPY_REM:
1525 op = BINOP_REM;
1526 break;
1527 case VALPY_POW:
1528 op = BINOP_EXP;
1529 break;
1530 case VALPY_LSH:
1531 op = BINOP_LSH;
1532 break;
1533 case VALPY_RSH:
1534 op = BINOP_RSH;
1535 break;
1536 case VALPY_BITAND:
1537 op = BINOP_BITWISE_AND;
1538 break;
1539 case VALPY_BITOR:
1540 op = BINOP_BITWISE_IOR;
1541 break;
1542 case VALPY_BITXOR:
1543 op = BINOP_BITWISE_XOR;
1544 break;
1547 if (!handled)
1549 if (binop_user_defined_p (op, arg1, arg2))
1550 res_val = value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
1551 else
1552 res_val = value_binop (arg1, arg2, op);
1555 if (res_val)
1556 result = value_to_value_object (res_val);
1558 return result;
1561 /* Returns a value object which is the result of applying the operation
1562 specified by OPCODE to the given arguments. Returns NULL on error, with
1563 a python exception set. */
1564 static PyObject *
1565 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1567 PyObject *result = NULL;
1571 result = valpy_binop_throw (opcode, self, other);
1573 catch (const gdb_exception &except)
1575 return gdbpy_handle_gdb_exception (nullptr, except);
1578 return result;
1581 static PyObject *
1582 valpy_add (PyObject *self, PyObject *other)
1584 return valpy_binop (VALPY_ADD, self, other);
1587 static PyObject *
1588 valpy_subtract (PyObject *self, PyObject *other)
1590 return valpy_binop (VALPY_SUB, self, other);
1593 static PyObject *
1594 valpy_multiply (PyObject *self, PyObject *other)
1596 return valpy_binop (VALPY_MUL, self, other);
1599 static PyObject *
1600 valpy_divide (PyObject *self, PyObject *other)
1602 return valpy_binop (VALPY_DIV, self, other);
1605 static PyObject *
1606 valpy_remainder (PyObject *self, PyObject *other)
1608 return valpy_binop (VALPY_REM, self, other);
1611 static PyObject *
1612 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
1614 /* We don't support the ternary form of pow. I don't know how to express
1615 that, so let's just throw NotImplementedError to at least do something
1616 about it. */
1617 if (unused != Py_None)
1619 PyErr_SetString (PyExc_NotImplementedError,
1620 "Invalid operation on gdb.Value.");
1621 return NULL;
1624 return valpy_binop (VALPY_POW, self, other);
1627 static PyObject *
1628 valpy_negative (PyObject *self)
1630 PyObject *result = NULL;
1634 /* Perhaps overkill, but consistency has some virtue. */
1635 scoped_value_mark free_values;
1636 struct value *val;
1638 val = value_neg (((value_object *) self)->value);
1639 result = value_to_value_object (val);
1641 catch (const gdb_exception &except)
1643 return gdbpy_handle_gdb_exception (nullptr, except);
1646 return result;
1649 static PyObject *
1650 valpy_positive (PyObject *self)
1652 return value_to_value_object (((value_object *) self)->value);
1655 static PyObject *
1656 valpy_absolute (PyObject *self)
1658 struct value *value = ((value_object *) self)->value;
1659 int isabs = 1;
1663 scoped_value_mark free_values;
1665 if (value_less (value, value::zero (value->type (), not_lval)))
1666 isabs = 0;
1668 catch (const gdb_exception &except)
1670 return gdbpy_handle_gdb_exception (nullptr, except);
1673 if (isabs)
1674 return valpy_positive (self);
1675 else
1676 return valpy_negative (self);
1679 /* Implements boolean evaluation of gdb.Value. */
1680 static int
1681 valpy_nonzero (PyObject *self)
1683 value_object *self_value = (value_object *) self;
1684 struct type *type;
1685 int nonzero = 0; /* Appease GCC warning. */
1689 type = check_typedef (self_value->value->type ());
1691 if (is_integral_type (type) || type->code () == TYPE_CODE_PTR)
1692 nonzero = !!value_as_long (self_value->value);
1693 else if (is_floating_value (self_value->value))
1694 nonzero = !target_float_is_zero
1695 (self_value->value->contents ().data (), type);
1696 else
1697 /* All other values are True. */
1698 nonzero = 1;
1700 catch (const gdb_exception &ex)
1702 /* This is not documented in the Python documentation, but if
1703 this function fails, return -1 as slot_nb_nonzero does (the
1704 default Python nonzero function). */
1705 return gdbpy_handle_gdb_exception (-1, ex);
1708 return nonzero;
1711 /* Implements ~ for value objects. */
1712 static PyObject *
1713 valpy_invert (PyObject *self)
1715 PyObject *result = nullptr;
1719 scoped_value_mark free_values;
1720 struct value *val = value_complement (((value_object *) self)->value);
1721 result = value_to_value_object (val);
1723 catch (const gdb_exception &except)
1725 return gdbpy_handle_gdb_exception (nullptr, except);
1728 return result;
1731 /* Implements left shift for value objects. */
1732 static PyObject *
1733 valpy_lsh (PyObject *self, PyObject *other)
1735 return valpy_binop (VALPY_LSH, self, other);
1738 /* Implements right shift for value objects. */
1739 static PyObject *
1740 valpy_rsh (PyObject *self, PyObject *other)
1742 return valpy_binop (VALPY_RSH, self, other);
1745 /* Implements bitwise and for value objects. */
1746 static PyObject *
1747 valpy_and (PyObject *self, PyObject *other)
1749 return valpy_binop (VALPY_BITAND, self, other);
1752 /* Implements bitwise or for value objects. */
1753 static PyObject *
1754 valpy_or (PyObject *self, PyObject *other)
1756 return valpy_binop (VALPY_BITOR, self, other);
1759 /* Implements bitwise xor for value objects. */
1760 static PyObject *
1761 valpy_xor (PyObject *self, PyObject *other)
1763 return valpy_binop (VALPY_BITXOR, self, other);
1766 /* Helper for valpy_richcompare. Implements comparison operations for
1767 value objects. Returns true/false on success. Returns -1 with a
1768 Python exception set if a Python error is detected. Throws a GDB
1769 exception on other errors (memory error, etc.). */
1771 static int
1772 valpy_richcompare_throw (PyObject *self, PyObject *other, int op)
1774 int result;
1775 struct value *value_other;
1776 struct value *value_self;
1778 scoped_value_mark free_values;
1780 value_other = convert_value_from_python (other);
1781 if (value_other == NULL)
1782 return -1;
1784 value_self = ((value_object *) self)->value;
1786 switch (op)
1788 case Py_LT:
1789 result = value_less (value_self, value_other);
1790 break;
1791 case Py_LE:
1792 result = value_less (value_self, value_other)
1793 || value_equal (value_self, value_other);
1794 break;
1795 case Py_EQ:
1796 result = value_equal (value_self, value_other);
1797 break;
1798 case Py_NE:
1799 result = !value_equal (value_self, value_other);
1800 break;
1801 case Py_GT:
1802 result = value_less (value_other, value_self);
1803 break;
1804 case Py_GE:
1805 result = (value_less (value_other, value_self)
1806 || value_equal (value_self, value_other));
1807 break;
1808 default:
1809 /* Can't happen. */
1810 PyErr_SetString (PyExc_NotImplementedError,
1811 _("Invalid operation on gdb.Value."));
1812 result = -1;
1813 break;
1816 return result;
1820 /* Implements comparison operations for value objects. Returns NULL on error,
1821 with a python exception set. */
1822 static PyObject *
1823 valpy_richcompare (PyObject *self, PyObject *other, int op)
1825 int result = 0;
1827 if (other == Py_None)
1828 /* Comparing with None is special. From what I can tell, in Python
1829 None is smaller than anything else. */
1830 switch (op) {
1831 case Py_LT:
1832 case Py_LE:
1833 case Py_EQ:
1834 Py_RETURN_FALSE;
1835 case Py_NE:
1836 case Py_GT:
1837 case Py_GE:
1838 Py_RETURN_TRUE;
1839 default:
1840 /* Can't happen. */
1841 PyErr_SetString (PyExc_NotImplementedError,
1842 _("Invalid operation on gdb.Value."));
1843 return NULL;
1848 result = valpy_richcompare_throw (self, other, op);
1850 catch (const gdb_exception &except)
1852 return gdbpy_handle_gdb_exception (nullptr, except);
1855 /* In this case, the Python exception has already been set. */
1856 if (result < 0)
1857 return NULL;
1859 if (result == 1)
1860 Py_RETURN_TRUE;
1862 Py_RETURN_FALSE;
1865 /* Implements conversion to long. */
1866 static PyObject *
1867 valpy_long (PyObject *self)
1869 struct value *value = ((value_object *) self)->value;
1870 struct type *type = value->type ();
1871 LONGEST l = 0;
1875 if (is_floating_value (value))
1877 type = builtin_type_pylong;
1878 value = value_cast (type, value);
1881 type = check_typedef (type);
1883 if (!is_integral_type (type)
1884 && type->code () != TYPE_CODE_PTR)
1885 error (_("Cannot convert value to long."));
1887 l = value_as_long (value);
1889 catch (const gdb_exception &except)
1891 return gdbpy_handle_gdb_exception (nullptr, except);
1894 if (type->is_unsigned ())
1895 return gdb_py_object_from_ulongest (l).release ();
1896 else
1897 return gdb_py_object_from_longest (l).release ();
1900 /* Implements conversion to float. */
1901 static PyObject *
1902 valpy_float (PyObject *self)
1904 struct value *value = ((value_object *) self)->value;
1905 struct type *type = value->type ();
1906 double d = 0;
1910 type = check_typedef (type);
1912 if (type->code () == TYPE_CODE_FLT && is_floating_value (value))
1913 d = target_float_to_host_double (value->contents ().data (), type);
1914 else if (type->code () == TYPE_CODE_INT)
1916 /* Note that valpy_long accepts TYPE_CODE_PTR and some
1917 others here here -- but casting a pointer or bool to a
1918 float seems wrong. */
1919 d = value_as_long (value);
1921 else
1922 error (_("Cannot convert value to float."));
1924 catch (const gdb_exception &except)
1926 return gdbpy_handle_gdb_exception (nullptr, except);
1929 return PyFloat_FromDouble (d);
1932 /* Returns an object for a value, without releasing it from the
1933 all_values chain. */
1934 PyObject *
1935 value_to_value_object (struct value *val)
1937 value_object *val_obj;
1939 val_obj = PyObject_New (value_object, &value_object_type);
1940 if (val_obj != NULL)
1942 val->incref ();
1943 val_obj->value = val;
1944 val_obj->next = nullptr;
1945 val_obj->prev = nullptr;
1946 val_obj->address = NULL;
1947 val_obj->type = NULL;
1948 val_obj->dynamic_type = NULL;
1949 val_obj->content_bytes = nullptr;
1950 note_value (val_obj);
1953 return (PyObject *) val_obj;
1956 /* Returns a borrowed reference to the struct value corresponding to
1957 the given value object. */
1958 struct value *
1959 value_object_to_value (PyObject *self)
1961 value_object *real;
1963 if (! PyObject_TypeCheck (self, &value_object_type))
1964 return NULL;
1965 real = (value_object *) self;
1966 return real->value;
1969 /* Try to convert a Python value to a gdb value. If the value cannot
1970 be converted, set a Python exception and return NULL. Returns a
1971 reference to a new value on the all_values chain. */
1973 struct value *
1974 convert_value_from_python (PyObject *obj)
1976 struct value *value = NULL; /* -Wall */
1977 int cmp;
1979 gdb_assert (obj != NULL);
1983 if (PyBool_Check (obj))
1985 cmp = obj == Py_True ? 1 : 0;
1986 value = value_from_longest (builtin_type_pybool, cmp);
1988 else if (PyLong_Check (obj))
1990 LONGEST l = PyLong_AsLongLong (obj);
1992 if (PyErr_Occurred ())
1994 /* If the error was an overflow, we can try converting to
1995 ULONGEST instead. */
1996 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1998 gdbpy_err_fetch fetched_error;
1999 gdbpy_ref<> zero = gdb_py_object_from_longest (0);
2001 /* Check whether obj is positive. */
2002 if (PyObject_RichCompareBool (obj, zero.get (), Py_GT) > 0)
2004 ULONGEST ul;
2006 ul = PyLong_AsUnsignedLongLong (obj);
2007 if (! PyErr_Occurred ())
2008 value = value_from_ulongest (builtin_type_upylong, ul);
2010 else
2012 /* There's nothing we can do. */
2013 fetched_error.restore ();
2017 else
2018 value = value_from_longest (builtin_type_pylong, l);
2020 else if (PyFloat_Check (obj))
2022 double d = PyFloat_AsDouble (obj);
2024 if (! PyErr_Occurred ())
2025 value = value_from_host_double (builtin_type_pyfloat, d);
2027 else if (gdbpy_is_string (obj))
2029 gdb::unique_xmalloc_ptr<char> s
2030 = python_string_to_target_string (obj);
2031 if (s != NULL)
2032 value
2033 = current_language->value_string (gdbpy_enter::get_gdbarch (),
2034 s.get (), strlen (s.get ()));
2036 else if (PyObject_TypeCheck (obj, &value_object_type))
2037 value = ((value_object *) obj)->value->copy ();
2038 else if (gdbpy_is_lazy_string (obj))
2040 PyObject *result;
2042 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
2043 value = ((value_object *) result)->value->copy ();
2045 else
2046 PyErr_Format (PyExc_TypeError,
2047 _("Could not convert Python object: %S."), obj);
2049 catch (const gdb_exception &except)
2051 return gdbpy_handle_gdb_exception (nullptr, except);
2054 return value;
2057 /* Returns value object in the ARGth position in GDB's history. */
2058 PyObject *
2059 gdbpy_history (PyObject *self, PyObject *args)
2061 int i;
2063 if (!PyArg_ParseTuple (args, "i", &i))
2064 return NULL;
2066 PyObject *result = nullptr;
2069 scoped_value_mark free_values;
2070 struct value *res_val = access_value_history (i);
2071 result = value_to_value_object (res_val);
2073 catch (const gdb_exception &except)
2075 return gdbpy_handle_gdb_exception (nullptr, except);
2078 return result;
2081 /* Add a gdb.Value into GDB's history, and return (as an integer) the
2082 position of the newly added value. */
2083 PyObject *
2084 gdbpy_add_history (PyObject *self, PyObject *args)
2086 PyObject *value_obj;
2088 if (!PyArg_ParseTuple (args, "O", &value_obj))
2089 return nullptr;
2091 struct value *value = convert_value_from_python (value_obj);
2092 if (value == nullptr)
2093 return nullptr;
2097 int idx = value->record_latest ();
2098 return gdb_py_object_from_longest (idx).release ();
2100 catch (const gdb_exception &except)
2102 return gdbpy_handle_gdb_exception (nullptr, except);
2105 return nullptr;
2108 /* Return an integer, the number of items in GDB's history. */
2110 PyObject *
2111 gdbpy_history_count (PyObject *self, PyObject *args)
2113 return gdb_py_object_from_ulongest (value_history_count ()).release ();
2116 /* Return the value of a convenience variable. */
2117 PyObject *
2118 gdbpy_convenience_variable (PyObject *self, PyObject *args)
2120 const char *varname;
2121 struct value *res_val = NULL;
2123 if (!PyArg_ParseTuple (args, "s", &varname))
2124 return NULL;
2126 PyObject *result = nullptr;
2127 bool found = false;
2130 struct internalvar *var = lookup_only_internalvar (varname);
2132 if (var != NULL)
2134 scoped_value_mark free_values;
2135 res_val = value_of_internalvar (gdbpy_enter::get_gdbarch (), var);
2136 if (res_val->type ()->code () == TYPE_CODE_VOID)
2137 res_val = NULL;
2138 else
2140 found = true;
2141 result = value_to_value_object (res_val);
2145 catch (const gdb_exception &except)
2147 return gdbpy_handle_gdb_exception (nullptr, except);
2150 if (result == nullptr && !found)
2151 Py_RETURN_NONE;
2153 return result;
2156 /* Set the value of a convenience variable. */
2157 PyObject *
2158 gdbpy_set_convenience_variable (PyObject *self, PyObject *args)
2160 const char *varname;
2161 PyObject *value_obj;
2162 struct value *value = NULL;
2164 if (!PyArg_ParseTuple (args, "sO", &varname, &value_obj))
2165 return NULL;
2167 /* None means to clear the variable. */
2168 if (value_obj != Py_None)
2170 value = convert_value_from_python (value_obj);
2171 if (value == NULL)
2172 return NULL;
2177 if (value == NULL)
2179 struct internalvar *var = lookup_only_internalvar (varname);
2181 if (var != NULL)
2182 clear_internalvar (var);
2184 else
2186 struct internalvar *var = lookup_internalvar (varname);
2188 set_internalvar (var, value);
2191 catch (const gdb_exception &except)
2193 return gdbpy_handle_gdb_exception (nullptr, except);
2196 Py_RETURN_NONE;
2199 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
2202 gdbpy_is_value_object (PyObject *obj)
2204 return PyObject_TypeCheck (obj, &value_object_type);
2207 static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
2208 gdbpy_initialize_values (void)
2210 return gdbpy_type_ready (&value_object_type);
2213 GDBPY_INITIALIZE_FILE (gdbpy_initialize_values);
2217 static gdb_PyGetSetDef value_object_getset[] = {
2218 { "address", valpy_get_address, NULL, "The address of the value.",
2219 NULL },
2220 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
2221 "Boolean telling whether the value is optimized "
2222 "out (i.e., not available).",
2223 NULL },
2224 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
2225 { "dynamic_type", valpy_get_dynamic_type, NULL,
2226 "Dynamic type of the value.", NULL },
2227 { "is_lazy", valpy_get_is_lazy, NULL,
2228 "Boolean telling whether the value is lazy (not fetched yet\n\
2229 from the inferior). A lazy value is fetched when needed, or when\n\
2230 the \"fetch_lazy()\" method is called.", NULL },
2231 { "bytes", valpy_get_bytes, valpy_set_bytes,
2232 "Return a bytearray containing the bytes of this value.", nullptr },
2233 {NULL} /* Sentinel */
2236 static PyMethodDef value_object_methods[] = {
2237 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
2238 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
2239 "dynamic_cast (gdb.Type) -> gdb.Value\n\
2240 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
2242 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
2243 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
2244 Cast the value to the supplied type, as if by the C++\n\
2245 reinterpret_cast operator."
2247 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
2248 { "referenced_value", valpy_referenced_value, METH_NOARGS,
2249 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
2250 { "reference_value", valpy_lvalue_reference_value, METH_NOARGS,
2251 "Return a value of type TYPE_CODE_REF referencing this value." },
2252 { "rvalue_reference_value", valpy_rvalue_reference_value, METH_NOARGS,
2253 "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
2254 { "const_value", valpy_const_value, METH_NOARGS,
2255 "Return a 'const' qualified version of the same value." },
2256 { "lazy_string", (PyCFunction) valpy_lazy_string,
2257 METH_VARARGS | METH_KEYWORDS,
2258 "lazy_string ([encoding] [, length]) -> lazy_string\n\
2259 Return a lazy string representation of the value." },
2260 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
2261 "string ([encoding] [, errors] [, length]) -> string\n\
2262 Return Unicode string representation of the value." },
2263 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
2264 "Fetches the value from the inferior, if it was lazy." },
2265 { "format_string", (PyCFunction) valpy_format_string,
2266 METH_VARARGS | METH_KEYWORDS,
2267 "format_string (...) -> string\n\
2268 Return a string representation of the value using the specified\n\
2269 formatting options" },
2270 { "assign", (PyCFunction) valpy_assign, METH_VARARGS,
2271 "assign (VAL) -> None\n\
2272 Assign VAL to this value." },
2273 { "to_array", valpy_to_array, METH_NOARGS,
2274 "to_array () -> Value\n\
2275 Return value as an array, if possible." },
2276 {NULL} /* Sentinel */
2279 static PyNumberMethods value_object_as_number = {
2280 valpy_add,
2281 valpy_subtract,
2282 valpy_multiply,
2283 valpy_remainder,
2284 NULL, /* nb_divmod */
2285 valpy_power, /* nb_power */
2286 valpy_negative, /* nb_negative */
2287 valpy_positive, /* nb_positive */
2288 valpy_absolute, /* nb_absolute */
2289 valpy_nonzero, /* nb_nonzero */
2290 valpy_invert, /* nb_invert */
2291 valpy_lsh, /* nb_lshift */
2292 valpy_rsh, /* nb_rshift */
2293 valpy_and, /* nb_and */
2294 valpy_xor, /* nb_xor */
2295 valpy_or, /* nb_or */
2296 valpy_long, /* nb_int */
2297 NULL, /* reserved */
2298 valpy_float, /* nb_float */
2299 NULL, /* nb_inplace_add */
2300 NULL, /* nb_inplace_subtract */
2301 NULL, /* nb_inplace_multiply */
2302 NULL, /* nb_inplace_remainder */
2303 NULL, /* nb_inplace_power */
2304 NULL, /* nb_inplace_lshift */
2305 NULL, /* nb_inplace_rshift */
2306 NULL, /* nb_inplace_and */
2307 NULL, /* nb_inplace_xor */
2308 NULL, /* nb_inplace_or */
2309 NULL, /* nb_floor_divide */
2310 valpy_divide, /* nb_true_divide */
2311 NULL, /* nb_inplace_floor_divide */
2312 NULL, /* nb_inplace_true_divide */
2313 valpy_long, /* nb_index */
2316 static PyMappingMethods value_object_as_mapping = {
2317 valpy_length,
2318 valpy_getitem,
2319 valpy_setitem
2322 PyTypeObject value_object_type = {
2323 PyVarObject_HEAD_INIT (NULL, 0)
2324 "gdb.Value", /*tp_name*/
2325 sizeof (value_object), /*tp_basicsize*/
2326 0, /*tp_itemsize*/
2327 valpy_dealloc, /*tp_dealloc*/
2328 0, /*tp_print*/
2329 0, /*tp_getattr*/
2330 0, /*tp_setattr*/
2331 0, /*tp_compare*/
2332 0, /*tp_repr*/
2333 &value_object_as_number, /*tp_as_number*/
2334 0, /*tp_as_sequence*/
2335 &value_object_as_mapping, /*tp_as_mapping*/
2336 valpy_hash, /*tp_hash*/
2337 valpy_call, /*tp_call*/
2338 valpy_str, /*tp_str*/
2339 0, /*tp_getattro*/
2340 0, /*tp_setattro*/
2341 0, /*tp_as_buffer*/
2342 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
2343 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
2344 "GDB value object", /* tp_doc */
2345 0, /* tp_traverse */
2346 0, /* tp_clear */
2347 valpy_richcompare, /* tp_richcompare */
2348 0, /* tp_weaklistoffset */
2349 0, /* tp_iter */
2350 0, /* tp_iternext */
2351 value_object_methods, /* tp_methods */
2352 0, /* tp_members */
2353 value_object_getset, /* tp_getset */
2354 0, /* tp_base */
2355 0, /* tp_dict */
2356 0, /* tp_descr_get */
2357 0, /* tp_descr_set */
2358 0, /* tp_dictoffset */
2359 valpy_init, /* tp_init */
2360 0, /* tp_alloc */
2361 PyType_GenericNew, /* tp_new */