1 /* Python interface to values.
3 Copyright (C) 2008-2017 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/>. */
27 #include "expression.h"
31 #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 builtin_type (python_gdbarch)->builtin_long
41 /* Python's float type corresponds to C's double type. */
42 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
44 /* Python's long type corresponds to C's long long type. */
45 #define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
47 /* Python's long type corresponds to C's long long type. Unsigned version. */
48 #define builtin_type_upylong builtin_type \
49 (python_gdbarch)->builtin_unsigned_long_long
51 #define builtin_type_pybool \
52 language_bool_type (python_language, python_gdbarch)
54 #define builtin_type_pychar \
55 language_string_char_type (python_language, python_gdbarch)
57 typedef struct value_object {
59 struct value_object *next;
60 struct value_object *prev;
64 PyObject *dynamic_type;
67 /* List of all values which are currently exposed to Python. It is
68 maintained so that when an objfile is discarded, preserve_values
69 can copy the values' types if needed. */
70 /* This variable is unnecessarily initialized to NULL in order to
71 work around a linker bug on MacOS. */
72 static value_object *values_in_python = NULL;
74 /* Called by the Python interpreter when deallocating a value object. */
76 valpy_dealloc (PyObject *obj)
78 value_object *self = (value_object *) obj;
80 /* Remove SELF from the global list. */
82 self->prev->next = self->next;
85 gdb_assert (values_in_python == self);
86 values_in_python = self->next;
89 self->next->prev = self->prev;
91 value_free (self->value);
94 /* Use braces to appease gcc warning. *sigh* */
96 Py_DECREF (self->address);
101 Py_DECREF (self->type);
104 Py_XDECREF (self->dynamic_type);
106 Py_TYPE (self)->tp_free (self);
109 /* Helper to push a Value object on the global list. */
111 note_value (value_object *value_obj)
113 value_obj->next = values_in_python;
115 value_obj->next->prev = value_obj;
116 value_obj->prev = NULL;
117 values_in_python = value_obj;
120 /* Called when a new gdb.Value object needs to be allocated. Returns NULL on
121 error, with a python exception set. */
123 valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
125 struct value *value = NULL; /* Initialize to appease gcc warning. */
126 value_object *value_obj;
128 if (PyTuple_Size (args) != 1)
130 PyErr_SetString (PyExc_TypeError, _("Value object creation takes only "
135 value_obj = (value_object *) subtype->tp_alloc (subtype, 1);
136 if (value_obj == NULL)
138 PyErr_SetString (PyExc_MemoryError, _("Could not allocate memory to "
139 "create Value object."));
143 value = convert_value_from_python (PyTuple_GetItem (args, 0));
146 subtype->tp_free (value_obj);
150 value_obj->value = value;
151 release_value_or_incref (value);
152 value_obj->address = NULL;
153 value_obj->type = NULL;
154 value_obj->dynamic_type = NULL;
155 note_value (value_obj);
157 return (PyObject *) value_obj;
160 /* Iterate over all the Value objects, calling preserve_one_value on
163 gdbpy_preserve_values (const struct extension_language_defn *extlang,
164 struct objfile *objfile, htab_t copied_types)
168 for (iter = values_in_python; iter; iter = iter->next)
169 preserve_one_value (iter->value, objfile, copied_types);
172 /* Given a value of a pointer type, apply the C unary * operator to it. */
174 valpy_dereference (PyObject *self, PyObject *args)
176 PyObject *result = NULL;
180 struct value *res_val;
181 scoped_value_mark free_values;
183 res_val = value_ind (((value_object *) self)->value);
184 result = value_to_value_object (res_val);
186 CATCH (except, RETURN_MASK_ALL)
188 GDB_PY_HANDLE_EXCEPTION (except);
195 /* Given a value of a pointer type or a reference type, return the value
196 referenced. The difference between this function and valpy_dereference is
197 that the latter applies * unary operator to a value, which need not always
198 result in the value referenced. For example, for a value which is a reference
199 to an 'int' pointer ('int *'), valpy_dereference will result in a value of
200 type 'int' while valpy_referenced_value will result in a value of type
204 valpy_referenced_value (PyObject *self, PyObject *args)
206 PyObject *result = NULL;
210 struct value *self_val, *res_val;
211 scoped_value_mark free_values;
213 self_val = ((value_object *) self)->value;
214 switch (TYPE_CODE (check_typedef (value_type (self_val))))
217 res_val = value_ind (self_val);
220 res_val = coerce_ref (self_val);
223 error(_("Trying to get the referenced value from a value which is "
224 "neither a pointer nor a reference."));
227 result = value_to_value_object (res_val);
229 CATCH (except, RETURN_MASK_ALL)
231 GDB_PY_HANDLE_EXCEPTION (except);
238 /* Return a value which is a reference to the value. */
241 valpy_reference_value (PyObject *self, PyObject *args)
243 PyObject *result = NULL;
247 struct value *self_val;
248 scoped_value_mark free_values;
250 self_val = ((value_object *) self)->value;
251 result = value_to_value_object (value_ref (self_val));
253 CATCH (except, RETURN_MASK_ALL)
255 GDB_PY_HANDLE_EXCEPTION (except);
262 /* Return a "const" qualified version of the value. */
265 valpy_const_value (PyObject *self, PyObject *args)
267 PyObject *result = NULL;
271 struct value *self_val, *res_val;
272 scoped_value_mark free_values;
274 self_val = ((value_object *) self)->value;
275 res_val = make_cv_value (1, 0, self_val);
276 result = value_to_value_object (res_val);
278 CATCH (except, RETURN_MASK_ALL)
280 GDB_PY_HANDLE_EXCEPTION (except);
287 /* Return "&value". */
289 valpy_get_address (PyObject *self, void *closure)
291 value_object *val_obj = (value_object *) self;
293 if (!val_obj->address)
297 struct value *res_val;
298 scoped_value_mark free_values;
300 res_val = value_addr (val_obj->value);
301 val_obj->address = value_to_value_object (res_val);
303 CATCH (except, RETURN_MASK_ALL)
305 val_obj->address = Py_None;
311 Py_XINCREF (val_obj->address);
313 return val_obj->address;
316 /* Return type of the value. */
318 valpy_get_type (PyObject *self, void *closure)
320 value_object *obj = (value_object *) self;
324 obj->type = type_to_type_object (value_type (obj->value));
328 Py_INCREF (obj->type);
332 /* Return dynamic type of the value. */
335 valpy_get_dynamic_type (PyObject *self, void *closure)
337 value_object *obj = (value_object *) self;
338 struct type *type = NULL;
340 if (obj->dynamic_type != NULL)
342 Py_INCREF (obj->dynamic_type);
343 return obj->dynamic_type;
348 struct value *val = obj->value;
349 scoped_value_mark free_values;
351 type = value_type (val);
352 type = check_typedef (type);
354 if (((TYPE_CODE (type) == TYPE_CODE_PTR)
355 || (TYPE_CODE (type) == TYPE_CODE_REF))
356 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
358 struct value *target;
359 int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
362 target = value_ind (val);
364 target = coerce_ref (val);
365 type = value_rtti_type (target, NULL, NULL, NULL);
370 type = lookup_pointer_type (type);
372 type = lookup_reference_type (type);
375 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
376 type = value_rtti_type (val, NULL, NULL, NULL);
379 /* Re-use object's static type. */
383 CATCH (except, RETURN_MASK_ALL)
385 GDB_PY_HANDLE_EXCEPTION (except);
390 obj->dynamic_type = valpy_get_type (self, NULL);
392 obj->dynamic_type = type_to_type_object (type);
394 Py_XINCREF (obj->dynamic_type);
395 return obj->dynamic_type;
398 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
399 string. Return a PyObject representing a lazy_string_object type.
400 A lazy string is a pointer to a string with an optional encoding and
401 length. If ENCODING is not given, encoding is set to None. If an
402 ENCODING is provided the encoding parameter is set to ENCODING, but
403 the string is not encoded.
404 If LENGTH is provided then the length parameter is set to LENGTH.
405 Otherwise if the value is an array of known length then the array's length
406 is used. Otherwise the length will be set to -1 (meaning first null of
409 Note: In order to not break any existing uses this allows creating
410 lazy strings from anything. PR 20769. E.g.,
411 gdb.parse_and_eval("my_int_variable").lazy_string().
412 "It's easier to relax restrictions than it is to impose them after the
413 fact." So we should be flagging any unintended uses as errors, but it's
414 perhaps too late for that. */
417 valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
419 gdb_py_longest length = -1;
420 struct value *value = ((value_object *) self)->value;
421 const char *user_encoding = NULL;
422 static char *keywords[] = { "encoding", "length", NULL };
423 PyObject *str_obj = NULL;
425 if (!PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG, keywords,
426 &user_encoding, &length))
431 PyErr_SetString (PyExc_ValueError, _("Invalid length."));
437 scoped_value_mark free_values;
438 struct type *type, *realtype;
441 type = value_type (value);
442 realtype = check_typedef (type);
444 switch (TYPE_CODE (realtype))
446 case TYPE_CODE_ARRAY:
448 LONGEST array_length = -1;
449 LONGEST low_bound, high_bound;
451 /* PR 20786: There's no way to specify an array of length zero.
452 Record a length of [0,-1] which is how Ada does it. Anything
453 we do is broken, but this one possible solution. */
454 if (get_array_bounds (realtype, &low_bound, &high_bound))
455 array_length = high_bound - low_bound + 1;
457 length = array_length;
458 else if (array_length == -1)
460 type = lookup_array_range_type (TYPE_TARGET_TYPE (realtype),
463 else if (length != array_length)
465 /* We need to create a new array type with the
467 if (length > array_length)
468 error (_("Length is larger than array size."));
469 type = lookup_array_range_type (TYPE_TARGET_TYPE (realtype),
471 low_bound + length - 1);
473 addr = value_address (value);
477 /* If a length is specified we defer creating an array of the
478 specified width until we need to. */
479 addr = value_as_address (value);
482 /* Should flag an error here. PR 20769. */
483 addr = value_address (value);
487 str_obj = gdbpy_create_lazy_string_object (addr, length, user_encoding,
490 CATCH (except, RETURN_MASK_ALL)
492 GDB_PY_HANDLE_EXCEPTION (except);
499 /* Implementation of gdb.Value.string ([encoding] [, errors]
500 [, length]) -> string. Return Unicode string with value contents.
501 If ENCODING is not given, the string is assumed to be encoded in
502 the target's charset. If LENGTH is provided, only fetch string to
503 the length provided. */
506 valpy_string (PyObject *self, PyObject *args, PyObject *kw)
510 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 char *keywords[] = { "encoding", "errors", "length", NULL };
519 if (!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 unicode = PyUnicode_Decode ((const char *) buffer,
535 length * TYPE_LENGTH (char_type),
542 /* A helper function that implements the various cast operators. */
545 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
547 PyObject *type_obj, *result = NULL;
550 if (! PyArg_ParseTuple (args, "O", &type_obj))
553 type = type_object_to_type (type_obj);
556 PyErr_SetString (PyExc_RuntimeError,
557 _("Argument must be a type."));
563 struct value *val = ((value_object *) self)->value;
564 struct value *res_val;
565 scoped_value_mark free_values;
567 if (op == UNOP_DYNAMIC_CAST)
568 res_val = value_dynamic_cast (type, val);
569 else if (op == UNOP_REINTERPRET_CAST)
570 res_val = value_reinterpret_cast (type, val);
573 gdb_assert (op == UNOP_CAST);
574 res_val = value_cast (type, val);
577 result = value_to_value_object (res_val);
579 CATCH (except, RETURN_MASK_ALL)
581 GDB_PY_HANDLE_EXCEPTION (except);
588 /* Implementation of the "cast" method. */
591 valpy_cast (PyObject *self, PyObject *args)
593 return valpy_do_cast (self, args, UNOP_CAST);
596 /* Implementation of the "dynamic_cast" method. */
599 valpy_dynamic_cast (PyObject *self, PyObject *args)
601 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
604 /* Implementation of the "reinterpret_cast" method. */
607 valpy_reinterpret_cast (PyObject *self, PyObject *args)
609 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
613 valpy_length (PyObject *self)
615 /* We don't support getting the number of elements in a struct / class. */
616 PyErr_SetString (PyExc_NotImplementedError,
617 _("Invalid operation on gdb.Value."));
621 /* Return 1 if the gdb.Field object FIELD is present in the value V.
622 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
625 value_has_field (struct value *v, PyObject *field)
627 struct type *parent_type, *val_type;
628 enum type_code type_code;
629 gdbpy_ref<> type_object (PyObject_GetAttrString (field, "parent_type"));
632 if (type_object == NULL)
635 parent_type = type_object_to_type (type_object.get ());
636 if (parent_type == NULL)
638 PyErr_SetString (PyExc_TypeError,
639 _("'parent_type' attribute of gdb.Field object is not a"
640 "gdb.Type object."));
646 val_type = value_type (v);
647 val_type = check_typedef (val_type);
648 if (TYPE_CODE (val_type) == TYPE_CODE_REF
649 || TYPE_CODE (val_type) == TYPE_CODE_PTR)
650 val_type = check_typedef (TYPE_TARGET_TYPE (val_type));
652 type_code = TYPE_CODE (val_type);
653 if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION)
654 && types_equal (val_type, parent_type))
659 CATCH (except, RETURN_MASK_ALL)
661 GDB_PY_SET_HANDLE_EXCEPTION (except);
668 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
669 Returns 1 if the flag value is true, 0 if it is false, and -1 if
670 a Python error occurs. */
673 get_field_flag (PyObject *field, const char *flag_name)
675 gdbpy_ref<> flag_object (PyObject_GetAttrString (field, flag_name));
677 if (flag_object == NULL)
680 return PyObject_IsTrue (flag_object.get ());
683 /* Return the "type" attribute of a gdb.Field object.
684 Returns NULL on error, with a Python exception set. */
687 get_field_type (PyObject *field)
689 gdbpy_ref<> ftype_obj (PyObject_GetAttrString (field, "type"));
692 if (ftype_obj == NULL)
694 ftype = type_object_to_type (ftype_obj.get ());
696 PyErr_SetString (PyExc_TypeError,
697 _("'type' attribute of gdb.Field object is not a "
698 "gdb.Type object."));
703 /* Given string name or a gdb.Field object corresponding to an element inside
704 a structure, return its value object. Returns NULL on error, with a python
708 valpy_getitem (PyObject *self, PyObject *key)
710 struct gdb_exception except = exception_none;
711 value_object *self_value = (value_object *) self;
712 gdb::unique_xmalloc_ptr<char> field;
713 struct type *base_class_type = NULL, *field_type = NULL;
715 PyObject *result = NULL;
717 if (gdbpy_is_string (key))
719 field = python_string_to_host_string (key);
723 else if (gdbpy_is_field (key))
725 int is_base_class, valid_field;
727 valid_field = value_has_field (self_value->value, key);
730 else if (valid_field == 0)
732 PyErr_SetString (PyExc_TypeError,
733 _("Invalid lookup for a field not contained in "
739 is_base_class = get_field_flag (key, "is_base_class");
740 if (is_base_class < 0)
742 else if (is_base_class > 0)
744 base_class_type = get_field_type (key);
745 if (base_class_type == NULL)
750 gdbpy_ref<> name_obj (PyObject_GetAttrString (key, "name"));
752 if (name_obj == NULL)
755 if (name_obj != Py_None)
757 field = python_string_to_host_string (name_obj.get ());
763 if (!PyObject_HasAttrString (key, "bitpos"))
765 PyErr_SetString (PyExc_AttributeError,
766 _("gdb.Field object has no name and no "
767 "'bitpos' attribute."));
771 gdbpy_ref<> bitpos_obj (PyObject_GetAttrString (key, "bitpos"));
772 if (bitpos_obj == NULL)
774 if (!gdb_py_int_as_long (bitpos_obj.get (), &bitpos))
777 field_type = get_field_type (key);
778 if (field_type == NULL)
786 struct value *tmp = self_value->value;
787 struct value *res_val = NULL;
788 scoped_value_mark free_values;
791 res_val = value_struct_elt (&tmp, NULL, field.get (), NULL,
792 "struct/class/union");
793 else if (bitpos >= 0)
794 res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type,
795 "struct/class/union");
796 else if (base_class_type != NULL)
798 struct type *val_type;
800 val_type = check_typedef (value_type (tmp));
801 if (TYPE_CODE (val_type) == TYPE_CODE_PTR)
802 res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
803 else if (TYPE_CODE (val_type) == TYPE_CODE_REF)
804 res_val = value_cast (lookup_reference_type (base_class_type), tmp);
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 struct value *mark = value_mark ();
863 PyObject *result = NULL;
867 ftype = check_typedef (value_type (function));
869 CATCH (except, RETURN_MASK_ALL)
871 GDB_PY_HANDLE_EXCEPTION (except);
875 if (TYPE_CODE (ftype) != TYPE_CODE_FUNC)
877 PyErr_SetString (PyExc_RuntimeError,
878 _("Value is not callable (not TYPE_CODE_FUNC)."));
882 if (! PyTuple_Check (args))
884 PyErr_SetString (PyExc_TypeError,
885 _("Inferior arguments must be provided in a tuple."));
889 args_count = PyTuple_Size (args);
894 vargs = XALLOCAVEC (struct value *, args_count);
895 for (i = 0; i < args_count; i++)
897 PyObject *item = PyTuple_GetItem (args, i);
902 vargs[i] = convert_value_from_python (item);
903 if (vargs[i] == NULL)
910 scoped_value_mark free_values;
911 struct value *return_value;
913 return_value = call_function_by_hand (function, args_count, vargs);
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_CODE (TYPE) == TYPE_CODE_REF) ? (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 (TYPE_CODE (type) == TYPE_CODE_FLT)
1305 nonzero = value_as_double (self_value->value) != 0;
1306 else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1307 nonzero = !decimal_is_zero (value_contents (self_value->value),
1309 gdbarch_byte_order (get_type_arch (type)));
1311 /* All other values are True. */
1314 CATCH (ex, RETURN_MASK_ALL)
1320 /* This is not documented in the Python documentation, but if this
1321 function fails, return -1 as slot_nb_nonzero does (the default
1322 Python nonzero function). */
1323 GDB_PY_SET_HANDLE_EXCEPTION (except);
1328 /* Implements ~ for value objects. */
1330 valpy_invert (PyObject *self)
1332 struct value *val = NULL;
1336 val = value_complement (((value_object *) self)->value);
1338 CATCH (except, RETURN_MASK_ALL)
1340 GDB_PY_HANDLE_EXCEPTION (except);
1344 return value_to_value_object (val);
1347 /* Implements left shift for value objects. */
1349 valpy_lsh (PyObject *self, PyObject *other)
1351 return valpy_binop (VALPY_LSH, self, other);
1354 /* Implements right shift for value objects. */
1356 valpy_rsh (PyObject *self, PyObject *other)
1358 return valpy_binop (VALPY_RSH, self, other);
1361 /* Implements bitwise and for value objects. */
1363 valpy_and (PyObject *self, PyObject *other)
1365 return valpy_binop (VALPY_BITAND, self, other);
1368 /* Implements bitwise or for value objects. */
1370 valpy_or (PyObject *self, PyObject *other)
1372 return valpy_binop (VALPY_BITOR, self, other);
1375 /* Implements bitwise xor for value objects. */
1377 valpy_xor (PyObject *self, PyObject *other)
1379 return valpy_binop (VALPY_BITXOR, self, other);
1382 /* Helper for valpy_richcompare. Implements comparison operations for
1383 value objects. Returns true/false on success. Returns -1 with a
1384 Python exception set if a Python error is detected. Throws a GDB
1385 exception on other errors (memory error, etc.). */
1388 valpy_richcompare_throw (PyObject *self, PyObject *other, int op)
1391 struct value *value_other;
1392 struct value *value_self;
1394 scoped_value_mark free_values;
1396 value_other = convert_value_from_python (other);
1397 if (value_other == NULL)
1400 value_self = ((value_object *) self)->value;
1405 result = value_less (value_self, value_other);
1408 result = value_less (value_self, value_other)
1409 || value_equal (value_self, value_other);
1412 result = value_equal (value_self, value_other);
1415 result = !value_equal (value_self, value_other);
1418 result = value_less (value_other, value_self);
1421 result = (value_less (value_other, value_self)
1422 || value_equal (value_self, value_other));
1426 PyErr_SetString (PyExc_NotImplementedError,
1427 _("Invalid operation on gdb.Value."));
1436 /* Implements comparison operations for value objects. Returns NULL on error,
1437 with a python exception set. */
1439 valpy_richcompare (PyObject *self, PyObject *other, int op)
1443 if (other == Py_None)
1444 /* Comparing with None is special. From what I can tell, in Python
1445 None is smaller than anything else. */
1457 PyErr_SetString (PyExc_NotImplementedError,
1458 _("Invalid operation on gdb.Value."));
1464 result = valpy_richcompare_throw (self, other, op);
1466 CATCH (except, RETURN_MASK_ALL)
1468 GDB_PY_HANDLE_EXCEPTION (except);
1472 /* In this case, the Python exception has already been set. */
1483 /* Implements conversion to int. */
1485 valpy_int (PyObject *self)
1487 struct value *value = ((value_object *) self)->value;
1488 struct type *type = value_type (value);
1493 if (!is_integral_type (type))
1494 error (_("Cannot convert value to int."));
1496 l = value_as_long (value);
1498 CATCH (except, RETURN_MASK_ALL)
1500 GDB_PY_HANDLE_EXCEPTION (except);
1504 return gdb_py_object_from_longest (l);
1508 /* Implements conversion to long. */
1510 valpy_long (PyObject *self)
1512 struct value *value = ((value_object *) self)->value;
1513 struct type *type = value_type (value);
1518 type = check_typedef (type);
1520 if (!is_integral_type (type)
1521 && TYPE_CODE (type) != TYPE_CODE_PTR)
1522 error (_("Cannot convert value to long."));
1524 l = value_as_long (value);
1526 CATCH (except, RETURN_MASK_ALL)
1528 GDB_PY_HANDLE_EXCEPTION (except);
1532 if (TYPE_UNSIGNED (type))
1533 return gdb_py_long_from_ulongest (l);
1535 return gdb_py_long_from_longest (l);
1538 /* Implements conversion to float. */
1540 valpy_float (PyObject *self)
1542 struct value *value = ((value_object *) self)->value;
1543 struct type *type = value_type (value);
1548 type = check_typedef (type);
1550 if (TYPE_CODE (type) != TYPE_CODE_FLT)
1551 error (_("Cannot convert value to float."));
1553 d = value_as_double (value);
1555 CATCH (except, RETURN_MASK_ALL)
1557 GDB_PY_HANDLE_EXCEPTION (except);
1561 return PyFloat_FromDouble (d);
1564 /* Returns an object for a value which is released from the all_values chain,
1565 so its lifetime is not bound to the execution of a command. */
1567 value_to_value_object (struct value *val)
1569 value_object *val_obj;
1571 val_obj = PyObject_New (value_object, &value_object_type);
1572 if (val_obj != NULL)
1574 val_obj->value = val;
1575 release_value_or_incref (val);
1576 val_obj->address = NULL;
1577 val_obj->type = NULL;
1578 val_obj->dynamic_type = NULL;
1579 note_value (val_obj);
1582 return (PyObject *) val_obj;
1585 /* Returns a borrowed reference to the struct value corresponding to
1586 the given value object. */
1588 value_object_to_value (PyObject *self)
1592 if (! PyObject_TypeCheck (self, &value_object_type))
1594 real = (value_object *) self;
1598 /* Try to convert a Python value to a gdb value. If the value cannot
1599 be converted, set a Python exception and return NULL. Returns a
1600 reference to a new value on the all_values chain. */
1603 convert_value_from_python (PyObject *obj)
1605 struct value *value = NULL; /* -Wall */
1608 gdb_assert (obj != NULL);
1612 if (PyBool_Check (obj))
1614 cmp = PyObject_IsTrue (obj);
1616 value = value_from_longest (builtin_type_pybool, cmp);
1618 /* Make a long logic check first. In Python 3.x, internally,
1619 all integers are represented as longs. In Python 2.x, there
1620 is still a differentiation internally between a PyInt and a
1621 PyLong. Explicitly do this long check conversion first. In
1622 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1623 to be done first to ensure we do not lose information in the
1624 conversion process. */
1625 else if (PyLong_Check (obj))
1627 LONGEST l = PyLong_AsLongLong (obj);
1629 if (PyErr_Occurred ())
1631 /* If the error was an overflow, we can try converting to
1632 ULONGEST instead. */
1633 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1635 PyObject *etype, *evalue, *etraceback;
1637 PyErr_Fetch (&etype, &evalue, &etraceback);
1638 gdbpy_ref<> zero (PyInt_FromLong (0));
1640 /* Check whether obj is positive. */
1641 if (PyObject_RichCompareBool (obj, zero.get (), Py_GT) > 0)
1645 ul = PyLong_AsUnsignedLongLong (obj);
1646 if (! PyErr_Occurred ())
1647 value = value_from_ulongest (builtin_type_upylong, ul);
1650 /* There's nothing we can do. */
1651 PyErr_Restore (etype, evalue, etraceback);
1655 value = value_from_longest (builtin_type_pylong, l);
1657 #if PY_MAJOR_VERSION == 2
1658 else if (PyInt_Check (obj))
1660 long l = PyInt_AsLong (obj);
1662 if (! PyErr_Occurred ())
1663 value = value_from_longest (builtin_type_pyint, l);
1666 else if (PyFloat_Check (obj))
1668 double d = PyFloat_AsDouble (obj);
1670 if (! PyErr_Occurred ())
1671 value = value_from_double (builtin_type_pyfloat, d);
1673 else if (gdbpy_is_string (obj))
1675 gdb::unique_xmalloc_ptr<char> s
1676 = python_string_to_target_string (obj);
1678 value = value_cstring (s.get (), strlen (s.get ()),
1679 builtin_type_pychar);
1681 else if (PyObject_TypeCheck (obj, &value_object_type))
1682 value = value_copy (((value_object *) obj)->value);
1683 else if (gdbpy_is_lazy_string (obj))
1687 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
1688 value = value_copy (((value_object *) result)->value);
1692 PyErr_Format (PyExc_TypeError,
1693 _("Could not convert Python object: %S."), obj);
1695 PyErr_Format (PyExc_TypeError,
1696 _("Could not convert Python object: %s."),
1697 PyString_AsString (PyObject_Str (obj)));
1700 CATCH (except, RETURN_MASK_ALL)
1702 PyErr_Format (except.reason == RETURN_QUIT
1703 ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
1704 "%s", except.message);
1712 /* Returns value object in the ARGth position in GDB's history. */
1714 gdbpy_history (PyObject *self, PyObject *args)
1717 struct value *res_val = NULL; /* Initialize to appease gcc warning. */
1719 if (!PyArg_ParseTuple (args, "i", &i))
1724 res_val = access_value_history (i);
1726 CATCH (except, RETURN_MASK_ALL)
1728 GDB_PY_HANDLE_EXCEPTION (except);
1732 return value_to_value_object (res_val);
1735 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
1738 gdbpy_is_value_object (PyObject *obj)
1740 return PyObject_TypeCheck (obj, &value_object_type);
1744 gdbpy_initialize_values (void)
1746 if (PyType_Ready (&value_object_type) < 0)
1749 return gdb_pymodule_addobject (gdb_module, "Value",
1750 (PyObject *) &value_object_type);
1755 static PyGetSetDef value_object_getset[] = {
1756 { "address", valpy_get_address, NULL, "The address of the value.",
1758 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
1759 "Boolean telling whether the value is optimized "
1760 "out (i.e., not available).",
1762 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
1763 { "dynamic_type", valpy_get_dynamic_type, NULL,
1764 "Dynamic type of the value.", NULL },
1765 { "is_lazy", valpy_get_is_lazy, NULL,
1766 "Boolean telling whether the value is lazy (not fetched yet\n\
1767 from the inferior). A lazy value is fetched when needed, or when\n\
1768 the \"fetch_lazy()\" method is called.", NULL },
1769 {NULL} /* Sentinel */
1772 static PyMethodDef value_object_methods[] = {
1773 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
1774 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
1775 "dynamic_cast (gdb.Type) -> gdb.Value\n\
1776 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
1778 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
1779 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
1780 Cast the value to the supplied type, as if by the C++\n\
1781 reinterpret_cast operator."
1783 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
1784 { "referenced_value", valpy_referenced_value, METH_NOARGS,
1785 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
1786 { "reference_value", valpy_reference_value, METH_NOARGS,
1787 "Return a value of type TYPE_CODE_REF referencing this value." },
1788 { "const_value", valpy_const_value, METH_NOARGS,
1789 "Return a 'const' qualied version of the same value." },
1790 { "lazy_string", (PyCFunction) valpy_lazy_string,
1791 METH_VARARGS | METH_KEYWORDS,
1792 "lazy_string ([encoding] [, length]) -> lazy_string\n\
1793 Return a lazy string representation of the value." },
1794 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
1795 "string ([encoding] [, errors] [, length]) -> string\n\
1796 Return Unicode string representation of the value." },
1797 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
1798 "Fetches the value from the inferior, if it was lazy." },
1799 {NULL} /* Sentinel */
1802 static PyNumberMethods value_object_as_number = {
1810 NULL, /* nb_divmod */
1811 valpy_power, /* nb_power */
1812 valpy_negative, /* nb_negative */
1813 valpy_positive, /* nb_positive */
1814 valpy_absolute, /* nb_absolute */
1815 valpy_nonzero, /* nb_nonzero */
1816 valpy_invert, /* nb_invert */
1817 valpy_lsh, /* nb_lshift */
1818 valpy_rsh, /* nb_rshift */
1819 valpy_and, /* nb_and */
1820 valpy_xor, /* nb_xor */
1821 valpy_or, /* nb_or */
1823 valpy_long, /* nb_int */
1824 NULL, /* reserved */
1826 NULL, /* nb_coerce */
1827 valpy_int, /* nb_int */
1828 valpy_long, /* nb_long */
1830 valpy_float, /* nb_float */
1835 NULL, /* nb_inplace_add */
1836 NULL, /* nb_inplace_subtract */
1837 NULL, /* nb_inplace_multiply */
1839 NULL, /* nb_inplace_divide */
1841 NULL, /* nb_inplace_remainder */
1842 NULL, /* nb_inplace_power */
1843 NULL, /* nb_inplace_lshift */
1844 NULL, /* nb_inplace_rshift */
1845 NULL, /* nb_inplace_and */
1846 NULL, /* nb_inplace_xor */
1847 NULL, /* nb_inplace_or */
1848 NULL, /* nb_floor_divide */
1849 valpy_divide, /* nb_true_divide */
1850 NULL, /* nb_inplace_floor_divide */
1851 NULL, /* nb_inplace_true_divide */
1852 #ifndef HAVE_LIBPYTHON2_4
1853 /* This was added in Python 2.5. */
1854 valpy_long, /* nb_index */
1855 #endif /* HAVE_LIBPYTHON2_4 */
1858 static PyMappingMethods value_object_as_mapping = {
1864 PyTypeObject value_object_type = {
1865 PyVarObject_HEAD_INIT (NULL, 0)
1866 "gdb.Value", /*tp_name*/
1867 sizeof (value_object), /*tp_basicsize*/
1869 valpy_dealloc, /*tp_dealloc*/
1875 &value_object_as_number, /*tp_as_number*/
1876 0, /*tp_as_sequence*/
1877 &value_object_as_mapping, /*tp_as_mapping*/
1878 valpy_hash, /*tp_hash*/
1879 valpy_call, /*tp_call*/
1880 valpy_str, /*tp_str*/
1884 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
1885 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
1886 "GDB value object", /* tp_doc */
1887 0, /* tp_traverse */
1889 valpy_richcompare, /* tp_richcompare */
1890 0, /* tp_weaklistoffset */
1892 0, /* tp_iternext */
1893 value_object_methods, /* tp_methods */
1895 value_object_getset, /* tp_getset */
1898 0, /* tp_descr_get */
1899 0, /* tp_descr_set */
1900 0, /* tp_dictoffset */
1903 valpy_new /* tp_new */