1 /* Python interface to values.
3 Copyright (C) 2008-2019 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 /* Called when a new gdb.Value object needs to be allocated. Returns NULL on
111 error, with a python exception set. */
113 valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
115 struct value *value = NULL; /* Initialize to appease gcc warning. */
116 value_object *value_obj;
118 if (PyTuple_Size (args) != 1)
120 PyErr_SetString (PyExc_TypeError, _("Value object creation takes only "
125 value_obj = (value_object *) subtype->tp_alloc (subtype, 1);
126 if (value_obj == NULL)
128 PyErr_SetString (PyExc_MemoryError, _("Could not allocate memory to "
129 "create Value object."));
133 value = convert_value_from_python (PyTuple_GetItem (args, 0));
136 subtype->tp_free (value_obj);
140 value_obj->value = release_value (value).release ();
141 value_obj->address = NULL;
142 value_obj->type = NULL;
143 value_obj->dynamic_type = NULL;
144 note_value (value_obj);
146 return (PyObject *) value_obj;
149 /* Iterate over all the Value objects, calling preserve_one_value on
152 gdbpy_preserve_values (const struct extension_language_defn *extlang,
153 struct objfile *objfile, htab_t copied_types)
157 for (iter = values_in_python; iter; iter = iter->next)
158 preserve_one_value (iter->value, objfile, copied_types);
161 /* Given a value of a pointer type, apply the C unary * operator to it. */
163 valpy_dereference (PyObject *self, PyObject *args)
165 PyObject *result = NULL;
169 struct value *res_val;
170 scoped_value_mark free_values;
172 res_val = value_ind (((value_object *) self)->value);
173 result = value_to_value_object (res_val);
175 CATCH (except, RETURN_MASK_ALL)
177 GDB_PY_HANDLE_EXCEPTION (except);
184 /* Given a value of a pointer type or a reference type, return the value
185 referenced. The difference between this function and valpy_dereference is
186 that the latter applies * unary operator to a value, which need not always
187 result in the value referenced. For example, for a value which is a reference
188 to an 'int' pointer ('int *'), valpy_dereference will result in a value of
189 type 'int' while valpy_referenced_value will result in a value of type
193 valpy_referenced_value (PyObject *self, PyObject *args)
195 PyObject *result = NULL;
199 struct value *self_val, *res_val;
200 scoped_value_mark free_values;
202 self_val = ((value_object *) self)->value;
203 switch (TYPE_CODE (check_typedef (value_type (self_val))))
206 res_val = value_ind (self_val);
209 case TYPE_CODE_RVALUE_REF:
210 res_val = coerce_ref (self_val);
213 error(_("Trying to get the referenced value from a value which is "
214 "neither a pointer nor a reference."));
217 result = value_to_value_object (res_val);
219 CATCH (except, RETURN_MASK_ALL)
221 GDB_PY_HANDLE_EXCEPTION (except);
228 /* Return a value which is a reference to the value. */
231 valpy_reference_value (PyObject *self, PyObject *args, enum type_code refcode)
233 PyObject *result = NULL;
237 struct value *self_val;
238 scoped_value_mark free_values;
240 self_val = ((value_object *) self)->value;
241 result = value_to_value_object (value_ref (self_val, refcode));
243 CATCH (except, RETURN_MASK_ALL)
245 GDB_PY_HANDLE_EXCEPTION (except);
253 valpy_lvalue_reference_value (PyObject *self, PyObject *args)
255 return valpy_reference_value (self, args, TYPE_CODE_REF);
259 valpy_rvalue_reference_value (PyObject *self, PyObject *args)
261 return valpy_reference_value (self, args, TYPE_CODE_RVALUE_REF);
264 /* Return a "const" qualified version of the value. */
267 valpy_const_value (PyObject *self, PyObject *args)
269 PyObject *result = NULL;
273 struct value *self_val, *res_val;
274 scoped_value_mark free_values;
276 self_val = ((value_object *) self)->value;
277 res_val = make_cv_value (1, 0, self_val);
278 result = value_to_value_object (res_val);
280 CATCH (except, RETURN_MASK_ALL)
282 GDB_PY_HANDLE_EXCEPTION (except);
289 /* Return "&value". */
291 valpy_get_address (PyObject *self, void *closure)
293 value_object *val_obj = (value_object *) self;
295 if (!val_obj->address)
299 struct value *res_val;
300 scoped_value_mark free_values;
302 res_val = value_addr (val_obj->value);
303 val_obj->address = value_to_value_object (res_val);
305 CATCH (except, RETURN_MASK_ALL)
307 val_obj->address = Py_None;
313 Py_XINCREF (val_obj->address);
315 return val_obj->address;
318 /* Return type of the value. */
320 valpy_get_type (PyObject *self, void *closure)
322 value_object *obj = (value_object *) self;
326 obj->type = type_to_type_object (value_type (obj->value));
330 Py_INCREF (obj->type);
334 /* Return dynamic type of the value. */
337 valpy_get_dynamic_type (PyObject *self, void *closure)
339 value_object *obj = (value_object *) self;
340 struct type *type = NULL;
342 if (obj->dynamic_type != NULL)
344 Py_INCREF (obj->dynamic_type);
345 return obj->dynamic_type;
350 struct value *val = obj->value;
351 scoped_value_mark free_values;
353 type = value_type (val);
354 type = check_typedef (type);
356 if (((TYPE_CODE (type) == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type))
357 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
359 struct value *target;
360 int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
363 target = value_ind (val);
365 target = coerce_ref (val);
366 type = value_rtti_type (target, NULL, NULL, NULL);
371 type = lookup_pointer_type (type);
373 type = lookup_lvalue_reference_type (type);
376 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
377 type = value_rtti_type (val, NULL, NULL, NULL);
380 /* Re-use object's static type. */
384 CATCH (except, RETURN_MASK_ALL)
386 GDB_PY_HANDLE_EXCEPTION (except);
391 obj->dynamic_type = valpy_get_type (self, NULL);
393 obj->dynamic_type = type_to_type_object (type);
395 Py_XINCREF (obj->dynamic_type);
396 return obj->dynamic_type;
399 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
400 string. Return a PyObject representing a lazy_string_object type.
401 A lazy string is a pointer to a string with an optional encoding and
402 length. If ENCODING is not given, encoding is set to None. If an
403 ENCODING is provided the encoding parameter is set to ENCODING, but
404 the string is not encoded.
405 If LENGTH is provided then the length parameter is set to LENGTH.
406 Otherwise if the value is an array of known length then the array's length
407 is used. Otherwise the length will be set to -1 (meaning first null of
410 Note: In order to not break any existing uses this allows creating
411 lazy strings from anything. PR 20769. E.g.,
412 gdb.parse_and_eval("my_int_variable").lazy_string().
413 "It's easier to relax restrictions than it is to impose them after the
414 fact." So we should be flagging any unintended uses as errors, but it's
415 perhaps too late for that. */
418 valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
420 gdb_py_longest length = -1;
421 struct value *value = ((value_object *) self)->value;
422 const char *user_encoding = NULL;
423 static const char *keywords[] = { "encoding", "length", NULL };
424 PyObject *str_obj = NULL;
426 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG,
427 keywords, &user_encoding, &length))
432 PyErr_SetString (PyExc_ValueError, _("Invalid length."));
438 scoped_value_mark free_values;
439 struct type *type, *realtype;
442 type = value_type (value);
443 realtype = check_typedef (type);
445 switch (TYPE_CODE (realtype))
447 case TYPE_CODE_ARRAY:
449 LONGEST array_length = -1;
450 LONGEST low_bound, high_bound;
452 /* PR 20786: There's no way to specify an array of length zero.
453 Record a length of [0,-1] which is how Ada does it. Anything
454 we do is broken, but this one possible solution. */
455 if (get_array_bounds (realtype, &low_bound, &high_bound))
456 array_length = high_bound - low_bound + 1;
458 length = array_length;
459 else if (array_length == -1)
461 type = lookup_array_range_type (TYPE_TARGET_TYPE (realtype),
464 else if (length != array_length)
466 /* We need to create a new array type with the
468 if (length > array_length)
469 error (_("Length is larger than array size."));
470 type = lookup_array_range_type (TYPE_TARGET_TYPE (realtype),
472 low_bound + length - 1);
474 addr = value_address (value);
478 /* If a length is specified we defer creating an array of the
479 specified width until we need to. */
480 addr = value_as_address (value);
483 /* Should flag an error here. PR 20769. */
484 addr = value_address (value);
488 str_obj = gdbpy_create_lazy_string_object (addr, length, user_encoding,
491 CATCH (except, RETURN_MASK_ALL)
493 GDB_PY_HANDLE_EXCEPTION (except);
500 /* Implementation of gdb.Value.string ([encoding] [, errors]
501 [, length]) -> string. Return Unicode string with value contents.
502 If ENCODING is not given, the string is assumed to be encoded in
503 the target's charset. If LENGTH is provided, only fetch string to
504 the length provided. */
507 valpy_string (PyObject *self, PyObject *args, PyObject *kw)
510 gdb::unique_xmalloc_ptr<gdb_byte> buffer;
511 struct value *value = ((value_object *) self)->value;
512 const char *encoding = NULL;
513 const char *errors = NULL;
514 const char *user_encoding = NULL;
515 const char *la_encoding = NULL;
516 struct type *char_type;
517 static const char *keywords[] = { "encoding", "errors", "length", NULL };
519 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords,
520 &user_encoding, &errors, &length))
525 LA_GET_STRING (value, &buffer, &length, &char_type, &la_encoding);
527 CATCH (except, RETURN_MASK_ALL)
529 GDB_PY_HANDLE_EXCEPTION (except);
533 encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding;
534 return PyUnicode_Decode ((const char *) buffer.get (),
535 length * TYPE_LENGTH (char_type),
539 /* A helper function that implements the various cast operators. */
542 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
544 PyObject *type_obj, *result = NULL;
547 if (! PyArg_ParseTuple (args, "O", &type_obj))
550 type = type_object_to_type (type_obj);
553 PyErr_SetString (PyExc_RuntimeError,
554 _("Argument must be a type."));
560 struct value *val = ((value_object *) self)->value;
561 struct value *res_val;
562 scoped_value_mark free_values;
564 if (op == UNOP_DYNAMIC_CAST)
565 res_val = value_dynamic_cast (type, val);
566 else if (op == UNOP_REINTERPRET_CAST)
567 res_val = value_reinterpret_cast (type, val);
570 gdb_assert (op == UNOP_CAST);
571 res_val = value_cast (type, val);
574 result = value_to_value_object (res_val);
576 CATCH (except, RETURN_MASK_ALL)
578 GDB_PY_HANDLE_EXCEPTION (except);
585 /* Implementation of the "cast" method. */
588 valpy_cast (PyObject *self, PyObject *args)
590 return valpy_do_cast (self, args, UNOP_CAST);
593 /* Implementation of the "dynamic_cast" method. */
596 valpy_dynamic_cast (PyObject *self, PyObject *args)
598 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
601 /* Implementation of the "reinterpret_cast" method. */
604 valpy_reinterpret_cast (PyObject *self, PyObject *args)
606 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
610 valpy_length (PyObject *self)
612 /* We don't support getting the number of elements in a struct / class. */
613 PyErr_SetString (PyExc_NotImplementedError,
614 _("Invalid operation on gdb.Value."));
618 /* Return 1 if the gdb.Field object FIELD is present in the value V.
619 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
622 value_has_field (struct value *v, PyObject *field)
624 struct type *parent_type, *val_type;
625 enum type_code type_code;
626 gdbpy_ref<> type_object (PyObject_GetAttrString (field, "parent_type"));
629 if (type_object == NULL)
632 parent_type = type_object_to_type (type_object.get ());
633 if (parent_type == NULL)
635 PyErr_SetString (PyExc_TypeError,
636 _("'parent_type' attribute of gdb.Field object is not a"
637 "gdb.Type object."));
643 val_type = value_type (v);
644 val_type = check_typedef (val_type);
645 if (TYPE_IS_REFERENCE (val_type) || TYPE_CODE (val_type) == TYPE_CODE_PTR)
646 val_type = check_typedef (TYPE_TARGET_TYPE (val_type));
648 type_code = TYPE_CODE (val_type);
649 if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION)
650 && types_equal (val_type, parent_type))
655 CATCH (except, RETURN_MASK_ALL)
657 GDB_PY_SET_HANDLE_EXCEPTION (except);
664 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
665 Returns 1 if the flag value is true, 0 if it is false, and -1 if
666 a Python error occurs. */
669 get_field_flag (PyObject *field, const char *flag_name)
671 gdbpy_ref<> flag_object (PyObject_GetAttrString (field, flag_name));
673 if (flag_object == NULL)
676 return PyObject_IsTrue (flag_object.get ());
679 /* Return the "type" attribute of a gdb.Field object.
680 Returns NULL on error, with a Python exception set. */
683 get_field_type (PyObject *field)
685 gdbpy_ref<> ftype_obj (PyObject_GetAttrString (field, "type"));
688 if (ftype_obj == NULL)
690 ftype = type_object_to_type (ftype_obj.get ());
692 PyErr_SetString (PyExc_TypeError,
693 _("'type' attribute of gdb.Field object is not a "
694 "gdb.Type object."));
699 /* Given string name or a gdb.Field object corresponding to an element inside
700 a structure, return its value object. Returns NULL on error, with a python
704 valpy_getitem (PyObject *self, PyObject *key)
706 struct gdb_exception except = exception_none;
707 value_object *self_value = (value_object *) self;
708 gdb::unique_xmalloc_ptr<char> field;
709 struct type *base_class_type = NULL, *field_type = NULL;
711 PyObject *result = NULL;
713 if (gdbpy_is_string (key))
715 field = python_string_to_host_string (key);
719 else if (gdbpy_is_field (key))
721 int is_base_class, valid_field;
723 valid_field = value_has_field (self_value->value, key);
726 else if (valid_field == 0)
728 PyErr_SetString (PyExc_TypeError,
729 _("Invalid lookup for a field not contained in "
735 is_base_class = get_field_flag (key, "is_base_class");
736 if (is_base_class < 0)
738 else if (is_base_class > 0)
740 base_class_type = get_field_type (key);
741 if (base_class_type == NULL)
746 gdbpy_ref<> name_obj (PyObject_GetAttrString (key, "name"));
748 if (name_obj == NULL)
751 if (name_obj != Py_None)
753 field = python_string_to_host_string (name_obj.get ());
759 if (!PyObject_HasAttrString (key, "bitpos"))
761 PyErr_SetString (PyExc_AttributeError,
762 _("gdb.Field object has no name and no "
763 "'bitpos' attribute."));
767 gdbpy_ref<> bitpos_obj (PyObject_GetAttrString (key, "bitpos"));
768 if (bitpos_obj == NULL)
770 if (!gdb_py_int_as_long (bitpos_obj.get (), &bitpos))
773 field_type = get_field_type (key);
774 if (field_type == NULL)
782 struct value *tmp = self_value->value;
783 struct value *res_val = NULL;
784 scoped_value_mark free_values;
787 res_val = value_struct_elt (&tmp, NULL, field.get (), NULL,
788 "struct/class/union");
789 else if (bitpos >= 0)
790 res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type,
791 "struct/class/union");
792 else if (base_class_type != NULL)
794 struct type *val_type;
796 val_type = check_typedef (value_type (tmp));
797 if (TYPE_CODE (val_type) == TYPE_CODE_PTR)
798 res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
799 else if (TYPE_CODE (val_type) == TYPE_CODE_REF)
800 res_val = value_cast (lookup_lvalue_reference_type (base_class_type),
802 else if (TYPE_CODE (val_type) == TYPE_CODE_RVALUE_REF)
803 res_val = value_cast (lookup_rvalue_reference_type (base_class_type),
806 res_val = value_cast (base_class_type, tmp);
810 /* Assume we are attempting an array access, and let the
811 value code throw an exception if the index has an invalid
813 struct value *idx = convert_value_from_python (key);
817 /* Check the value's type is something that can be accessed via
821 tmp = coerce_ref (tmp);
822 type = check_typedef (value_type (tmp));
823 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
824 && TYPE_CODE (type) != TYPE_CODE_PTR)
825 error (_("Cannot subscript requested type."));
827 res_val = value_subscript (tmp, value_as_long (idx));
832 result = value_to_value_object (res_val);
834 CATCH (ex, RETURN_MASK_ALL)
840 GDB_PY_HANDLE_EXCEPTION (except);
846 valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
848 PyErr_Format (PyExc_NotImplementedError,
849 _("Setting of struct elements is not currently supported."));
853 /* Called by the Python interpreter to perform an inferior function
854 call on the value. Returns NULL on error, with a python exception set. */
856 valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
858 Py_ssize_t args_count;
859 struct value *function = ((value_object *) self)->value;
860 struct value **vargs = NULL;
861 struct type *ftype = NULL;
862 PyObject *result = NULL;
866 ftype = check_typedef (value_type (function));
868 CATCH (except, RETURN_MASK_ALL)
870 GDB_PY_HANDLE_EXCEPTION (except);
874 if (TYPE_CODE (ftype) != TYPE_CODE_FUNC)
876 PyErr_SetString (PyExc_RuntimeError,
877 _("Value is not callable (not TYPE_CODE_FUNC)."));
881 if (! PyTuple_Check (args))
883 PyErr_SetString (PyExc_TypeError,
884 _("Inferior arguments must be provided in a tuple."));
888 args_count = PyTuple_Size (args);
893 vargs = XALLOCAVEC (struct value *, args_count);
894 for (i = 0; i < args_count; i++)
896 PyObject *item = PyTuple_GetItem (args, i);
901 vargs[i] = convert_value_from_python (item);
902 if (vargs[i] == NULL)
909 scoped_value_mark free_values;
912 = call_function_by_hand (function, NULL,
913 gdb::make_array_view (vargs, args_count));
914 result = value_to_value_object (return_value);
916 CATCH (except, RETURN_MASK_ALL)
918 GDB_PY_HANDLE_EXCEPTION (except);
925 /* Called by the Python interpreter to obtain string representation
928 valpy_str (PyObject *self)
930 struct value_print_options opts;
932 get_user_print_options (&opts);
939 common_val_print (((value_object *) self)->value, &stb, 0,
940 &opts, python_language);
942 CATCH (except, RETURN_MASK_ALL)
944 GDB_PY_HANDLE_EXCEPTION (except);
948 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
951 /* Implements gdb.Value.is_optimized_out. */
953 valpy_get_is_optimized_out (PyObject *self, void *closure)
955 struct value *value = ((value_object *) self)->value;
960 opt = value_optimized_out (value);
962 CATCH (except, RETURN_MASK_ALL)
964 GDB_PY_HANDLE_EXCEPTION (except);
974 /* Implements gdb.Value.is_lazy. */
976 valpy_get_is_lazy (PyObject *self, void *closure)
978 struct value *value = ((value_object *) self)->value;
983 opt = value_lazy (value);
985 CATCH (except, RETURN_MASK_ALL)
987 GDB_PY_HANDLE_EXCEPTION (except);
997 /* Implements gdb.Value.fetch_lazy (). */
999 valpy_fetch_lazy (PyObject *self, PyObject *args)
1001 struct value *value = ((value_object *) self)->value;
1005 if (value_lazy (value))
1006 value_fetch_lazy (value);
1008 CATCH (except, RETURN_MASK_ALL)
1010 GDB_PY_HANDLE_EXCEPTION (except);
1017 /* Calculate and return the address of the PyObject as the value of
1018 the builtin __hash__ call. */
1020 valpy_hash (PyObject *self)
1022 return (intptr_t) self;
1040 /* If TYPE is a reference, return the target; otherwise return TYPE. */
1041 #define STRIP_REFERENCE(TYPE) \
1042 (TYPE_IS_REFERENCE (TYPE) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
1044 /* Helper for valpy_binop. Returns a value object which is the result
1045 of applying the operation specified by OPCODE to the given
1046 arguments. Throws a GDB exception on error. */
1049 valpy_binop_throw (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1051 PyObject *result = NULL;
1053 struct value *arg1, *arg2;
1054 struct value *res_val = NULL;
1055 enum exp_opcode op = OP_NULL;
1058 scoped_value_mark free_values;
1060 /* If the gdb.Value object is the second operand, then it will be
1061 passed to us as the OTHER argument, and SELF will be an entirely
1062 different kind of object, altogether. Because of this, we can't
1063 assume self is a gdb.Value object and need to convert it from
1065 arg1 = convert_value_from_python (self);
1069 arg2 = convert_value_from_python (other);
1077 struct type *ltype = value_type (arg1);
1078 struct type *rtype = value_type (arg2);
1080 ltype = check_typedef (ltype);
1081 ltype = STRIP_REFERENCE (ltype);
1082 rtype = check_typedef (rtype);
1083 rtype = STRIP_REFERENCE (rtype);
1086 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
1087 && is_integral_type (rtype))
1088 res_val = value_ptradd (arg1, value_as_long (arg2));
1089 else if (TYPE_CODE (rtype) == TYPE_CODE_PTR
1090 && is_integral_type (ltype))
1091 res_val = value_ptradd (arg2, value_as_long (arg1));
1101 struct type *ltype = value_type (arg1);
1102 struct type *rtype = value_type (arg2);
1104 ltype = check_typedef (ltype);
1105 ltype = STRIP_REFERENCE (ltype);
1106 rtype = check_typedef (rtype);
1107 rtype = STRIP_REFERENCE (rtype);
1110 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
1111 && TYPE_CODE (rtype) == TYPE_CODE_PTR)
1112 /* A ptrdiff_t for the target would be preferable here. */
1113 res_val = value_from_longest (builtin_type_pyint,
1114 value_ptrdiff (arg1, arg2));
1115 else if (TYPE_CODE (ltype) == TYPE_CODE_PTR
1116 && is_integral_type (rtype))
1117 res_val = value_ptradd (arg1, - value_as_long (arg2));
1144 op = BINOP_BITWISE_AND;
1147 op = BINOP_BITWISE_IOR;
1150 op = BINOP_BITWISE_XOR;
1156 if (binop_user_defined_p (op, arg1, arg2))
1157 res_val = value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
1159 res_val = value_binop (arg1, arg2, op);
1163 result = value_to_value_object (res_val);
1168 /* Returns a value object which is the result of applying the operation
1169 specified by OPCODE to the given arguments. Returns NULL on error, with
1170 a python exception set. */
1172 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1174 PyObject *result = NULL;
1178 result = valpy_binop_throw (opcode, self, other);
1180 CATCH (except, RETURN_MASK_ALL)
1182 GDB_PY_HANDLE_EXCEPTION (except);
1190 valpy_add (PyObject *self, PyObject *other)
1192 return valpy_binop (VALPY_ADD, self, other);
1196 valpy_subtract (PyObject *self, PyObject *other)
1198 return valpy_binop (VALPY_SUB, self, other);
1202 valpy_multiply (PyObject *self, PyObject *other)
1204 return valpy_binop (VALPY_MUL, self, other);
1208 valpy_divide (PyObject *self, PyObject *other)
1210 return valpy_binop (VALPY_DIV, self, other);
1214 valpy_remainder (PyObject *self, PyObject *other)
1216 return valpy_binop (VALPY_REM, self, other);
1220 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
1222 /* We don't support the ternary form of pow. I don't know how to express
1223 that, so let's just throw NotImplementedError to at least do something
1225 if (unused != Py_None)
1227 PyErr_SetString (PyExc_NotImplementedError,
1228 "Invalid operation on gdb.Value.");
1232 return valpy_binop (VALPY_POW, self, other);
1236 valpy_negative (PyObject *self)
1238 PyObject *result = NULL;
1242 /* Perhaps overkill, but consistency has some virtue. */
1243 scoped_value_mark free_values;
1246 val = value_neg (((value_object *) self)->value);
1247 result = value_to_value_object (val);
1249 CATCH (except, RETURN_MASK_ALL)
1251 GDB_PY_HANDLE_EXCEPTION (except);
1259 valpy_positive (PyObject *self)
1261 return value_to_value_object (((value_object *) self)->value);
1265 valpy_absolute (PyObject *self)
1267 struct value *value = ((value_object *) self)->value;
1272 scoped_value_mark free_values;
1274 if (value_less (value, value_zero (value_type (value), not_lval)))
1277 CATCH (except, RETURN_MASK_ALL)
1279 GDB_PY_HANDLE_EXCEPTION (except);
1284 return valpy_positive (self);
1286 return valpy_negative (self);
1289 /* Implements boolean evaluation of gdb.Value. */
1291 valpy_nonzero (PyObject *self)
1293 struct gdb_exception except = exception_none;
1294 value_object *self_value = (value_object *) self;
1296 int nonzero = 0; /* Appease GCC warning. */
1300 type = check_typedef (value_type (self_value->value));
1302 if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
1303 nonzero = !!value_as_long (self_value->value);
1304 else if (is_floating_value (self_value->value))
1305 nonzero = !target_float_is_zero (value_contents (self_value->value),
1308 /* All other values are True. */
1311 CATCH (ex, RETURN_MASK_ALL)
1317 /* This is not documented in the Python documentation, but if this
1318 function fails, return -1 as slot_nb_nonzero does (the default
1319 Python nonzero function). */
1320 GDB_PY_SET_HANDLE_EXCEPTION (except);
1325 /* Implements ~ for value objects. */
1327 valpy_invert (PyObject *self)
1329 struct value *val = NULL;
1333 val = value_complement (((value_object *) self)->value);
1335 CATCH (except, RETURN_MASK_ALL)
1337 GDB_PY_HANDLE_EXCEPTION (except);
1341 return value_to_value_object (val);
1344 /* Implements left shift for value objects. */
1346 valpy_lsh (PyObject *self, PyObject *other)
1348 return valpy_binop (VALPY_LSH, self, other);
1351 /* Implements right shift for value objects. */
1353 valpy_rsh (PyObject *self, PyObject *other)
1355 return valpy_binop (VALPY_RSH, self, other);
1358 /* Implements bitwise and for value objects. */
1360 valpy_and (PyObject *self, PyObject *other)
1362 return valpy_binop (VALPY_BITAND, self, other);
1365 /* Implements bitwise or for value objects. */
1367 valpy_or (PyObject *self, PyObject *other)
1369 return valpy_binop (VALPY_BITOR, self, other);
1372 /* Implements bitwise xor for value objects. */
1374 valpy_xor (PyObject *self, PyObject *other)
1376 return valpy_binop (VALPY_BITXOR, self, other);
1379 /* Helper for valpy_richcompare. Implements comparison operations for
1380 value objects. Returns true/false on success. Returns -1 with a
1381 Python exception set if a Python error is detected. Throws a GDB
1382 exception on other errors (memory error, etc.). */
1385 valpy_richcompare_throw (PyObject *self, PyObject *other, int op)
1388 struct value *value_other;
1389 struct value *value_self;
1391 scoped_value_mark free_values;
1393 value_other = convert_value_from_python (other);
1394 if (value_other == NULL)
1397 value_self = ((value_object *) self)->value;
1402 result = value_less (value_self, value_other);
1405 result = value_less (value_self, value_other)
1406 || value_equal (value_self, value_other);
1409 result = value_equal (value_self, value_other);
1412 result = !value_equal (value_self, value_other);
1415 result = value_less (value_other, value_self);
1418 result = (value_less (value_other, value_self)
1419 || value_equal (value_self, value_other));
1423 PyErr_SetString (PyExc_NotImplementedError,
1424 _("Invalid operation on gdb.Value."));
1433 /* Implements comparison operations for value objects. Returns NULL on error,
1434 with a python exception set. */
1436 valpy_richcompare (PyObject *self, PyObject *other, int op)
1440 if (other == Py_None)
1441 /* Comparing with None is special. From what I can tell, in Python
1442 None is smaller than anything else. */
1454 PyErr_SetString (PyExc_NotImplementedError,
1455 _("Invalid operation on gdb.Value."));
1461 result = valpy_richcompare_throw (self, other, op);
1463 CATCH (except, RETURN_MASK_ALL)
1465 GDB_PY_HANDLE_EXCEPTION (except);
1469 /* In this case, the Python exception has already been set. */
1480 /* Implements conversion to int. */
1482 valpy_int (PyObject *self)
1484 struct value *value = ((value_object *) self)->value;
1485 struct type *type = value_type (value);
1490 if (is_floating_value (value))
1492 type = builtin_type_pylong;
1493 value = value_cast (type, value);
1496 if (!is_integral_type (type)
1497 && TYPE_CODE (type) != TYPE_CODE_PTR)
1498 error (_("Cannot convert value to int."));
1500 l = value_as_long (value);
1502 CATCH (except, RETURN_MASK_ALL)
1504 GDB_PY_HANDLE_EXCEPTION (except);
1508 if (TYPE_UNSIGNED (type))
1509 return gdb_py_object_from_ulongest (l).release ();
1511 return gdb_py_object_from_longest (l).release ();
1515 /* Implements conversion to long. */
1517 valpy_long (PyObject *self)
1519 struct value *value = ((value_object *) self)->value;
1520 struct type *type = value_type (value);
1525 if (is_floating_value (value))
1527 type = builtin_type_pylong;
1528 value = value_cast (type, value);
1531 type = check_typedef (type);
1533 if (!is_integral_type (type)
1534 && TYPE_CODE (type) != TYPE_CODE_PTR)
1535 error (_("Cannot convert value to long."));
1537 l = value_as_long (value);
1539 CATCH (except, RETURN_MASK_ALL)
1541 GDB_PY_HANDLE_EXCEPTION (except);
1545 if (TYPE_UNSIGNED (type))
1546 return gdb_py_long_from_ulongest (l);
1548 return gdb_py_long_from_longest (l);
1551 /* Implements conversion to float. */
1553 valpy_float (PyObject *self)
1555 struct value *value = ((value_object *) self)->value;
1556 struct type *type = value_type (value);
1561 type = check_typedef (type);
1563 if (TYPE_CODE (type) == TYPE_CODE_FLT && is_floating_value (value))
1564 d = target_float_to_host_double (value_contents (value), type);
1565 else if (TYPE_CODE (type) == TYPE_CODE_INT)
1567 /* Note that valpy_long accepts TYPE_CODE_PTR and some
1568 others here here -- but casting a pointer or bool to a
1569 float seems wrong. */
1570 d = value_as_long (value);
1573 error (_("Cannot convert value to float."));
1575 CATCH (except, RETURN_MASK_ALL)
1577 GDB_PY_HANDLE_EXCEPTION (except);
1581 return PyFloat_FromDouble (d);
1584 /* Returns an object for a value which is released from the all_values chain,
1585 so its lifetime is not bound to the execution of a command. */
1587 value_to_value_object (struct value *val)
1589 value_object *val_obj;
1591 val_obj = PyObject_New (value_object, &value_object_type);
1592 if (val_obj != NULL)
1594 val_obj->value = release_value (val).release ();
1595 val_obj->address = NULL;
1596 val_obj->type = NULL;
1597 val_obj->dynamic_type = NULL;
1598 note_value (val_obj);
1601 return (PyObject *) val_obj;
1604 /* Returns a borrowed reference to the struct value corresponding to
1605 the given value object. */
1607 value_object_to_value (PyObject *self)
1611 if (! PyObject_TypeCheck (self, &value_object_type))
1613 real = (value_object *) self;
1617 /* Try to convert a Python value to a gdb value. If the value cannot
1618 be converted, set a Python exception and return NULL. Returns a
1619 reference to a new value on the all_values chain. */
1622 convert_value_from_python (PyObject *obj)
1624 struct value *value = NULL; /* -Wall */
1627 gdb_assert (obj != NULL);
1631 if (PyBool_Check (obj))
1633 cmp = PyObject_IsTrue (obj);
1635 value = value_from_longest (builtin_type_pybool, cmp);
1637 /* Make a long logic check first. In Python 3.x, internally,
1638 all integers are represented as longs. In Python 2.x, there
1639 is still a differentiation internally between a PyInt and a
1640 PyLong. Explicitly do this long check conversion first. In
1641 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1642 to be done first to ensure we do not lose information in the
1643 conversion process. */
1644 else if (PyLong_Check (obj))
1646 LONGEST l = PyLong_AsLongLong (obj);
1648 if (PyErr_Occurred ())
1650 /* If the error was an overflow, we can try converting to
1651 ULONGEST instead. */
1652 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1654 gdbpy_err_fetch fetched_error;
1655 gdbpy_ref<> zero (PyInt_FromLong (0));
1657 /* Check whether obj is positive. */
1658 if (PyObject_RichCompareBool (obj, zero.get (), Py_GT) > 0)
1662 ul = PyLong_AsUnsignedLongLong (obj);
1663 if (! PyErr_Occurred ())
1664 value = value_from_ulongest (builtin_type_upylong, ul);
1668 /* There's nothing we can do. */
1669 fetched_error.restore ();
1674 value = value_from_longest (builtin_type_pylong, l);
1676 #if PY_MAJOR_VERSION == 2
1677 else if (PyInt_Check (obj))
1679 long l = PyInt_AsLong (obj);
1681 if (! PyErr_Occurred ())
1682 value = value_from_longest (builtin_type_pyint, l);
1685 else if (PyFloat_Check (obj))
1687 double d = PyFloat_AsDouble (obj);
1689 if (! PyErr_Occurred ())
1691 value = allocate_value (builtin_type_pyfloat);
1692 target_float_from_host_double (value_contents_raw (value),
1693 value_type (value), d);
1696 else if (gdbpy_is_string (obj))
1698 gdb::unique_xmalloc_ptr<char> s
1699 = python_string_to_target_string (obj);
1701 value = value_cstring (s.get (), strlen (s.get ()),
1702 builtin_type_pychar);
1704 else if (PyObject_TypeCheck (obj, &value_object_type))
1705 value = value_copy (((value_object *) obj)->value);
1706 else if (gdbpy_is_lazy_string (obj))
1710 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
1711 value = value_copy (((value_object *) result)->value);
1715 PyErr_Format (PyExc_TypeError,
1716 _("Could not convert Python object: %S."), obj);
1718 PyErr_Format (PyExc_TypeError,
1719 _("Could not convert Python object: %s."),
1720 PyString_AsString (PyObject_Str (obj)));
1723 CATCH (except, RETURN_MASK_ALL)
1725 gdbpy_convert_exception (except);
1733 /* Returns value object in the ARGth position in GDB's history. */
1735 gdbpy_history (PyObject *self, PyObject *args)
1738 struct value *res_val = NULL; /* Initialize to appease gcc warning. */
1740 if (!PyArg_ParseTuple (args, "i", &i))
1745 res_val = access_value_history (i);
1747 CATCH (except, RETURN_MASK_ALL)
1749 GDB_PY_HANDLE_EXCEPTION (except);
1753 return value_to_value_object (res_val);
1756 /* Return the value of a convenience variable. */
1758 gdbpy_convenience_variable (PyObject *self, PyObject *args)
1760 const char *varname;
1761 struct value *res_val = NULL;
1763 if (!PyArg_ParseTuple (args, "s", &varname))
1768 struct internalvar *var = lookup_only_internalvar (varname);
1772 res_val = value_of_internalvar (python_gdbarch, var);
1773 if (TYPE_CODE (value_type (res_val)) == TYPE_CODE_VOID)
1777 CATCH (except, RETURN_MASK_ALL)
1779 GDB_PY_HANDLE_EXCEPTION (except);
1783 if (res_val == NULL)
1786 return value_to_value_object (res_val);
1789 /* Set the value of a convenience variable. */
1791 gdbpy_set_convenience_variable (PyObject *self, PyObject *args)
1793 const char *varname;
1794 PyObject *value_obj;
1795 struct value *value = NULL;
1797 if (!PyArg_ParseTuple (args, "sO", &varname, &value_obj))
1800 /* None means to clear the variable. */
1801 if (value_obj != Py_None)
1803 value = convert_value_from_python (value_obj);
1812 struct internalvar *var = lookup_only_internalvar (varname);
1815 clear_internalvar (var);
1819 struct internalvar *var = lookup_internalvar (varname);
1821 set_internalvar (var, value);
1824 CATCH (except, RETURN_MASK_ALL)
1826 GDB_PY_HANDLE_EXCEPTION (except);
1833 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
1836 gdbpy_is_value_object (PyObject *obj)
1838 return PyObject_TypeCheck (obj, &value_object_type);
1842 gdbpy_initialize_values (void)
1844 if (PyType_Ready (&value_object_type) < 0)
1847 return gdb_pymodule_addobject (gdb_module, "Value",
1848 (PyObject *) &value_object_type);
1853 static gdb_PyGetSetDef value_object_getset[] = {
1854 { "address", valpy_get_address, NULL, "The address of the value.",
1856 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
1857 "Boolean telling whether the value is optimized "
1858 "out (i.e., not available).",
1860 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
1861 { "dynamic_type", valpy_get_dynamic_type, NULL,
1862 "Dynamic type of the value.", NULL },
1863 { "is_lazy", valpy_get_is_lazy, NULL,
1864 "Boolean telling whether the value is lazy (not fetched yet\n\
1865 from the inferior). A lazy value is fetched when needed, or when\n\
1866 the \"fetch_lazy()\" method is called.", NULL },
1867 {NULL} /* Sentinel */
1870 static PyMethodDef value_object_methods[] = {
1871 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
1872 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
1873 "dynamic_cast (gdb.Type) -> gdb.Value\n\
1874 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
1876 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
1877 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
1878 Cast the value to the supplied type, as if by the C++\n\
1879 reinterpret_cast operator."
1881 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
1882 { "referenced_value", valpy_referenced_value, METH_NOARGS,
1883 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
1884 { "reference_value", valpy_lvalue_reference_value, METH_NOARGS,
1885 "Return a value of type TYPE_CODE_REF referencing this value." },
1886 { "rvalue_reference_value", valpy_rvalue_reference_value, METH_NOARGS,
1887 "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
1888 { "const_value", valpy_const_value, METH_NOARGS,
1889 "Return a 'const' qualied version of the same value." },
1890 { "lazy_string", (PyCFunction) valpy_lazy_string,
1891 METH_VARARGS | METH_KEYWORDS,
1892 "lazy_string ([encoding] [, length]) -> lazy_string\n\
1893 Return a lazy string representation of the value." },
1894 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
1895 "string ([encoding] [, errors] [, length]) -> string\n\
1896 Return Unicode string representation of the value." },
1897 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
1898 "Fetches the value from the inferior, if it was lazy." },
1899 {NULL} /* Sentinel */
1902 static PyNumberMethods value_object_as_number = {
1910 NULL, /* nb_divmod */
1911 valpy_power, /* nb_power */
1912 valpy_negative, /* nb_negative */
1913 valpy_positive, /* nb_positive */
1914 valpy_absolute, /* nb_absolute */
1915 valpy_nonzero, /* nb_nonzero */
1916 valpy_invert, /* nb_invert */
1917 valpy_lsh, /* nb_lshift */
1918 valpy_rsh, /* nb_rshift */
1919 valpy_and, /* nb_and */
1920 valpy_xor, /* nb_xor */
1921 valpy_or, /* nb_or */
1923 valpy_long, /* nb_int */
1924 NULL, /* reserved */
1926 NULL, /* nb_coerce */
1927 valpy_int, /* nb_int */
1928 valpy_long, /* nb_long */
1930 valpy_float, /* nb_float */
1935 NULL, /* nb_inplace_add */
1936 NULL, /* nb_inplace_subtract */
1937 NULL, /* nb_inplace_multiply */
1939 NULL, /* nb_inplace_divide */
1941 NULL, /* nb_inplace_remainder */
1942 NULL, /* nb_inplace_power */
1943 NULL, /* nb_inplace_lshift */
1944 NULL, /* nb_inplace_rshift */
1945 NULL, /* nb_inplace_and */
1946 NULL, /* nb_inplace_xor */
1947 NULL, /* nb_inplace_or */
1948 NULL, /* nb_floor_divide */
1949 valpy_divide, /* nb_true_divide */
1950 NULL, /* nb_inplace_floor_divide */
1951 NULL, /* nb_inplace_true_divide */
1952 #ifndef HAVE_LIBPYTHON2_4
1953 /* This was added in Python 2.5. */
1954 valpy_long, /* nb_index */
1955 #endif /* HAVE_LIBPYTHON2_4 */
1958 static PyMappingMethods value_object_as_mapping = {
1964 PyTypeObject value_object_type = {
1965 PyVarObject_HEAD_INIT (NULL, 0)
1966 "gdb.Value", /*tp_name*/
1967 sizeof (value_object), /*tp_basicsize*/
1969 valpy_dealloc, /*tp_dealloc*/
1975 &value_object_as_number, /*tp_as_number*/
1976 0, /*tp_as_sequence*/
1977 &value_object_as_mapping, /*tp_as_mapping*/
1978 valpy_hash, /*tp_hash*/
1979 valpy_call, /*tp_call*/
1980 valpy_str, /*tp_str*/
1984 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
1985 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
1986 "GDB value object", /* tp_doc */
1987 0, /* tp_traverse */
1989 valpy_richcompare, /* tp_richcompare */
1990 0, /* tp_weaklistoffset */
1992 0, /* tp_iternext */
1993 value_object_methods, /* tp_methods */
1995 value_object_getset, /* tp_getset */
1998 0, /* tp_descr_get */
1999 0, /* tp_descr_set */
2000 0, /* tp_dictoffset */
2003 valpy_new /* tp_new */