1 /* Python interface to values.
3 Copyright (C) 2008, 2009, 2010 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"
34 #include "python-internal.h"
36 /* Even though Python scalar types directly map to host types, we use
37 target types here to remain consistent with the the values system in
38 GDB (which uses target arithmetic). */
40 /* Python's integer type corresponds to C's long type. */
41 #define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long
43 /* Python's float type corresponds to C's double type. */
44 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
46 /* Python's long type corresponds to C's long long type. */
47 #define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
49 /* Python's long type corresponds to C's long long type. Unsigned version. */
50 #define builtin_type_upylong builtin_type \
51 (python_gdbarch)->builtin_unsigned_long_long
53 #define builtin_type_pybool \
54 language_bool_type (python_language, python_gdbarch)
56 #define builtin_type_pychar \
57 language_string_char_type (python_language, python_gdbarch)
59 typedef struct value_object
{
61 struct value_object
*next
;
62 struct value_object
*prev
;
66 PyObject
*dynamic_type
;
69 /* List of all values which are currently exposed to Python. It is
70 maintained so that when an objfile is discarded, preserve_values
71 can copy the values' types if needed. */
72 /* This variable is unnecessarily initialized to NULL in order to
73 work around a linker bug on MacOS. */
74 static value_object
*values_in_python
= NULL
;
76 /* Called by the Python interpreter when deallocating a value object. */
78 valpy_dealloc (PyObject
*obj
)
80 value_object
*self
= (value_object
*) obj
;
82 /* Remove SELF from the global list. */
84 self
->prev
->next
= self
->next
;
87 gdb_assert (values_in_python
== self
);
88 values_in_python
= self
->next
;
91 self
->next
->prev
= self
->prev
;
93 value_free (self
->value
);
96 /* Use braces to appease gcc warning. *sigh* */
98 Py_DECREF (self
->address
);
103 Py_DECREF (self
->type
);
106 Py_XDECREF (self
->dynamic_type
);
108 self
->ob_type
->tp_free (self
);
111 /* Helper to push a Value object on the global list. */
113 note_value (value_object
*value_obj
)
115 value_obj
->next
= values_in_python
;
117 value_obj
->next
->prev
= value_obj
;
118 value_obj
->prev
= NULL
;
119 values_in_python
= value_obj
;
122 /* Called when a new gdb.Value object needs to be allocated. Returns NULL on
123 error, with a python exception set. */
125 valpy_new (PyTypeObject
*subtype
, PyObject
*args
, PyObject
*keywords
)
127 struct value
*value
= NULL
; /* Initialize to appease gcc warning. */
128 value_object
*value_obj
;
130 if (PyTuple_Size (args
) != 1)
132 PyErr_SetString (PyExc_TypeError
, _("Value object creation takes only "
137 value_obj
= (value_object
*) subtype
->tp_alloc (subtype
, 1);
138 if (value_obj
== NULL
)
140 PyErr_SetString (PyExc_MemoryError
, _("Could not allocate memory to "
141 "create Value object."));
145 value
= convert_value_from_python (PyTuple_GetItem (args
, 0));
148 subtype
->tp_free (value_obj
);
152 value_obj
->value
= value
;
153 value_incref (value
);
154 value_obj
->address
= NULL
;
155 value_obj
->type
= NULL
;
156 value_obj
->dynamic_type
= NULL
;
157 note_value (value_obj
);
159 return (PyObject
*) value_obj
;
162 /* Iterate over all the Value objects, calling preserve_one_value on
165 preserve_python_values (struct objfile
*objfile
, htab_t copied_types
)
169 for (iter
= values_in_python
; iter
; iter
= iter
->next
)
170 preserve_one_value (iter
->value
, objfile
, copied_types
);
173 /* Given a value of a pointer type, apply the C unary * operator to it. */
175 valpy_dereference (PyObject
*self
, PyObject
*args
)
177 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
178 volatile struct gdb_exception except
;
180 TRY_CATCH (except
, RETURN_MASK_ALL
)
182 res_val
= value_ind (((value_object
*) self
)->value
);
184 GDB_PY_HANDLE_EXCEPTION (except
);
186 return value_to_value_object (res_val
);
189 /* Return "&value". */
191 valpy_get_address (PyObject
*self
, void *closure
)
193 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
194 value_object
*val_obj
= (value_object
*) self
;
195 volatile struct gdb_exception except
;
197 if (!val_obj
->address
)
199 TRY_CATCH (except
, RETURN_MASK_ALL
)
201 res_val
= value_addr (val_obj
->value
);
203 if (except
.reason
< 0)
205 val_obj
->address
= Py_None
;
209 val_obj
->address
= value_to_value_object (res_val
);
212 Py_INCREF (val_obj
->address
);
214 return val_obj
->address
;
217 /* Return type of the value. */
219 valpy_get_type (PyObject
*self
, void *closure
)
221 value_object
*obj
= (value_object
*) self
;
225 obj
->type
= type_to_type_object (value_type (obj
->value
));
229 Py_INCREF (obj
->type
);
233 /* Return dynamic type of the value. */
236 valpy_get_dynamic_type (PyObject
*self
, void *closure
)
238 value_object
*obj
= (value_object
*) self
;
239 volatile struct gdb_exception except
;
240 struct type
*type
= NULL
;
242 if (obj
->dynamic_type
!= NULL
)
244 Py_INCREF (obj
->dynamic_type
);
245 return obj
->dynamic_type
;
248 TRY_CATCH (except
, RETURN_MASK_ALL
)
250 struct value
*val
= obj
->value
;
252 type
= value_type (val
);
253 CHECK_TYPEDEF (type
);
255 if (((TYPE_CODE (type
) == TYPE_CODE_PTR
)
256 || (TYPE_CODE (type
) == TYPE_CODE_REF
))
257 && (TYPE_CODE (TYPE_TARGET_TYPE (type
)) == TYPE_CODE_CLASS
))
259 struct value
*target
;
260 int was_pointer
= TYPE_CODE (type
) == TYPE_CODE_PTR
;
262 target
= value_ind (val
);
263 type
= value_rtti_type (target
, NULL
, NULL
, NULL
);
268 type
= lookup_pointer_type (type
);
270 type
= lookup_reference_type (type
);
273 else if (TYPE_CODE (type
) == TYPE_CODE_CLASS
)
274 type
= value_rtti_type (val
, NULL
, NULL
, NULL
);
277 /* Re-use object's static type. */
281 GDB_PY_HANDLE_EXCEPTION (except
);
285 /* Ensure that the TYPE field is ready. */
286 if (!valpy_get_type (self
, NULL
))
288 /* We don't need to incref here, because valpy_get_type already
290 obj
->dynamic_type
= obj
->type
;
293 obj
->dynamic_type
= type_to_type_object (type
);
295 Py_INCREF (obj
->dynamic_type
);
296 return obj
->dynamic_type
;
299 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
300 string. Return a PyObject representing a lazy_string_object type.
301 A lazy string is a pointer to a string with an optional encoding and
302 length. If ENCODING is not given, encoding is set to None. If an
303 ENCODING is provided the encoding parameter is set to ENCODING, but
304 the string is not encoded. If LENGTH is provided then the length
305 parameter is set to LENGTH, otherwise length will be set to -1 (first
306 null of appropriate with). */
308 valpy_lazy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
311 struct value
*value
= ((value_object
*) self
)->value
;
312 const char *user_encoding
= NULL
;
313 static char *keywords
[] = { "encoding", "length", NULL
};
316 if (!PyArg_ParseTupleAndKeywords (args
, kw
, "|si", keywords
,
317 &user_encoding
, &length
))
320 if (TYPE_CODE (value_type (value
)) == TYPE_CODE_PTR
)
321 value
= value_ind (value
);
323 str_obj
= gdbpy_create_lazy_string_object (value_address (value
), length
,
324 user_encoding
, value_type (value
));
326 return (PyObject
*) str_obj
;
329 /* Implementation of gdb.Value.string ([encoding] [, errors]
330 [, length]) -> string. Return Unicode string with value contents.
331 If ENCODING is not given, the string is assumed to be encoded in
332 the target's charset. If LENGTH is provided, only fetch string to
333 the length provided. */
336 valpy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
340 struct value
*value
= ((value_object
*) self
)->value
;
341 volatile struct gdb_exception except
;
343 const char *encoding
= NULL
;
344 const char *errors
= NULL
;
345 const char *user_encoding
= NULL
;
346 const char *la_encoding
= NULL
;
347 struct type
*char_type
;
348 static char *keywords
[] = { "encoding", "errors", "length", NULL
};
350 if (!PyArg_ParseTupleAndKeywords (args
, kw
, "|ssi", keywords
,
351 &user_encoding
, &errors
, &length
))
354 TRY_CATCH (except
, RETURN_MASK_ALL
)
356 LA_GET_STRING (value
, &buffer
, &length
, &char_type
, &la_encoding
);
358 GDB_PY_HANDLE_EXCEPTION (except
);
360 encoding
= (user_encoding
&& *user_encoding
) ? user_encoding
: la_encoding
;
361 unicode
= PyUnicode_Decode (buffer
, length
* TYPE_LENGTH (char_type
),
368 /* A helper function that implements the various cast operators. */
371 valpy_do_cast (PyObject
*self
, PyObject
*args
, enum exp_opcode op
)
375 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
376 volatile struct gdb_exception except
;
378 if (! PyArg_ParseTuple (args
, "O", &type_obj
))
381 type
= type_object_to_type (type_obj
);
384 PyErr_SetString (PyExc_RuntimeError
,
385 _("Argument must be a type."));
389 TRY_CATCH (except
, RETURN_MASK_ALL
)
391 struct value
*val
= ((value_object
*) self
)->value
;
393 if (op
== UNOP_DYNAMIC_CAST
)
394 res_val
= value_dynamic_cast (type
, val
);
395 else if (op
== UNOP_REINTERPRET_CAST
)
396 res_val
= value_reinterpret_cast (type
, val
);
399 gdb_assert (op
== UNOP_CAST
);
400 res_val
= value_cast (type
, val
);
403 GDB_PY_HANDLE_EXCEPTION (except
);
405 return value_to_value_object (res_val
);
408 /* Implementation of the "cast" method. */
411 valpy_cast (PyObject
*self
, PyObject
*args
)
413 return valpy_do_cast (self
, args
, UNOP_CAST
);
416 /* Implementation of the "dynamic_cast" method. */
419 valpy_dynamic_cast (PyObject
*self
, PyObject
*args
)
421 return valpy_do_cast (self
, args
, UNOP_DYNAMIC_CAST
);
424 /* Implementation of the "reinterpret_cast" method. */
427 valpy_reinterpret_cast (PyObject
*self
, PyObject
*args
)
429 return valpy_do_cast (self
, args
, UNOP_REINTERPRET_CAST
);
433 valpy_length (PyObject
*self
)
435 /* We don't support getting the number of elements in a struct / class. */
436 PyErr_SetString (PyExc_NotImplementedError
,
437 _("Invalid operation on gdb.Value."));
441 /* Given string name of an element inside structure, return its value
442 object. Returns NULL on error, with a python exception set. */
444 valpy_getitem (PyObject
*self
, PyObject
*key
)
446 value_object
*self_value
= (value_object
*) self
;
448 struct value
*res_val
= NULL
;
449 volatile struct gdb_exception except
;
451 if (gdbpy_is_string (key
))
453 field
= python_string_to_host_string (key
);
458 TRY_CATCH (except
, RETURN_MASK_ALL
)
460 struct value
*tmp
= self_value
->value
;
463 res_val
= value_struct_elt (&tmp
, NULL
, field
, 0, NULL
);
466 /* Assume we are attempting an array access, and let the
467 value code throw an exception if the index has an invalid
469 struct value
*idx
= convert_value_from_python (key
);
473 /* Check the value's type is something that can be accessed via
477 tmp
= coerce_ref (tmp
);
478 type
= check_typedef (value_type (tmp
));
479 if (TYPE_CODE (type
) != TYPE_CODE_ARRAY
480 && TYPE_CODE (type
) != TYPE_CODE_PTR
)
481 error( _("Cannot subscript requested type."));
483 res_val
= value_subscript (tmp
, value_as_long (idx
));
489 GDB_PY_HANDLE_EXCEPTION (except
);
491 return res_val
? value_to_value_object (res_val
) : NULL
;
495 valpy_setitem (PyObject
*self
, PyObject
*key
, PyObject
*value
)
497 PyErr_Format (PyExc_NotImplementedError
,
498 _("Setting of struct elements is not currently supported."));
502 /* Called by the Python interpreter to perform an inferior function
503 call on the value. Returns NULL on error, with a python exception set. */
505 valpy_call (PyObject
*self
, PyObject
*args
, PyObject
*keywords
)
507 struct value
*return_value
= NULL
;
508 Py_ssize_t args_count
;
509 volatile struct gdb_exception except
;
510 struct value
*function
= ((value_object
*) self
)->value
;
511 struct value
**vargs
= NULL
;
512 struct type
*ftype
= check_typedef (value_type (function
));
514 if (TYPE_CODE (ftype
) != TYPE_CODE_FUNC
)
516 PyErr_SetString (PyExc_RuntimeError
,
517 _("Value is not callable (not TYPE_CODE_FUNC)."));
521 args_count
= PyTuple_Size (args
);
526 vargs
= alloca (sizeof (struct value
*) * args_count
);
527 for (i
= 0; i
< args_count
; i
++)
529 PyObject
*item
= PyTuple_GetItem (args
, i
);
534 vargs
[i
] = convert_value_from_python (item
);
535 if (vargs
[i
] == NULL
)
540 TRY_CATCH (except
, RETURN_MASK_ALL
)
542 return_value
= call_function_by_hand (function
, args_count
, vargs
);
544 GDB_PY_HANDLE_EXCEPTION (except
);
546 return value_to_value_object (return_value
);
549 /* Called by the Python interpreter to obtain string representation
552 valpy_str (PyObject
*self
)
556 struct cleanup
*old_chain
;
558 struct value_print_options opts
;
559 volatile struct gdb_exception except
;
561 get_user_print_options (&opts
);
564 stb
= mem_fileopen ();
565 old_chain
= make_cleanup_ui_file_delete (stb
);
567 TRY_CATCH (except
, RETURN_MASK_ALL
)
569 common_val_print (((value_object
*) self
)->value
, stb
, 0,
570 &opts
, python_language
);
571 s
= ui_file_xstrdup (stb
, NULL
);
573 GDB_PY_HANDLE_EXCEPTION (except
);
575 do_cleanups (old_chain
);
577 result
= PyUnicode_Decode (s
, strlen (s
), host_charset (), NULL
);
583 /* Implements gdb.Value.is_optimized_out. */
585 valpy_get_is_optimized_out (PyObject
*self
, void *closure
)
587 struct value
*value
= ((value_object
*) self
)->value
;
589 if (value_optimized_out (value
))
595 /* Calculate and return the address of the PyObject as the value of
596 the builtin __hash__ call. */
598 valpy_hash (PyObject
*self
)
600 return (long) (intptr_t) self
;
618 /* If TYPE is a reference, return the target; otherwise return TYPE. */
619 #define STRIP_REFERENCE(TYPE) \
620 ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
622 /* Returns a value object which is the result of applying the operation
623 specified by OPCODE to the given arguments. Returns NULL on error, with
624 a python exception set. */
626 valpy_binop (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
628 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
629 volatile struct gdb_exception except
;
631 TRY_CATCH (except
, RETURN_MASK_ALL
)
633 struct value
*arg1
, *arg2
;
635 /* If the gdb.Value object is the second operand, then it will be passed
636 to us as the OTHER argument, and SELF will be an entirely different
637 kind of object, altogether. Because of this, we can't assume self is
638 a gdb.Value object and need to convert it from python as well. */
639 arg1
= convert_value_from_python (self
);
643 arg2
= convert_value_from_python (other
);
651 struct type
*ltype
= value_type (arg1
);
652 struct type
*rtype
= value_type (arg2
);
654 CHECK_TYPEDEF (ltype
);
655 ltype
= STRIP_REFERENCE (ltype
);
656 CHECK_TYPEDEF (rtype
);
657 rtype
= STRIP_REFERENCE (rtype
);
659 if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
660 && is_integral_type (rtype
))
661 res_val
= value_ptradd (arg1
, value_as_long (arg2
));
662 else if (TYPE_CODE (rtype
) == TYPE_CODE_PTR
663 && is_integral_type (ltype
))
664 res_val
= value_ptradd (arg2
, value_as_long (arg1
));
666 res_val
= value_binop (arg1
, arg2
, BINOP_ADD
);
671 struct type
*ltype
= value_type (arg1
);
672 struct type
*rtype
= value_type (arg2
);
674 CHECK_TYPEDEF (ltype
);
675 ltype
= STRIP_REFERENCE (ltype
);
676 CHECK_TYPEDEF (rtype
);
677 rtype
= STRIP_REFERENCE (rtype
);
679 if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
680 && TYPE_CODE (rtype
) == TYPE_CODE_PTR
)
681 /* A ptrdiff_t for the target would be preferable here. */
682 res_val
= value_from_longest (builtin_type_pyint
,
683 value_ptrdiff (arg1
, arg2
));
684 else if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
685 && is_integral_type (rtype
))
686 res_val
= value_ptradd (arg1
, - value_as_long (arg2
));
688 res_val
= value_binop (arg1
, arg2
, BINOP_SUB
);
692 res_val
= value_binop (arg1
, arg2
, BINOP_MUL
);
695 res_val
= value_binop (arg1
, arg2
, BINOP_DIV
);
698 res_val
= value_binop (arg1
, arg2
, BINOP_REM
);
701 res_val
= value_binop (arg1
, arg2
, BINOP_EXP
);
704 res_val
= value_binop (arg1
, arg2
, BINOP_LSH
);
707 res_val
= value_binop (arg1
, arg2
, BINOP_RSH
);
710 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_AND
);
713 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_IOR
);
716 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_XOR
);
720 GDB_PY_HANDLE_EXCEPTION (except
);
722 return res_val
? value_to_value_object (res_val
) : NULL
;
726 valpy_add (PyObject
*self
, PyObject
*other
)
728 return valpy_binop (VALPY_ADD
, self
, other
);
732 valpy_subtract (PyObject
*self
, PyObject
*other
)
734 return valpy_binop (VALPY_SUB
, self
, other
);
738 valpy_multiply (PyObject
*self
, PyObject
*other
)
740 return valpy_binop (VALPY_MUL
, self
, other
);
744 valpy_divide (PyObject
*self
, PyObject
*other
)
746 return valpy_binop (VALPY_DIV
, self
, other
);
750 valpy_remainder (PyObject
*self
, PyObject
*other
)
752 return valpy_binop (VALPY_REM
, self
, other
);
756 valpy_power (PyObject
*self
, PyObject
*other
, PyObject
*unused
)
758 /* We don't support the ternary form of pow. I don't know how to express
759 that, so let's just throw NotImplementedError to at least do something
761 if (unused
!= Py_None
)
763 PyErr_SetString (PyExc_NotImplementedError
,
764 "Invalid operation on gdb.Value.");
768 return valpy_binop (VALPY_POW
, self
, other
);
772 valpy_negative (PyObject
*self
)
774 struct value
*val
= NULL
;
775 volatile struct gdb_exception except
;
777 TRY_CATCH (except
, RETURN_MASK_ALL
)
779 val
= value_neg (((value_object
*) self
)->value
);
781 GDB_PY_HANDLE_EXCEPTION (except
);
783 return value_to_value_object (val
);
787 valpy_positive (PyObject
*self
)
789 return value_to_value_object (((value_object
*) self
)->value
);
793 valpy_absolute (PyObject
*self
)
795 struct value
*value
= ((value_object
*) self
)->value
;
797 if (value_less (value
, value_zero (value_type (value
), not_lval
)))
798 return valpy_negative (self
);
800 return valpy_positive (self
);
803 /* Implements boolean evaluation of gdb.Value. */
805 valpy_nonzero (PyObject
*self
)
807 value_object
*self_value
= (value_object
*) self
;
810 type
= check_typedef (value_type (self_value
->value
));
812 if (is_integral_type (type
) || TYPE_CODE (type
) == TYPE_CODE_PTR
)
813 return !!value_as_long (self_value
->value
);
814 else if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
815 return value_as_double (self_value
->value
) != 0;
816 else if (TYPE_CODE (type
) == TYPE_CODE_DECFLOAT
)
817 return !decimal_is_zero (value_contents (self_value
->value
),
819 gdbarch_byte_order (get_type_arch (type
)));
821 /* All other values are True. */
825 /* Implements ~ for value objects. */
827 valpy_invert (PyObject
*self
)
829 struct value
*val
= NULL
;
830 volatile struct gdb_exception except
;
832 TRY_CATCH (except
, RETURN_MASK_ALL
)
834 val
= value_complement (((value_object
*) self
)->value
);
836 GDB_PY_HANDLE_EXCEPTION (except
);
838 return value_to_value_object (val
);
841 /* Implements left shift for value objects. */
843 valpy_lsh (PyObject
*self
, PyObject
*other
)
845 return valpy_binop (VALPY_LSH
, self
, other
);
848 /* Implements right shift for value objects. */
850 valpy_rsh (PyObject
*self
, PyObject
*other
)
852 return valpy_binop (VALPY_RSH
, self
, other
);
855 /* Implements bitwise and for value objects. */
857 valpy_and (PyObject
*self
, PyObject
*other
)
859 return valpy_binop (VALPY_BITAND
, self
, other
);
862 /* Implements bitwise or for value objects. */
864 valpy_or (PyObject
*self
, PyObject
*other
)
866 return valpy_binop (VALPY_BITOR
, self
, other
);
869 /* Implements bitwise xor for value objects. */
871 valpy_xor (PyObject
*self
, PyObject
*other
)
873 return valpy_binop (VALPY_BITXOR
, self
, other
);
876 /* Implements comparison operations for value objects. Returns NULL on error,
877 with a python exception set. */
879 valpy_richcompare (PyObject
*self
, PyObject
*other
, int op
)
882 struct value
*value_other
;
883 volatile struct gdb_exception except
;
885 if (other
== Py_None
)
886 /* Comparing with None is special. From what I can tell, in Python
887 None is smaller than anything else. */
899 PyErr_SetString (PyExc_NotImplementedError
,
900 _("Invalid operation on gdb.Value."));
904 TRY_CATCH (except
, RETURN_MASK_ALL
)
906 value_other
= convert_value_from_python (other
);
907 if (value_other
== NULL
)
915 result
= value_less (((value_object
*) self
)->value
, value_other
);
918 result
= value_less (((value_object
*) self
)->value
, value_other
)
919 || value_equal (((value_object
*) self
)->value
, value_other
);
922 result
= value_equal (((value_object
*) self
)->value
, value_other
);
925 result
= !value_equal (((value_object
*) self
)->value
, value_other
);
928 result
= value_less (value_other
, ((value_object
*) self
)->value
);
931 result
= value_less (value_other
, ((value_object
*) self
)->value
)
932 || value_equal (((value_object
*) self
)->value
, value_other
);
936 PyErr_SetString (PyExc_NotImplementedError
,
937 _("Invalid operation on gdb.Value."));
942 GDB_PY_HANDLE_EXCEPTION (except
);
944 /* In this case, the Python exception has already been set. */
954 /* Helper function to determine if a type is "int-like". */
956 is_intlike (struct type
*type
, int ptr_ok
)
958 CHECK_TYPEDEF (type
);
959 return (TYPE_CODE (type
) == TYPE_CODE_INT
960 || TYPE_CODE (type
) == TYPE_CODE_ENUM
961 || TYPE_CODE (type
) == TYPE_CODE_BOOL
962 || TYPE_CODE (type
) == TYPE_CODE_CHAR
963 || (ptr_ok
&& TYPE_CODE (type
) == TYPE_CODE_PTR
));
966 /* Implements conversion to int. */
968 valpy_int (PyObject
*self
)
970 struct value
*value
= ((value_object
*) self
)->value
;
971 struct type
*type
= value_type (value
);
973 volatile struct gdb_exception except
;
975 CHECK_TYPEDEF (type
);
976 if (!is_intlike (type
, 0))
978 PyErr_SetString (PyExc_RuntimeError
,
979 _("Cannot convert value to int."));
983 TRY_CATCH (except
, RETURN_MASK_ALL
)
985 l
= value_as_long (value
);
987 GDB_PY_HANDLE_EXCEPTION (except
);
989 #ifdef HAVE_LONG_LONG /* Defined by Python. */
990 /* If we have 'long long', and the value overflows a 'long', use a
991 Python Long; otherwise use a Python Int. */
992 if (sizeof (l
) > sizeof (long) && (l
> PyInt_GetMax ()
993 || l
< (- (LONGEST
) PyInt_GetMax ()) - 1))
994 return PyLong_FromLongLong (l
);
996 return PyInt_FromLong (l
);
999 /* Implements conversion to long. */
1001 valpy_long (PyObject
*self
)
1003 struct value
*value
= ((value_object
*) self
)->value
;
1004 struct type
*type
= value_type (value
);
1006 volatile struct gdb_exception except
;
1008 if (!is_intlike (type
, 1))
1010 PyErr_SetString (PyExc_RuntimeError
,
1011 _("Cannot convert value to long."));
1015 TRY_CATCH (except
, RETURN_MASK_ALL
)
1017 l
= value_as_long (value
);
1019 GDB_PY_HANDLE_EXCEPTION (except
);
1021 #ifdef HAVE_LONG_LONG /* Defined by Python. */
1022 return PyLong_FromLongLong (l
);
1024 return PyLong_FromLong (l
);
1028 /* Implements conversion to float. */
1030 valpy_float (PyObject
*self
)
1032 struct value
*value
= ((value_object
*) self
)->value
;
1033 struct type
*type
= value_type (value
);
1035 volatile struct gdb_exception except
;
1037 CHECK_TYPEDEF (type
);
1038 if (TYPE_CODE (type
) != TYPE_CODE_FLT
)
1040 PyErr_SetString (PyExc_RuntimeError
,
1041 _("Cannot convert value to float."));
1045 TRY_CATCH (except
, RETURN_MASK_ALL
)
1047 d
= value_as_double (value
);
1049 GDB_PY_HANDLE_EXCEPTION (except
);
1051 return PyFloat_FromDouble (d
);
1054 /* Returns an object for a value which is released from the all_values chain,
1055 so its lifetime is not bound to the execution of a command. */
1057 value_to_value_object (struct value
*val
)
1059 value_object
*val_obj
;
1061 val_obj
= PyObject_New (value_object
, &value_object_type
);
1062 if (val_obj
!= NULL
)
1064 val_obj
->value
= val
;
1066 val_obj
->address
= NULL
;
1067 val_obj
->type
= NULL
;
1068 val_obj
->dynamic_type
= NULL
;
1069 note_value (val_obj
);
1072 return (PyObject
*) val_obj
;
1075 /* Returns a borrowed reference to the struct value corresponding to
1076 the given value object. */
1078 value_object_to_value (PyObject
*self
)
1082 if (! PyObject_TypeCheck (self
, &value_object_type
))
1084 real
= (value_object
*) self
;
1088 /* Try to convert a Python value to a gdb value. If the value cannot
1089 be converted, set a Python exception and return NULL. Returns a
1090 reference to a new value on the all_values chain. */
1093 convert_value_from_python (PyObject
*obj
)
1095 struct value
*value
= NULL
; /* -Wall */
1096 struct cleanup
*old
;
1097 volatile struct gdb_exception except
;
1100 gdb_assert (obj
!= NULL
);
1102 TRY_CATCH (except
, RETURN_MASK_ALL
)
1104 if (PyBool_Check (obj
))
1106 cmp
= PyObject_IsTrue (obj
);
1108 value
= value_from_longest (builtin_type_pybool
, cmp
);
1110 else if (PyInt_Check (obj
))
1112 long l
= PyInt_AsLong (obj
);
1114 if (! PyErr_Occurred ())
1115 value
= value_from_longest (builtin_type_pyint
, l
);
1117 else if (PyLong_Check (obj
))
1119 LONGEST l
= PyLong_AsLongLong (obj
);
1121 if (PyErr_Occurred ())
1123 /* If the error was an overflow, we can try converting to
1124 ULONGEST instead. */
1125 if (PyErr_ExceptionMatches (PyExc_OverflowError
))
1127 PyObject
*etype
, *evalue
, *etraceback
, *zero
;
1129 PyErr_Fetch (&etype
, &evalue
, &etraceback
);
1130 zero
= PyInt_FromLong (0);
1132 /* Check whether obj is positive. */
1133 if (PyObject_RichCompareBool (obj
, zero
, Py_GT
) > 0)
1137 ul
= PyLong_AsUnsignedLongLong (obj
);
1138 if (! PyErr_Occurred ())
1139 value
= value_from_ulongest (builtin_type_upylong
, ul
);
1142 /* There's nothing we can do. */
1143 PyErr_Restore (etype
, evalue
, etraceback
);
1149 value
= value_from_longest (builtin_type_pylong
, l
);
1151 else if (PyFloat_Check (obj
))
1153 double d
= PyFloat_AsDouble (obj
);
1155 if (! PyErr_Occurred ())
1156 value
= value_from_double (builtin_type_pyfloat
, d
);
1158 else if (gdbpy_is_string (obj
))
1162 s
= python_string_to_target_string (obj
);
1165 old
= make_cleanup (xfree
, s
);
1166 value
= value_cstring (s
, strlen (s
), builtin_type_pychar
);
1170 else if (PyObject_TypeCheck (obj
, &value_object_type
))
1171 value
= value_copy (((value_object
*) obj
)->value
);
1172 else if (gdbpy_is_lazy_string (obj
))
1175 PyObject
*function
= PyString_FromString ("value");
1177 result
= PyObject_CallMethodObjArgs (obj
, function
, NULL
);
1178 value
= value_copy (((value_object
*) result
)->value
);
1181 PyErr_Format (PyExc_TypeError
, _("Could not convert Python object: %s."),
1182 PyString_AsString (PyObject_Str (obj
)));
1184 if (except
.reason
< 0)
1186 PyErr_Format (except
.reason
== RETURN_QUIT
1187 ? PyExc_KeyboardInterrupt
: PyExc_RuntimeError
,
1188 "%s", except
.message
);
1195 /* Returns value object in the ARGth position in GDB's history. */
1197 gdbpy_history (PyObject
*self
, PyObject
*args
)
1200 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
1201 volatile struct gdb_exception except
;
1203 if (!PyArg_ParseTuple (args
, "i", &i
))
1206 TRY_CATCH (except
, RETURN_MASK_ALL
)
1208 res_val
= access_value_history (i
);
1210 GDB_PY_HANDLE_EXCEPTION (except
);
1212 return value_to_value_object (res_val
);
1215 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
1218 gdbpy_is_value_object (PyObject
*obj
)
1220 return PyObject_TypeCheck (obj
, &value_object_type
);
1224 gdbpy_initialize_values (void)
1226 if (PyType_Ready (&value_object_type
) < 0)
1229 Py_INCREF (&value_object_type
);
1230 PyModule_AddObject (gdb_module
, "Value", (PyObject
*) &value_object_type
);
1232 values_in_python
= NULL
;
1237 static PyGetSetDef value_object_getset
[] = {
1238 { "address", valpy_get_address
, NULL
, "The address of the value.",
1240 { "is_optimized_out", valpy_get_is_optimized_out
, NULL
,
1241 "Boolean telling whether the value is optimized out (i.e., not available).",
1243 { "type", valpy_get_type
, NULL
, "Type of the value.", NULL
},
1244 { "dynamic_type", valpy_get_dynamic_type
, NULL
,
1245 "Dynamic type of the value.", NULL
},
1246 {NULL
} /* Sentinel */
1249 static PyMethodDef value_object_methods
[] = {
1250 { "cast", valpy_cast
, METH_VARARGS
, "Cast the value to the supplied type." },
1251 { "dynamic_cast", valpy_dynamic_cast
, METH_VARARGS
,
1252 "dynamic_cast (gdb.Type) -> gdb.Value\n\
1253 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
1255 { "reinterpret_cast", valpy_reinterpret_cast
, METH_VARARGS
,
1256 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
1257 Cast the value to the supplied type, as if by the C++\n\
1258 reinterpret_cast operator."
1260 { "dereference", valpy_dereference
, METH_NOARGS
, "Dereferences the value." },
1261 { "lazy_string", (PyCFunction
) valpy_lazy_string
, METH_VARARGS
| METH_KEYWORDS
,
1262 "lazy_string ([encoding] [, length]) -> lazy_string\n\
1263 Return a lazy string representation of the value." },
1264 { "string", (PyCFunction
) valpy_string
, METH_VARARGS
| METH_KEYWORDS
,
1265 "string ([encoding] [, errors] [, length]) -> string\n\
1266 Return Unicode string representation of the value." },
1267 {NULL
} /* Sentinel */
1270 static PyNumberMethods value_object_as_number
= {
1276 NULL
, /* nb_divmod */
1277 valpy_power
, /* nb_power */
1278 valpy_negative
, /* nb_negative */
1279 valpy_positive
, /* nb_positive */
1280 valpy_absolute
, /* nb_absolute */
1281 valpy_nonzero
, /* nb_nonzero */
1282 valpy_invert
, /* nb_invert */
1283 valpy_lsh
, /* nb_lshift */
1284 valpy_rsh
, /* nb_rshift */
1285 valpy_and
, /* nb_and */
1286 valpy_xor
, /* nb_xor */
1287 valpy_or
, /* nb_or */
1288 NULL
, /* nb_coerce */
1289 valpy_int
, /* nb_int */
1290 valpy_long
, /* nb_long */
1291 valpy_float
, /* nb_float */
1296 static PyMappingMethods value_object_as_mapping
= {
1302 PyTypeObject value_object_type
= {
1303 PyObject_HEAD_INIT (NULL
)
1305 "gdb.Value", /*tp_name*/
1306 sizeof (value_object
), /*tp_basicsize*/
1308 valpy_dealloc
, /*tp_dealloc*/
1314 &value_object_as_number
, /*tp_as_number*/
1315 0, /*tp_as_sequence*/
1316 &value_object_as_mapping
, /*tp_as_mapping*/
1317 valpy_hash
, /*tp_hash*/
1318 valpy_call
, /*tp_call*/
1319 valpy_str
, /*tp_str*/
1323 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_CHECKTYPES
| Py_TPFLAGS_BASETYPE
, /*tp_flags*/
1324 "GDB value object", /* tp_doc */
1325 0, /* tp_traverse */
1327 valpy_richcompare
, /* tp_richcompare */
1328 0, /* tp_weaklistoffset */
1330 0, /* tp_iternext */
1331 value_object_methods
, /* tp_methods */
1333 value_object_getset
, /* tp_getset */
1336 0, /* tp_descr_get */
1337 0, /* tp_descr_set */
1338 0, /* tp_dictoffset */
1341 valpy_new
/* tp_new */
1347 preserve_python_values (struct objfile
*objfile
, htab_t copied_types
)
1352 #endif /* HAVE_PYTHON */