1 /* Python interface to values.
3 Copyright (C) 2008-2013 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/>. */
21 #include "gdb_assert.h"
24 #include "exceptions.h"
29 #include "expression.h"
35 #include "python-internal.h"
37 /* Even though Python scalar types directly map to host types, we use
38 target types here to remain consistent with the values system in
39 GDB (which uses target arithmetic). */
41 /* Python's integer type corresponds to C's long type. */
42 #define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long
44 /* Python's float type corresponds to C's double type. */
45 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
47 /* Python's long type corresponds to C's long long type. */
48 #define builtin_type_pylong builtin_type (python_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 (python_gdbarch)->builtin_unsigned_long_long
54 #define builtin_type_pybool \
55 language_bool_type (python_language, python_gdbarch)
57 #define builtin_type_pychar \
58 language_string_char_type (python_language, python_gdbarch)
60 typedef struct value_object {
62 struct value_object *next;
63 struct value_object *prev;
67 PyObject *dynamic_type;
70 /* List of all values which are currently exposed to Python. It is
71 maintained so that when an objfile is discarded, preserve_values
72 can copy the values' types if needed. */
73 /* This variable is unnecessarily initialized to NULL in order to
74 work around a linker bug on MacOS. */
75 static value_object *values_in_python = NULL;
77 /* Called by the Python interpreter when deallocating a value object. */
79 valpy_dealloc (PyObject *obj)
81 value_object *self = (value_object *) obj;
83 /* Remove SELF from the global list. */
85 self->prev->next = self->next;
88 gdb_assert (values_in_python == self);
89 values_in_python = self->next;
92 self->next->prev = self->prev;
94 value_free (self->value);
97 /* Use braces to appease gcc warning. *sigh* */
99 Py_DECREF (self->address);
104 Py_DECREF (self->type);
107 Py_XDECREF (self->dynamic_type);
109 Py_TYPE (self)->tp_free (self);
112 /* Helper to push a Value object on the global list. */
114 note_value (value_object *value_obj)
116 value_obj->next = values_in_python;
118 value_obj->next->prev = value_obj;
119 value_obj->prev = NULL;
120 values_in_python = value_obj;
123 /* Called when a new gdb.Value object needs to be allocated. Returns NULL on
124 error, with a python exception set. */
126 valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
128 struct value *value = NULL; /* Initialize to appease gcc warning. */
129 value_object *value_obj;
131 if (PyTuple_Size (args) != 1)
133 PyErr_SetString (PyExc_TypeError, _("Value object creation takes only "
138 value_obj = (value_object *) subtype->tp_alloc (subtype, 1);
139 if (value_obj == NULL)
141 PyErr_SetString (PyExc_MemoryError, _("Could not allocate memory to "
142 "create Value object."));
146 value = convert_value_from_python (PyTuple_GetItem (args, 0));
149 subtype->tp_free (value_obj);
153 value_obj->value = value;
154 release_value_or_incref (value);
155 value_obj->address = NULL;
156 value_obj->type = NULL;
157 value_obj->dynamic_type = NULL;
158 note_value (value_obj);
160 return (PyObject *) value_obj;
163 /* Iterate over all the Value objects, calling preserve_one_value on
166 preserve_python_values (struct objfile *objfile, htab_t copied_types)
170 for (iter = values_in_python; iter; iter = iter->next)
171 preserve_one_value (iter->value, objfile, copied_types);
174 /* Given a value of a pointer type, apply the C unary * operator to it. */
176 valpy_dereference (PyObject *self, PyObject *args)
178 volatile struct gdb_exception except;
179 PyObject *result = NULL;
181 TRY_CATCH (except, RETURN_MASK_ALL)
183 struct value *res_val;
184 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
186 res_val = value_ind (((value_object *) self)->value);
187 result = value_to_value_object (res_val);
188 do_cleanups (cleanup);
190 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 volatile struct gdb_exception except;
207 PyObject *result = NULL;
209 TRY_CATCH (except, RETURN_MASK_ALL)
211 struct value *self_val, *res_val;
212 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
214 self_val = ((value_object *) self)->value;
215 switch (TYPE_CODE (check_typedef (value_type (self_val))))
218 res_val = value_ind (self_val);
221 res_val = coerce_ref (self_val);
224 error(_("Trying to get the referenced value from a value which is "
225 "neither a pointer nor a reference."));
228 result = value_to_value_object (res_val);
229 do_cleanups (cleanup);
231 GDB_PY_HANDLE_EXCEPTION (except);
236 /* Return "&value". */
238 valpy_get_address (PyObject *self, void *closure)
240 value_object *val_obj = (value_object *) self;
241 volatile struct gdb_exception except;
243 if (!val_obj->address)
245 TRY_CATCH (except, RETURN_MASK_ALL)
247 struct value *res_val;
248 struct cleanup *cleanup
249 = make_cleanup_value_free_to_mark (value_mark ());
251 res_val = value_addr (val_obj->value);
252 val_obj->address = value_to_value_object (res_val);
253 do_cleanups (cleanup);
255 if (except.reason < 0)
257 val_obj->address = Py_None;
262 Py_XINCREF (val_obj->address);
264 return val_obj->address;
267 /* Return type of the value. */
269 valpy_get_type (PyObject *self, void *closure)
271 value_object *obj = (value_object *) self;
275 obj->type = type_to_type_object (value_type (obj->value));
279 Py_INCREF (obj->type);
283 /* Return dynamic type of the value. */
286 valpy_get_dynamic_type (PyObject *self, void *closure)
288 value_object *obj = (value_object *) self;
289 volatile struct gdb_exception except;
290 struct type *type = NULL;
292 if (obj->dynamic_type != NULL)
294 Py_INCREF (obj->dynamic_type);
295 return obj->dynamic_type;
298 TRY_CATCH (except, RETURN_MASK_ALL)
300 struct value *val = obj->value;
301 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
303 type = value_type (val);
304 CHECK_TYPEDEF (type);
306 if (((TYPE_CODE (type) == TYPE_CODE_PTR)
307 || (TYPE_CODE (type) == TYPE_CODE_REF))
308 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
310 struct value *target;
311 int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
313 target = value_ind (val);
314 type = value_rtti_type (target, NULL, NULL, NULL);
319 type = lookup_pointer_type (type);
321 type = lookup_reference_type (type);
324 else if (TYPE_CODE (type) == TYPE_CODE_CLASS)
325 type = value_rtti_type (val, NULL, NULL, NULL);
328 /* Re-use object's static type. */
332 do_cleanups (cleanup);
334 GDB_PY_HANDLE_EXCEPTION (except);
337 obj->dynamic_type = valpy_get_type (self, NULL);
339 obj->dynamic_type = type_to_type_object (type);
341 Py_XINCREF (obj->dynamic_type);
342 return obj->dynamic_type;
345 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
346 string. Return a PyObject representing a lazy_string_object type.
347 A lazy string is a pointer to a string with an optional encoding and
348 length. If ENCODING is not given, encoding is set to None. If an
349 ENCODING is provided the encoding parameter is set to ENCODING, but
350 the string is not encoded. If LENGTH is provided then the length
351 parameter is set to LENGTH, otherwise length will be set to -1 (first
352 null of appropriate with). */
354 valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
356 gdb_py_longest length = -1;
357 struct value *value = ((value_object *) self)->value;
358 const char *user_encoding = NULL;
359 static char *keywords[] = { "encoding", "length", NULL };
360 PyObject *str_obj = NULL;
361 volatile struct gdb_exception except;
363 if (!PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG, keywords,
364 &user_encoding, &length))
367 TRY_CATCH (except, RETURN_MASK_ALL)
369 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
371 if (TYPE_CODE (value_type (value)) == TYPE_CODE_PTR)
372 value = value_ind (value);
374 str_obj = gdbpy_create_lazy_string_object (value_address (value), length,
378 do_cleanups (cleanup);
380 GDB_PY_HANDLE_EXCEPTION (except);
385 /* Implementation of gdb.Value.string ([encoding] [, errors]
386 [, length]) -> string. Return Unicode string with value contents.
387 If ENCODING is not given, the string is assumed to be encoded in
388 the target's charset. If LENGTH is provided, only fetch string to
389 the length provided. */
392 valpy_string (PyObject *self, PyObject *args, PyObject *kw)
396 struct value *value = ((value_object *) self)->value;
397 volatile struct gdb_exception except;
399 const char *encoding = NULL;
400 const char *errors = NULL;
401 const char *user_encoding = NULL;
402 const char *la_encoding = NULL;
403 struct type *char_type;
404 static char *keywords[] = { "encoding", "errors", "length", NULL };
406 if (!PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords,
407 &user_encoding, &errors, &length))
410 TRY_CATCH (except, RETURN_MASK_ALL)
412 LA_GET_STRING (value, &buffer, &length, &char_type, &la_encoding);
414 GDB_PY_HANDLE_EXCEPTION (except);
416 encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding;
417 unicode = PyUnicode_Decode ((const char *) buffer,
418 length * TYPE_LENGTH (char_type),
425 /* A helper function that implements the various cast operators. */
428 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
430 PyObject *type_obj, *result = NULL;
432 volatile struct gdb_exception except;
434 if (! PyArg_ParseTuple (args, "O", &type_obj))
437 type = type_object_to_type (type_obj);
440 PyErr_SetString (PyExc_RuntimeError,
441 _("Argument must be a type."));
445 TRY_CATCH (except, RETURN_MASK_ALL)
447 struct value *val = ((value_object *) self)->value;
448 struct value *res_val;
449 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
451 if (op == UNOP_DYNAMIC_CAST)
452 res_val = value_dynamic_cast (type, val);
453 else if (op == UNOP_REINTERPRET_CAST)
454 res_val = value_reinterpret_cast (type, val);
457 gdb_assert (op == UNOP_CAST);
458 res_val = value_cast (type, val);
461 result = value_to_value_object (res_val);
462 do_cleanups (cleanup);
464 GDB_PY_HANDLE_EXCEPTION (except);
469 /* Implementation of the "cast" method. */
472 valpy_cast (PyObject *self, PyObject *args)
474 return valpy_do_cast (self, args, UNOP_CAST);
477 /* Implementation of the "dynamic_cast" method. */
480 valpy_dynamic_cast (PyObject *self, PyObject *args)
482 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
485 /* Implementation of the "reinterpret_cast" method. */
488 valpy_reinterpret_cast (PyObject *self, PyObject *args)
490 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
494 valpy_length (PyObject *self)
496 /* We don't support getting the number of elements in a struct / class. */
497 PyErr_SetString (PyExc_NotImplementedError,
498 _("Invalid operation on gdb.Value."));
502 /* Return 1 if the gdb.Field object FIELD is present in the value V.
503 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
506 value_has_field (struct value *v, PyObject *field)
508 struct type *parent_type, *val_type;
509 enum type_code type_code;
510 PyObject *type_object = PyObject_GetAttrString (field, "parent_type");
511 volatile struct gdb_exception except;
514 if (type_object == NULL)
517 parent_type = type_object_to_type (type_object);
518 Py_DECREF (type_object);
519 if (parent_type == NULL)
521 PyErr_SetString (PyExc_TypeError,
522 _("'parent_type' attribute of gdb.Field object is not a"
523 "gdb.Type object."));
527 TRY_CATCH (except, RETURN_MASK_ALL)
529 val_type = value_type (v);
530 val_type = check_typedef (val_type);
531 if (TYPE_CODE (val_type) == TYPE_CODE_REF
532 || TYPE_CODE (val_type) == TYPE_CODE_PTR)
533 val_type = check_typedef (TYPE_TARGET_TYPE (val_type));
535 type_code = TYPE_CODE (val_type);
536 if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION)
537 && types_equal (val_type, parent_type))
542 GDB_PY_SET_HANDLE_EXCEPTION (except);
547 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
548 Returns 1 if the flag value is true, 0 if it is false, and -1 if
549 a Python error occurs. */
552 get_field_flag (PyObject *field, const char *flag_name)
555 PyObject *flag_object = PyObject_GetAttrString (field, flag_name);
557 if (flag_object == NULL)
560 flag_value = PyObject_IsTrue (flag_object);
561 Py_DECREF (flag_object);
566 /* Given string name or a gdb.Field object corresponding to an element inside
567 a structure, return its value object. Returns NULL on error, with a python
571 valpy_getitem (PyObject *self, PyObject *key)
573 value_object *self_value = (value_object *) self;
575 PyObject *base_class_type_object = NULL;
576 volatile struct gdb_exception except;
577 PyObject *result = NULL;
579 if (gdbpy_is_string (key))
581 field = python_string_to_host_string (key);
585 else if (gdbpy_is_field (key))
587 int is_base_class, valid_field;
589 valid_field = value_has_field (self_value->value, key);
592 else if (valid_field == 0)
594 PyErr_SetString (PyExc_TypeError,
595 _("Invalid lookup for a field not contained in "
601 is_base_class = get_field_flag (key, "is_base_class");
602 if (is_base_class < 0)
604 else if (is_base_class > 0)
606 base_class_type_object = PyObject_GetAttrString (key, "type");
607 if (base_class_type_object == NULL)
612 PyObject *name_obj = PyObject_GetAttrString (key, "name");
614 if (name_obj == NULL)
617 field = python_string_to_host_string (name_obj);
618 Py_DECREF (name_obj);
624 TRY_CATCH (except, RETURN_MASK_ALL)
626 struct value *tmp = self_value->value;
627 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
628 struct value *res_val = NULL;
631 res_val = value_struct_elt (&tmp, NULL, field, 0, NULL);
632 else if (base_class_type_object != NULL)
634 struct type *base_class_type, *val_type;
636 base_class_type = type_object_to_type (base_class_type_object);
637 Py_DECREF (base_class_type_object);
638 if (base_class_type == NULL)
639 error (_("Field type not an instance of gdb.Type."));
641 val_type = check_typedef (value_type (tmp));
642 if (TYPE_CODE (val_type) == TYPE_CODE_PTR)
643 res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
644 else if (TYPE_CODE (val_type) == TYPE_CODE_REF)
645 res_val = value_cast (lookup_reference_type (base_class_type), tmp);
647 res_val = value_cast (base_class_type, tmp);
651 /* Assume we are attempting an array access, and let the
652 value code throw an exception if the index has an invalid
654 struct value *idx = convert_value_from_python (key);
658 /* Check the value's type is something that can be accessed via
662 tmp = coerce_ref (tmp);
663 type = check_typedef (value_type (tmp));
664 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
665 && TYPE_CODE (type) != TYPE_CODE_PTR)
666 error (_("Cannot subscript requested type."));
668 res_val = value_subscript (tmp, value_as_long (idx));
673 result = value_to_value_object (res_val);
674 do_cleanups (cleanup);
678 GDB_PY_HANDLE_EXCEPTION (except);
684 valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
686 PyErr_Format (PyExc_NotImplementedError,
687 _("Setting of struct elements is not currently supported."));
691 /* Called by the Python interpreter to perform an inferior function
692 call on the value. Returns NULL on error, with a python exception set. */
694 valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
696 Py_ssize_t args_count;
697 volatile struct gdb_exception except;
698 struct value *function = ((value_object *) self)->value;
699 struct value **vargs = NULL;
700 struct type *ftype = NULL;
701 struct value *mark = value_mark ();
702 PyObject *result = NULL;
704 TRY_CATCH (except, RETURN_MASK_ALL)
706 ftype = check_typedef (value_type (function));
708 GDB_PY_HANDLE_EXCEPTION (except);
710 if (TYPE_CODE (ftype) != TYPE_CODE_FUNC)
712 PyErr_SetString (PyExc_RuntimeError,
713 _("Value is not callable (not TYPE_CODE_FUNC)."));
717 if (! PyTuple_Check (args))
719 PyErr_SetString (PyExc_TypeError,
720 _("Inferior arguments must be provided in a tuple."));
724 args_count = PyTuple_Size (args);
729 vargs = alloca (sizeof (struct value *) * args_count);
730 for (i = 0; i < args_count; i++)
732 PyObject *item = PyTuple_GetItem (args, i);
737 vargs[i] = convert_value_from_python (item);
738 if (vargs[i] == NULL)
743 TRY_CATCH (except, RETURN_MASK_ALL)
745 struct cleanup *cleanup = make_cleanup_value_free_to_mark (mark);
746 struct value *return_value;
748 return_value = call_function_by_hand (function, args_count, vargs);
749 result = value_to_value_object (return_value);
750 do_cleanups (cleanup);
752 GDB_PY_HANDLE_EXCEPTION (except);
757 /* Called by the Python interpreter to obtain string representation
760 valpy_str (PyObject *self)
764 struct value_print_options opts;
765 volatile struct gdb_exception except;
767 get_user_print_options (&opts);
770 TRY_CATCH (except, RETURN_MASK_ALL)
772 struct ui_file *stb = mem_fileopen ();
773 struct cleanup *old_chain = make_cleanup_ui_file_delete (stb);
775 common_val_print (((value_object *) self)->value, stb, 0,
776 &opts, python_language);
777 s = ui_file_xstrdup (stb, NULL);
779 do_cleanups (old_chain);
781 GDB_PY_HANDLE_EXCEPTION (except);
783 result = PyUnicode_Decode (s, strlen (s), host_charset (), NULL);
789 /* Implements gdb.Value.is_optimized_out. */
791 valpy_get_is_optimized_out (PyObject *self, void *closure)
793 struct value *value = ((value_object *) self)->value;
795 volatile struct gdb_exception except;
797 TRY_CATCH (except, RETURN_MASK_ALL)
799 opt = value_optimized_out (value);
801 GDB_PY_HANDLE_EXCEPTION (except);
809 /* Implements gdb.Value.is_lazy. */
811 valpy_get_is_lazy (PyObject *self, void *closure)
813 struct value *value = ((value_object *) self)->value;
815 volatile struct gdb_exception except;
817 TRY_CATCH (except, RETURN_MASK_ALL)
819 opt = value_lazy (value);
821 GDB_PY_HANDLE_EXCEPTION (except);
829 /* Implements gdb.Value.fetch_lazy (). */
831 valpy_fetch_lazy (PyObject *self, PyObject *args)
833 struct value *value = ((value_object *) self)->value;
834 volatile struct gdb_exception except;
836 TRY_CATCH (except, RETURN_MASK_ALL)
838 if (value_lazy (value))
839 value_fetch_lazy (value);
841 GDB_PY_HANDLE_EXCEPTION (except);
846 /* Calculate and return the address of the PyObject as the value of
847 the builtin __hash__ call. */
849 valpy_hash (PyObject *self)
851 return (long) (intptr_t) self;
869 /* If TYPE is a reference, return the target; otherwise return TYPE. */
870 #define STRIP_REFERENCE(TYPE) \
871 ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
873 /* Returns a value object which is the result of applying the operation
874 specified by OPCODE to the given arguments. Returns NULL on error, with
875 a python exception set. */
877 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
879 volatile struct gdb_exception except;
880 PyObject *result = NULL;
882 TRY_CATCH (except, RETURN_MASK_ALL)
884 struct value *arg1, *arg2;
885 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
886 struct value *res_val = NULL;
888 /* If the gdb.Value object is the second operand, then it will be passed
889 to us as the OTHER argument, and SELF will be an entirely different
890 kind of object, altogether. Because of this, we can't assume self is
891 a gdb.Value object and need to convert it from python as well. */
892 arg1 = convert_value_from_python (self);
895 do_cleanups (cleanup);
899 arg2 = convert_value_from_python (other);
902 do_cleanups (cleanup);
910 struct type *ltype = value_type (arg1);
911 struct type *rtype = value_type (arg2);
913 CHECK_TYPEDEF (ltype);
914 ltype = STRIP_REFERENCE (ltype);
915 CHECK_TYPEDEF (rtype);
916 rtype = STRIP_REFERENCE (rtype);
918 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
919 && is_integral_type (rtype))
920 res_val = value_ptradd (arg1, value_as_long (arg2));
921 else if (TYPE_CODE (rtype) == TYPE_CODE_PTR
922 && is_integral_type (ltype))
923 res_val = value_ptradd (arg2, value_as_long (arg1));
925 res_val = value_binop (arg1, arg2, BINOP_ADD);
930 struct type *ltype = value_type (arg1);
931 struct type *rtype = value_type (arg2);
933 CHECK_TYPEDEF (ltype);
934 ltype = STRIP_REFERENCE (ltype);
935 CHECK_TYPEDEF (rtype);
936 rtype = STRIP_REFERENCE (rtype);
938 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
939 && TYPE_CODE (rtype) == TYPE_CODE_PTR)
940 /* A ptrdiff_t for the target would be preferable here. */
941 res_val = value_from_longest (builtin_type_pyint,
942 value_ptrdiff (arg1, arg2));
943 else if (TYPE_CODE (ltype) == TYPE_CODE_PTR
944 && is_integral_type (rtype))
945 res_val = value_ptradd (arg1, - value_as_long (arg2));
947 res_val = value_binop (arg1, arg2, BINOP_SUB);
951 res_val = value_binop (arg1, arg2, BINOP_MUL);
954 res_val = value_binop (arg1, arg2, BINOP_DIV);
957 res_val = value_binop (arg1, arg2, BINOP_REM);
960 res_val = value_binop (arg1, arg2, BINOP_EXP);
963 res_val = value_binop (arg1, arg2, BINOP_LSH);
966 res_val = value_binop (arg1, arg2, BINOP_RSH);
969 res_val = value_binop (arg1, arg2, BINOP_BITWISE_AND);
972 res_val = value_binop (arg1, arg2, BINOP_BITWISE_IOR);
975 res_val = value_binop (arg1, arg2, BINOP_BITWISE_XOR);
980 result = value_to_value_object (res_val);
982 do_cleanups (cleanup);
984 GDB_PY_HANDLE_EXCEPTION (except);
990 valpy_add (PyObject *self, PyObject *other)
992 return valpy_binop (VALPY_ADD, self, other);
996 valpy_subtract (PyObject *self, PyObject *other)
998 return valpy_binop (VALPY_SUB, self, other);
1002 valpy_multiply (PyObject *self, PyObject *other)
1004 return valpy_binop (VALPY_MUL, self, other);
1008 valpy_divide (PyObject *self, PyObject *other)
1010 return valpy_binop (VALPY_DIV, self, other);
1014 valpy_remainder (PyObject *self, PyObject *other)
1016 return valpy_binop (VALPY_REM, self, other);
1020 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
1022 /* We don't support the ternary form of pow. I don't know how to express
1023 that, so let's just throw NotImplementedError to at least do something
1025 if (unused != Py_None)
1027 PyErr_SetString (PyExc_NotImplementedError,
1028 "Invalid operation on gdb.Value.");
1032 return valpy_binop (VALPY_POW, self, other);
1036 valpy_negative (PyObject *self)
1038 volatile struct gdb_exception except;
1039 PyObject *result = NULL;
1041 TRY_CATCH (except, RETURN_MASK_ALL)
1043 /* Perhaps overkill, but consistency has some virtue. */
1044 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
1047 val = value_neg (((value_object *) self)->value);
1048 result = value_to_value_object (val);
1049 do_cleanups (cleanup);
1051 GDB_PY_HANDLE_EXCEPTION (except);
1057 valpy_positive (PyObject *self)
1059 return value_to_value_object (((value_object *) self)->value);
1063 valpy_absolute (PyObject *self)
1065 struct value *value = ((value_object *) self)->value;
1066 volatile struct gdb_exception except;
1069 TRY_CATCH (except, RETURN_MASK_ALL)
1071 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
1073 if (value_less (value, value_zero (value_type (value), not_lval)))
1076 do_cleanups (cleanup);
1078 GDB_PY_HANDLE_EXCEPTION (except);
1081 return valpy_positive (self);
1083 return valpy_negative (self);
1086 /* Implements boolean evaluation of gdb.Value. */
1088 valpy_nonzero (PyObject *self)
1090 volatile struct gdb_exception except;
1091 value_object *self_value = (value_object *) self;
1093 int nonzero = 0; /* Appease GCC warning. */
1095 TRY_CATCH (except, RETURN_MASK_ALL)
1097 type = check_typedef (value_type (self_value->value));
1099 if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
1100 nonzero = !!value_as_long (self_value->value);
1101 else if (TYPE_CODE (type) == TYPE_CODE_FLT)
1102 nonzero = value_as_double (self_value->value) != 0;
1103 else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1104 nonzero = !decimal_is_zero (value_contents (self_value->value),
1106 gdbarch_byte_order (get_type_arch (type)));
1108 /* All other values are True. */
1111 /* This is not documented in the Python documentation, but if this
1112 function fails, return -1 as slot_nb_nonzero does (the default
1113 Python nonzero function). */
1114 GDB_PY_SET_HANDLE_EXCEPTION (except);
1119 /* Implements ~ for value objects. */
1121 valpy_invert (PyObject *self)
1123 struct value *val = NULL;
1124 volatile struct gdb_exception except;
1126 TRY_CATCH (except, RETURN_MASK_ALL)
1128 val = value_complement (((value_object *) self)->value);
1130 GDB_PY_HANDLE_EXCEPTION (except);
1132 return value_to_value_object (val);
1135 /* Implements left shift for value objects. */
1137 valpy_lsh (PyObject *self, PyObject *other)
1139 return valpy_binop (VALPY_LSH, self, other);
1142 /* Implements right shift for value objects. */
1144 valpy_rsh (PyObject *self, PyObject *other)
1146 return valpy_binop (VALPY_RSH, self, other);
1149 /* Implements bitwise and for value objects. */
1151 valpy_and (PyObject *self, PyObject *other)
1153 return valpy_binop (VALPY_BITAND, self, other);
1156 /* Implements bitwise or for value objects. */
1158 valpy_or (PyObject *self, PyObject *other)
1160 return valpy_binop (VALPY_BITOR, self, other);
1163 /* Implements bitwise xor for value objects. */
1165 valpy_xor (PyObject *self, PyObject *other)
1167 return valpy_binop (VALPY_BITXOR, self, other);
1170 /* Implements comparison operations for value objects. Returns NULL on error,
1171 with a python exception set. */
1173 valpy_richcompare (PyObject *self, PyObject *other, int op)
1176 volatile struct gdb_exception except;
1178 if (other == Py_None)
1179 /* Comparing with None is special. From what I can tell, in Python
1180 None is smaller than anything else. */
1192 PyErr_SetString (PyExc_NotImplementedError,
1193 _("Invalid operation on gdb.Value."));
1197 TRY_CATCH (except, RETURN_MASK_ALL)
1199 struct value *value_other, *mark = value_mark ();
1200 struct cleanup *cleanup;
1202 value_other = convert_value_from_python (other);
1203 if (value_other == NULL)
1209 cleanup = make_cleanup_value_free_to_mark (mark);
1213 result = value_less (((value_object *) self)->value, value_other);
1216 result = value_less (((value_object *) self)->value, value_other)
1217 || value_equal (((value_object *) self)->value, value_other);
1220 result = value_equal (((value_object *) self)->value, value_other);
1223 result = !value_equal (((value_object *) self)->value, value_other);
1226 result = value_less (value_other, ((value_object *) self)->value);
1229 result = value_less (value_other, ((value_object *) self)->value)
1230 || value_equal (((value_object *) self)->value, value_other);
1234 PyErr_SetString (PyExc_NotImplementedError,
1235 _("Invalid operation on gdb.Value."));
1240 do_cleanups (cleanup);
1242 GDB_PY_HANDLE_EXCEPTION (except);
1244 /* In this case, the Python exception has already been set. */
1255 /* Implements conversion to int. */
1257 valpy_int (PyObject *self)
1259 struct value *value = ((value_object *) self)->value;
1260 struct type *type = value_type (value);
1262 volatile struct gdb_exception except;
1264 TRY_CATCH (except, RETURN_MASK_ALL)
1266 if (!is_integral_type (type))
1267 error (_("Cannot convert value to int."));
1269 l = value_as_long (value);
1271 GDB_PY_HANDLE_EXCEPTION (except);
1273 return gdb_py_object_from_longest (l);
1277 /* Implements conversion to long. */
1279 valpy_long (PyObject *self)
1281 struct value *value = ((value_object *) self)->value;
1282 struct type *type = value_type (value);
1284 volatile struct gdb_exception except;
1286 TRY_CATCH (except, RETURN_MASK_ALL)
1288 CHECK_TYPEDEF (type);
1290 if (!is_integral_type (type)
1291 && TYPE_CODE (type) != TYPE_CODE_PTR)
1292 error (_("Cannot convert value to long."));
1294 l = value_as_long (value);
1296 GDB_PY_HANDLE_EXCEPTION (except);
1298 return gdb_py_long_from_longest (l);
1301 /* Implements conversion to float. */
1303 valpy_float (PyObject *self)
1305 struct value *value = ((value_object *) self)->value;
1306 struct type *type = value_type (value);
1308 volatile struct gdb_exception except;
1310 TRY_CATCH (except, RETURN_MASK_ALL)
1312 CHECK_TYPEDEF (type);
1314 if (TYPE_CODE (type) != TYPE_CODE_FLT)
1315 error (_("Cannot convert value to float."));
1317 d = value_as_double (value);
1319 GDB_PY_HANDLE_EXCEPTION (except);
1321 return PyFloat_FromDouble (d);
1324 /* Returns an object for a value which is released from the all_values chain,
1325 so its lifetime is not bound to the execution of a command. */
1327 value_to_value_object (struct value *val)
1329 value_object *val_obj;
1331 val_obj = PyObject_New (value_object, &value_object_type);
1332 if (val_obj != NULL)
1334 val_obj->value = val;
1335 release_value_or_incref (val);
1336 val_obj->address = NULL;
1337 val_obj->type = NULL;
1338 val_obj->dynamic_type = NULL;
1339 note_value (val_obj);
1342 return (PyObject *) val_obj;
1345 /* Returns a borrowed reference to the struct value corresponding to
1346 the given value object. */
1348 value_object_to_value (PyObject *self)
1352 if (! PyObject_TypeCheck (self, &value_object_type))
1354 real = (value_object *) self;
1358 /* Try to convert a Python value to a gdb value. If the value cannot
1359 be converted, set a Python exception and return NULL. Returns a
1360 reference to a new value on the all_values chain. */
1363 convert_value_from_python (PyObject *obj)
1365 struct value *value = NULL; /* -Wall */
1366 volatile struct gdb_exception except;
1369 gdb_assert (obj != NULL);
1371 TRY_CATCH (except, RETURN_MASK_ALL)
1373 if (PyBool_Check (obj))
1375 cmp = PyObject_IsTrue (obj);
1377 value = value_from_longest (builtin_type_pybool, cmp);
1379 /* Make a long logic check first. In Python 3.x, internally,
1380 all integers are represented as longs. In Python 2.x, there
1381 is still a differentiation internally between a PyInt and a
1382 PyLong. Explicitly do this long check conversion first. In
1383 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1384 to be done first to ensure we do not lose information in the
1385 conversion process. */
1386 else if (PyLong_Check (obj))
1388 LONGEST l = PyLong_AsLongLong (obj);
1390 if (PyErr_Occurred ())
1392 /* If the error was an overflow, we can try converting to
1393 ULONGEST instead. */
1394 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1396 PyObject *etype, *evalue, *etraceback, *zero;
1398 PyErr_Fetch (&etype, &evalue, &etraceback);
1399 zero = PyInt_FromLong (0);
1401 /* Check whether obj is positive. */
1402 if (PyObject_RichCompareBool (obj, zero, Py_GT) > 0)
1406 ul = PyLong_AsUnsignedLongLong (obj);
1407 if (! PyErr_Occurred ())
1408 value = value_from_ulongest (builtin_type_upylong, ul);
1411 /* There's nothing we can do. */
1412 PyErr_Restore (etype, evalue, etraceback);
1418 value = value_from_longest (builtin_type_pylong, l);
1420 else if (PyInt_Check (obj))
1422 long l = PyInt_AsLong (obj);
1424 if (! PyErr_Occurred ())
1425 value = value_from_longest (builtin_type_pyint, l);
1427 else if (PyFloat_Check (obj))
1429 double d = PyFloat_AsDouble (obj);
1431 if (! PyErr_Occurred ())
1432 value = value_from_double (builtin_type_pyfloat, d);
1434 else if (gdbpy_is_string (obj))
1438 s = python_string_to_target_string (obj);
1441 struct cleanup *old;
1443 old = make_cleanup (xfree, s);
1444 value = value_cstring (s, strlen (s), builtin_type_pychar);
1448 else if (PyObject_TypeCheck (obj, &value_object_type))
1449 value = value_copy (((value_object *) obj)->value);
1450 else if (gdbpy_is_lazy_string (obj))
1454 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
1455 value = value_copy (((value_object *) result)->value);
1459 PyErr_Format (PyExc_TypeError,
1460 _("Could not convert Python object: %S."), obj);
1462 PyErr_Format (PyExc_TypeError,
1463 _("Could not convert Python object: %s."),
1464 PyString_AsString (PyObject_Str (obj)));
1467 if (except.reason < 0)
1469 PyErr_Format (except.reason == RETURN_QUIT
1470 ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
1471 "%s", except.message);
1478 /* Returns value object in the ARGth position in GDB's history. */
1480 gdbpy_history (PyObject *self, PyObject *args)
1483 struct value *res_val = NULL; /* Initialize to appease gcc warning. */
1484 volatile struct gdb_exception except;
1486 if (!PyArg_ParseTuple (args, "i", &i))
1489 TRY_CATCH (except, RETURN_MASK_ALL)
1491 res_val = access_value_history (i);
1493 GDB_PY_HANDLE_EXCEPTION (except);
1495 return value_to_value_object (res_val);
1498 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
1501 gdbpy_is_value_object (PyObject *obj)
1503 return PyObject_TypeCheck (obj, &value_object_type);
1507 gdbpy_initialize_values (void)
1509 if (PyType_Ready (&value_object_type) < 0)
1512 return gdb_pymodule_addobject (gdb_module, "Value",
1513 (PyObject *) &value_object_type);
1518 static PyGetSetDef value_object_getset[] = {
1519 { "address", valpy_get_address, NULL, "The address of the value.",
1521 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
1522 "Boolean telling whether the value is optimized "
1523 "out (i.e., not available).",
1525 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
1526 { "dynamic_type", valpy_get_dynamic_type, NULL,
1527 "Dynamic type of the value.", NULL },
1528 { "is_lazy", valpy_get_is_lazy, NULL,
1529 "Boolean telling whether the value is lazy (not fetched yet\n\
1530 from the inferior). A lazy value is fetched when needed, or when\n\
1531 the \"fetch_lazy()\" method is called.", NULL },
1532 {NULL} /* Sentinel */
1535 static PyMethodDef value_object_methods[] = {
1536 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
1537 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
1538 "dynamic_cast (gdb.Type) -> gdb.Value\n\
1539 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
1541 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
1542 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
1543 Cast the value to the supplied type, as if by the C++\n\
1544 reinterpret_cast operator."
1546 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
1547 { "referenced_value", valpy_referenced_value, METH_NOARGS,
1548 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
1549 { "lazy_string", (PyCFunction) valpy_lazy_string,
1550 METH_VARARGS | METH_KEYWORDS,
1551 "lazy_string ([encoding] [, length]) -> lazy_string\n\
1552 Return a lazy string representation of the value." },
1553 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
1554 "string ([encoding] [, errors] [, length]) -> string\n\
1555 Return Unicode string representation of the value." },
1556 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
1557 "Fetches the value from the inferior, if it was lazy." },
1558 {NULL} /* Sentinel */
1561 static PyNumberMethods value_object_as_number = {
1569 NULL, /* nb_divmod */
1570 valpy_power, /* nb_power */
1571 valpy_negative, /* nb_negative */
1572 valpy_positive, /* nb_positive */
1573 valpy_absolute, /* nb_absolute */
1574 valpy_nonzero, /* nb_nonzero */
1575 valpy_invert, /* nb_invert */
1576 valpy_lsh, /* nb_lshift */
1577 valpy_rsh, /* nb_rshift */
1578 valpy_and, /* nb_and */
1579 valpy_xor, /* nb_xor */
1580 valpy_or, /* nb_or */
1582 valpy_long, /* nb_int */
1583 NULL, /* reserved */
1585 NULL, /* nb_coerce */
1586 valpy_int, /* nb_int */
1587 valpy_long, /* nb_long */
1589 valpy_float, /* nb_float */
1594 NULL, /* nb_inplace_add */
1595 NULL, /* nb_inplace_subtract */
1596 NULL, /* nb_inplace_multiply */
1597 NULL, /* nb_inplace_remainder */
1598 NULL, /* nb_inplace_power */
1599 NULL, /* nb_inplace_lshift */
1600 NULL, /* nb_inplace_rshift */
1601 NULL, /* nb_inplace_and */
1602 NULL, /* nb_inplace_xor */
1603 NULL, /* nb_inplace_or */
1604 NULL, /* nb_floor_divide */
1605 valpy_divide /* nb_true_divide */
1608 static PyMappingMethods value_object_as_mapping = {
1614 PyTypeObject value_object_type = {
1615 PyVarObject_HEAD_INIT (NULL, 0)
1616 "gdb.Value", /*tp_name*/
1617 sizeof (value_object), /*tp_basicsize*/
1619 valpy_dealloc, /*tp_dealloc*/
1625 &value_object_as_number, /*tp_as_number*/
1626 0, /*tp_as_sequence*/
1627 &value_object_as_mapping, /*tp_as_mapping*/
1628 valpy_hash, /*tp_hash*/
1629 valpy_call, /*tp_call*/
1630 valpy_str, /*tp_str*/
1634 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
1635 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
1636 "GDB value object", /* tp_doc */
1637 0, /* tp_traverse */
1639 valpy_richcompare, /* tp_richcompare */
1640 0, /* tp_weaklistoffset */
1642 0, /* tp_iternext */
1643 value_object_methods, /* tp_methods */
1645 value_object_getset, /* tp_getset */
1648 0, /* tp_descr_get */
1649 0, /* tp_descr_set */
1650 0, /* tp_dictoffset */
1653 valpy_new /* tp_new */
1659 preserve_python_values (struct objfile *objfile, htab_t copied_types)
1664 #endif /* HAVE_PYTHON */