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"
31 #include "python-internal.h"
33 /* Even though Python scalar types directly map to host types, we use
34 target types here to remain consistent with the the values system in
35 GDB (which uses target arithmetic). */
37 /* Python's integer type corresponds to C's long type. */
38 #define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long
40 /* Python's float type corresponds to C's double type. */
41 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
43 /* Python's long type corresponds to C's long long type. */
44 #define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
46 #define builtin_type_pybool \
47 language_bool_type (python_language, python_gdbarch)
49 #define builtin_type_pychar \
50 language_string_char_type (python_language, python_gdbarch)
52 typedef struct value_object
{
54 struct value_object
*next
;
55 struct value_object
*prev
;
61 /* List of all values which are currently exposed to Python. It is
62 maintained so that when an objfile is discarded, preserve_values
63 can copy the values' types if needed. */
64 /* This variable is unnecessarily initialized to NULL in order to
65 work around a linker bug on MacOS. */
66 static value_object
*values_in_python
= NULL
;
68 /* Called by the Python interpreter when deallocating a value object. */
70 valpy_dealloc (PyObject
*obj
)
72 value_object
*self
= (value_object
*) obj
;
74 /* Remove SELF from the global list. */
76 self
->prev
->next
= self
->next
;
79 gdb_assert (values_in_python
== self
);
80 values_in_python
= self
->next
;
83 self
->next
->prev
= self
->prev
;
85 value_free (self
->value
);
88 /* Use braces to appease gcc warning. *sigh* */
90 Py_DECREF (self
->address
);
95 Py_DECREF (self
->type
);
98 self
->ob_type
->tp_free (self
);
101 /* Helper to push a Value object on the global list. */
103 note_value (value_object
*value_obj
)
105 value_obj
->next
= values_in_python
;
107 value_obj
->next
->prev
= value_obj
;
108 value_obj
->prev
= NULL
;
109 values_in_python
= value_obj
;
112 /* Called when a new gdb.Value object needs to be allocated. */
114 valpy_new (PyTypeObject
*subtype
, PyObject
*args
, PyObject
*keywords
)
116 struct value
*value
= NULL
; /* Initialize to appease gcc warning. */
117 value_object
*value_obj
;
119 if (PyTuple_Size (args
) != 1)
121 PyErr_SetString (PyExc_TypeError
, _("Value object creation takes only "
126 value_obj
= (value_object
*) subtype
->tp_alloc (subtype
, 1);
127 if (value_obj
== NULL
)
129 PyErr_SetString (PyExc_MemoryError
, _("Could not allocate memory to "
130 "create Value object."));
134 value
= convert_value_from_python (PyTuple_GetItem (args
, 0));
137 subtype
->tp_free (value_obj
);
141 value_obj
->value
= value
;
142 value_incref (value
);
143 value_obj
->address
= NULL
;
144 value_obj
->type
= NULL
;
145 note_value (value_obj
);
147 return (PyObject
*) value_obj
;
150 /* Iterate over all the Value objects, calling preserve_one_value on
153 preserve_python_values (struct objfile
*objfile
, htab_t copied_types
)
157 for (iter
= values_in_python
; iter
; iter
= iter
->next
)
158 preserve_one_value (iter
->value
, objfile
, copied_types
);
161 /* Given a value of a pointer type, apply the C unary * operator to it. */
163 valpy_dereference (PyObject
*self
, PyObject
*args
)
165 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
166 volatile struct gdb_exception except
;
168 TRY_CATCH (except
, RETURN_MASK_ALL
)
170 res_val
= value_ind (((value_object
*) self
)->value
);
172 GDB_PY_HANDLE_EXCEPTION (except
);
174 return value_to_value_object (res_val
);
177 /* Return "&value". */
179 valpy_get_address (PyObject
*self
, void *closure
)
181 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
182 value_object
*val_obj
= (value_object
*) self
;
183 volatile struct gdb_exception except
;
185 if (!val_obj
->address
)
187 TRY_CATCH (except
, RETURN_MASK_ALL
)
189 res_val
= value_addr (val_obj
->value
);
191 if (except
.reason
< 0)
193 val_obj
->address
= Py_None
;
197 val_obj
->address
= value_to_value_object (res_val
);
200 Py_INCREF (val_obj
->address
);
202 return val_obj
->address
;
205 /* Return type of the value. */
207 valpy_get_type (PyObject
*self
, void *closure
)
209 value_object
*obj
= (value_object
*) self
;
212 obj
->type
= type_to_type_object (value_type (obj
->value
));
216 Py_INCREF (obj
->type
);
219 Py_INCREF (obj
->type
);
223 /* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
224 string. Return a PyObject representing a lazy_string_object type.
225 A lazy string is a pointer to a string with an optional encoding and
226 length. If ENCODING is not given, encoding is set to None. If an
227 ENCODING is provided the encoding parameter is set to ENCODING, but
228 the string is not encoded. If LENGTH is provided then the length
229 parameter is set to LENGTH, otherwise length will be set to -1 (first
230 null of appropriate with). */
232 valpy_lazy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
235 struct value
*value
= ((value_object
*) self
)->value
;
236 const char *user_encoding
= NULL
;
237 static char *keywords
[] = { "encoding", "length", NULL
};
240 if (!PyArg_ParseTupleAndKeywords (args
, kw
, "|si", keywords
,
241 &user_encoding
, &length
))
244 if (TYPE_CODE (value_type (value
)) == TYPE_CODE_PTR
)
245 value
= value_ind (value
);
247 str_obj
= gdbpy_create_lazy_string_object (value_address (value
), length
,
248 user_encoding
, value_type (value
));
250 return (PyObject
*) str_obj
;
253 /* Implementation of gdb.Value.string ([encoding] [, errors]
254 [, length]) -> string. Return Unicode string with value contents.
255 If ENCODING is not given, the string is assumed to be encoded in
256 the target's charset. If LENGTH is provided, only fetch string to
257 the length provided. */
260 valpy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
262 int length
= -1, ret
= 0;
264 struct value
*value
= ((value_object
*) self
)->value
;
265 volatile struct gdb_exception except
;
267 const char *encoding
= NULL
;
268 const char *errors
= NULL
;
269 const char *user_encoding
= NULL
;
270 const char *la_encoding
= NULL
;
271 struct type
*char_type
;
272 static char *keywords
[] = { "encoding", "errors", "length", NULL
};
274 if (!PyArg_ParseTupleAndKeywords (args
, kw
, "|ssi", keywords
,
275 &user_encoding
, &errors
, &length
))
278 TRY_CATCH (except
, RETURN_MASK_ALL
)
280 LA_GET_STRING (value
, &buffer
, &length
, &char_type
, &la_encoding
);
282 GDB_PY_HANDLE_EXCEPTION (except
);
284 encoding
= (user_encoding
&& *user_encoding
) ? user_encoding
: la_encoding
;
285 unicode
= PyUnicode_Decode (buffer
, length
* TYPE_LENGTH (char_type
),
292 /* Cast a value to a given type. */
294 valpy_cast (PyObject
*self
, PyObject
*args
)
298 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
299 volatile struct gdb_exception except
;
301 if (! PyArg_ParseTuple (args
, "O", &type_obj
))
304 type
= type_object_to_type (type_obj
);
307 PyErr_SetString (PyExc_RuntimeError
,
308 _("Argument must be a type."));
312 TRY_CATCH (except
, RETURN_MASK_ALL
)
314 res_val
= value_cast (type
, ((value_object
*) self
)->value
);
316 GDB_PY_HANDLE_EXCEPTION (except
);
318 return value_to_value_object (res_val
);
322 valpy_length (PyObject
*self
)
324 /* We don't support getting the number of elements in a struct / class. */
325 PyErr_SetString (PyExc_NotImplementedError
,
326 _("Invalid operation on gdb.Value."));
330 /* Given string name of an element inside structure, return its value
333 valpy_getitem (PyObject
*self
, PyObject
*key
)
335 value_object
*self_value
= (value_object
*) self
;
337 struct value
*res_val
= NULL
;
338 volatile struct gdb_exception except
;
340 if (gdbpy_is_string (key
))
342 field
= python_string_to_host_string (key
);
347 TRY_CATCH (except
, RETURN_MASK_ALL
)
349 struct value
*tmp
= self_value
->value
;
352 res_val
= value_struct_elt (&tmp
, NULL
, field
, 0, NULL
);
355 /* Assume we are attempting an array access, and let the
356 value code throw an exception if the index has an invalid
358 struct value
*idx
= convert_value_from_python (key
);
361 /* Check the value's type is something that can be accessed via
364 tmp
= coerce_ref (tmp
);
365 type
= check_typedef (value_type (tmp
));
366 if (TYPE_CODE (type
) != TYPE_CODE_ARRAY
367 && TYPE_CODE (type
) != TYPE_CODE_PTR
)
368 error( _("Cannot subscript requested type."));
370 res_val
= value_subscript (tmp
, value_as_long (idx
));
376 GDB_PY_HANDLE_EXCEPTION (except
);
378 return res_val
? value_to_value_object (res_val
) : NULL
;
382 valpy_setitem (PyObject
*self
, PyObject
*key
, PyObject
*value
)
384 PyErr_Format (PyExc_NotImplementedError
,
385 _("Setting of struct elements is not currently supported."));
389 /* Called by the Python interpreter to obtain string representation
392 valpy_str (PyObject
*self
)
396 struct cleanup
*old_chain
;
398 struct value_print_options opts
;
399 volatile struct gdb_exception except
;
401 get_user_print_options (&opts
);
404 stb
= mem_fileopen ();
405 old_chain
= make_cleanup_ui_file_delete (stb
);
407 TRY_CATCH (except
, RETURN_MASK_ALL
)
409 common_val_print (((value_object
*) self
)->value
, stb
, 0,
410 &opts
, python_language
);
411 s
= ui_file_xstrdup (stb
, NULL
);
413 GDB_PY_HANDLE_EXCEPTION (except
);
415 do_cleanups (old_chain
);
417 result
= PyUnicode_Decode (s
, strlen (s
), host_charset (), NULL
);
423 /* Implements gdb.Value.is_optimized_out. */
425 valpy_get_is_optimized_out (PyObject
*self
, void *closure
)
427 struct value
*value
= ((value_object
*) self
)->value
;
429 if (value_optimized_out (value
))
450 /* If TYPE is a reference, return the target; otherwise return TYPE. */
451 #define STRIP_REFERENCE(TYPE) \
452 ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
454 /* Returns a value object which is the result of applying the operation
455 specified by OPCODE to the given arguments. */
457 valpy_binop (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
459 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
460 volatile struct gdb_exception except
;
462 TRY_CATCH (except
, RETURN_MASK_ALL
)
464 struct value
*arg1
, *arg2
;
466 /* If the gdb.Value object is the second operand, then it will be passed
467 to us as the OTHER argument, and SELF will be an entirely different
468 kind of object, altogether. Because of this, we can't assume self is
469 a gdb.Value object and need to convert it from python as well. */
470 arg1
= convert_value_from_python (self
);
474 arg2
= convert_value_from_python (other
);
482 struct type
*ltype
= value_type (arg1
);
483 struct type
*rtype
= value_type (arg2
);
485 CHECK_TYPEDEF (ltype
);
486 ltype
= STRIP_REFERENCE (ltype
);
487 CHECK_TYPEDEF (rtype
);
488 rtype
= STRIP_REFERENCE (rtype
);
490 if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
491 && is_integral_type (rtype
))
492 res_val
= value_ptradd (arg1
, value_as_long (arg2
));
493 else if (TYPE_CODE (rtype
) == TYPE_CODE_PTR
494 && is_integral_type (ltype
))
495 res_val
= value_ptradd (arg2
, value_as_long (arg1
));
497 res_val
= value_binop (arg1
, arg2
, BINOP_ADD
);
502 struct type
*ltype
= value_type (arg1
);
503 struct type
*rtype
= value_type (arg2
);
505 CHECK_TYPEDEF (ltype
);
506 ltype
= STRIP_REFERENCE (ltype
);
507 CHECK_TYPEDEF (rtype
);
508 rtype
= STRIP_REFERENCE (rtype
);
510 if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
511 && TYPE_CODE (rtype
) == TYPE_CODE_PTR
)
512 /* A ptrdiff_t for the target would be preferable here. */
513 res_val
= value_from_longest (builtin_type_pyint
,
514 value_ptrdiff (arg1
, arg2
));
515 else if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
516 && is_integral_type (rtype
))
517 res_val
= value_ptradd (arg1
, - value_as_long (arg2
));
519 res_val
= value_binop (arg1
, arg2
, BINOP_SUB
);
523 res_val
= value_binop (arg1
, arg2
, BINOP_MUL
);
526 res_val
= value_binop (arg1
, arg2
, BINOP_DIV
);
529 res_val
= value_binop (arg1
, arg2
, BINOP_REM
);
532 res_val
= value_binop (arg1
, arg2
, BINOP_EXP
);
535 res_val
= value_binop (arg1
, arg2
, BINOP_LSH
);
538 res_val
= value_binop (arg1
, arg2
, BINOP_RSH
);
541 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_AND
);
544 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_IOR
);
547 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_XOR
);
551 GDB_PY_HANDLE_EXCEPTION (except
);
553 return res_val
? value_to_value_object (res_val
) : NULL
;
557 valpy_add (PyObject
*self
, PyObject
*other
)
559 return valpy_binop (VALPY_ADD
, self
, other
);
563 valpy_subtract (PyObject
*self
, PyObject
*other
)
565 return valpy_binop (VALPY_SUB
, self
, other
);
569 valpy_multiply (PyObject
*self
, PyObject
*other
)
571 return valpy_binop (VALPY_MUL
, self
, other
);
575 valpy_divide (PyObject
*self
, PyObject
*other
)
577 return valpy_binop (VALPY_DIV
, self
, other
);
581 valpy_remainder (PyObject
*self
, PyObject
*other
)
583 return valpy_binop (VALPY_REM
, self
, other
);
587 valpy_power (PyObject
*self
, PyObject
*other
, PyObject
*unused
)
589 /* We don't support the ternary form of pow. I don't know how to express
590 that, so let's just throw NotImplementedError to at least do something
592 if (unused
!= Py_None
)
594 PyErr_SetString (PyExc_NotImplementedError
,
595 "Invalid operation on gdb.Value.");
599 return valpy_binop (VALPY_POW
, self
, other
);
603 valpy_negative (PyObject
*self
)
605 struct value
*val
= NULL
;
606 volatile struct gdb_exception except
;
608 TRY_CATCH (except
, RETURN_MASK_ALL
)
610 val
= value_neg (((value_object
*) self
)->value
);
612 GDB_PY_HANDLE_EXCEPTION (except
);
614 return value_to_value_object (val
);
618 valpy_positive (PyObject
*self
)
620 return value_to_value_object (((value_object
*) self
)->value
);
624 valpy_absolute (PyObject
*self
)
626 struct value
*value
= ((value_object
*) self
)->value
;
627 if (value_less (value
, value_zero (value_type (value
), not_lval
)))
628 return valpy_negative (self
);
630 return valpy_positive (self
);
633 /* Implements boolean evaluation of gdb.Value. */
635 valpy_nonzero (PyObject
*self
)
637 value_object
*self_value
= (value_object
*) self
;
640 type
= check_typedef (value_type (self_value
->value
));
642 if (is_integral_type (type
) || TYPE_CODE (type
) == TYPE_CODE_PTR
)
643 return !!value_as_long (self_value
->value
);
644 else if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
645 return value_as_double (self_value
->value
) != 0;
646 else if (TYPE_CODE (type
) == TYPE_CODE_DECFLOAT
)
647 return !decimal_is_zero (value_contents (self_value
->value
),
649 gdbarch_byte_order (get_type_arch (type
)));
652 PyErr_SetString (PyExc_TypeError
, _("Attempted truth testing on invalid "
658 /* Implements ~ for value objects. */
660 valpy_invert (PyObject
*self
)
662 struct value
*val
= NULL
;
663 volatile struct gdb_exception except
;
665 TRY_CATCH (except
, RETURN_MASK_ALL
)
667 val
= value_complement (((value_object
*) self
)->value
);
669 GDB_PY_HANDLE_EXCEPTION (except
);
671 return value_to_value_object (val
);
674 /* Implements left shift for value objects. */
676 valpy_lsh (PyObject
*self
, PyObject
*other
)
678 return valpy_binop (VALPY_LSH
, self
, other
);
681 /* Implements right shift for value objects. */
683 valpy_rsh (PyObject
*self
, PyObject
*other
)
685 return valpy_binop (VALPY_RSH
, self
, other
);
688 /* Implements bitwise and for value objects. */
690 valpy_and (PyObject
*self
, PyObject
*other
)
692 return valpy_binop (VALPY_BITAND
, self
, other
);
695 /* Implements bitwise or for value objects. */
697 valpy_or (PyObject
*self
, PyObject
*other
)
699 return valpy_binop (VALPY_BITOR
, self
, other
);
702 /* Implements bitwise xor for value objects. */
704 valpy_xor (PyObject
*self
, PyObject
*other
)
706 return valpy_binop (VALPY_BITXOR
, self
, other
);
709 /* Implements comparison operations for value objects. */
711 valpy_richcompare (PyObject
*self
, PyObject
*other
, int op
)
714 struct value
*value_other
;
715 volatile struct gdb_exception except
;
717 if (other
== Py_None
)
718 /* Comparing with None is special. From what I can tell, in Python
719 None is smaller than anything else. */
731 PyErr_SetString (PyExc_NotImplementedError
,
732 _("Invalid operation on gdb.Value."));
736 TRY_CATCH (except
, RETURN_MASK_ALL
)
738 value_other
= convert_value_from_python (other
);
739 if (value_other
== NULL
)
747 result
= value_less (((value_object
*) self
)->value
, value_other
);
750 result
= value_less (((value_object
*) self
)->value
, value_other
)
751 || value_equal (((value_object
*) self
)->value
, value_other
);
754 result
= value_equal (((value_object
*) self
)->value
, value_other
);
757 result
= !value_equal (((value_object
*) self
)->value
, value_other
);
760 result
= value_less (value_other
, ((value_object
*) self
)->value
);
763 result
= value_less (value_other
, ((value_object
*) self
)->value
)
764 || value_equal (((value_object
*) self
)->value
, value_other
);
768 PyErr_SetString (PyExc_NotImplementedError
,
769 _("Invalid operation on gdb.Value."));
774 GDB_PY_HANDLE_EXCEPTION (except
);
776 /* In this case, the Python exception has already been set. */
786 /* Helper function to determine if a type is "int-like". */
788 is_intlike (struct type
*type
, int ptr_ok
)
790 CHECK_TYPEDEF (type
);
791 return (TYPE_CODE (type
) == TYPE_CODE_INT
792 || TYPE_CODE (type
) == TYPE_CODE_ENUM
793 || TYPE_CODE (type
) == TYPE_CODE_BOOL
794 || TYPE_CODE (type
) == TYPE_CODE_CHAR
795 || (ptr_ok
&& TYPE_CODE (type
) == TYPE_CODE_PTR
));
798 /* Implements conversion to int. */
800 valpy_int (PyObject
*self
)
802 struct value
*value
= ((value_object
*) self
)->value
;
803 struct type
*type
= value_type (value
);
805 volatile struct gdb_exception except
;
807 CHECK_TYPEDEF (type
);
808 if (!is_intlike (type
, 0))
810 PyErr_SetString (PyExc_RuntimeError
,
811 _("Cannot convert value to int."));
815 TRY_CATCH (except
, RETURN_MASK_ALL
)
817 l
= value_as_long (value
);
819 GDB_PY_HANDLE_EXCEPTION (except
);
821 #ifdef HAVE_LONG_LONG /* Defined by Python. */
822 /* If we have 'long long', and the value overflows a 'long', use a
823 Python Long; otherwise use a Python Int. */
824 if (sizeof (l
) > sizeof (long) && (l
> PyInt_GetMax ()
825 || l
< (- (LONGEST
) PyInt_GetMax ()) - 1))
826 return PyLong_FromLongLong (l
);
828 return PyInt_FromLong (l
);
831 /* Implements conversion to long. */
833 valpy_long (PyObject
*self
)
835 struct value
*value
= ((value_object
*) self
)->value
;
836 struct type
*type
= value_type (value
);
838 volatile struct gdb_exception except
;
840 if (!is_intlike (type
, 1))
842 PyErr_SetString (PyExc_RuntimeError
,
843 _("Cannot convert value to long."));
847 TRY_CATCH (except
, RETURN_MASK_ALL
)
849 l
= value_as_long (value
);
851 GDB_PY_HANDLE_EXCEPTION (except
);
853 #ifdef HAVE_LONG_LONG /* Defined by Python. */
854 return PyLong_FromLongLong (l
);
856 return PyLong_FromLong (l
);
860 /* Implements conversion to float. */
862 valpy_float (PyObject
*self
)
864 struct value
*value
= ((value_object
*) self
)->value
;
865 struct type
*type
= value_type (value
);
867 volatile struct gdb_exception except
;
869 CHECK_TYPEDEF (type
);
870 if (TYPE_CODE (type
) != TYPE_CODE_FLT
)
872 PyErr_SetString (PyExc_RuntimeError
,
873 _("Cannot convert value to float."));
877 TRY_CATCH (except
, RETURN_MASK_ALL
)
879 d
= value_as_double (value
);
881 GDB_PY_HANDLE_EXCEPTION (except
);
883 return PyFloat_FromDouble (d
);
886 /* Returns an object for a value which is released from the all_values chain,
887 so its lifetime is not bound to the execution of a command. */
889 value_to_value_object (struct value
*val
)
891 value_object
*val_obj
;
893 val_obj
= PyObject_New (value_object
, &value_object_type
);
896 val_obj
->value
= val
;
898 val_obj
->address
= NULL
;
899 val_obj
->type
= NULL
;
900 note_value (val_obj
);
903 return (PyObject
*) val_obj
;
906 /* Returns a borrowed reference to the struct value corresponding to
907 the given value object. */
909 value_object_to_value (PyObject
*self
)
912 if (! PyObject_TypeCheck (self
, &value_object_type
))
914 real
= (value_object
*) self
;
918 /* Try to convert a Python value to a gdb value. If the value cannot
919 be converted, set a Python exception and return NULL. Returns a
920 reference to a new value on the all_values chain. */
923 convert_value_from_python (PyObject
*obj
)
925 struct value
*value
= NULL
; /* -Wall */
926 PyObject
*target_str
, *unicode_str
;
928 volatile struct gdb_exception except
;
931 gdb_assert (obj
!= NULL
);
933 TRY_CATCH (except
, RETURN_MASK_ALL
)
935 if (PyBool_Check (obj
))
937 cmp
= PyObject_IsTrue (obj
);
939 value
= value_from_longest (builtin_type_pybool
, cmp
);
941 else if (PyInt_Check (obj
))
943 long l
= PyInt_AsLong (obj
);
945 if (! PyErr_Occurred ())
946 value
= value_from_longest (builtin_type_pyint
, l
);
948 else if (PyLong_Check (obj
))
950 LONGEST l
= PyLong_AsLongLong (obj
);
952 if (! PyErr_Occurred ())
953 value
= value_from_longest (builtin_type_pylong
, l
);
955 else if (PyFloat_Check (obj
))
957 double d
= PyFloat_AsDouble (obj
);
959 if (! PyErr_Occurred ())
960 value
= value_from_double (builtin_type_pyfloat
, d
);
962 else if (gdbpy_is_string (obj
))
966 s
= python_string_to_target_string (obj
);
969 old
= make_cleanup (xfree
, s
);
970 value
= value_cstring (s
, strlen (s
), builtin_type_pychar
);
974 else if (PyObject_TypeCheck (obj
, &value_object_type
))
975 value
= value_copy (((value_object
*) obj
)->value
);
976 else if (gdbpy_is_lazy_string (obj
))
979 PyObject
*function
= PyString_FromString ("value");
980 result
= PyObject_CallMethodObjArgs (obj
, function
, NULL
);
981 value
= value_copy (((value_object
*) result
)->value
);
984 PyErr_Format (PyExc_TypeError
, _("Could not convert Python object: %s."),
985 PyString_AsString (PyObject_Str (obj
)));
987 if (except
.reason
< 0)
989 PyErr_Format (except
.reason
== RETURN_QUIT
990 ? PyExc_KeyboardInterrupt
: PyExc_RuntimeError
,
991 "%s", except
.message
);
998 /* Returns value object in the ARGth position in GDB's history. */
1000 gdbpy_history (PyObject
*self
, PyObject
*args
)
1003 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
1004 volatile struct gdb_exception except
;
1006 if (!PyArg_ParseTuple (args
, "i", &i
))
1009 TRY_CATCH (except
, RETURN_MASK_ALL
)
1011 res_val
= access_value_history (i
);
1013 GDB_PY_HANDLE_EXCEPTION (except
);
1015 return value_to_value_object (res_val
);
1019 gdbpy_initialize_values (void)
1021 if (PyType_Ready (&value_object_type
) < 0)
1024 Py_INCREF (&value_object_type
);
1025 PyModule_AddObject (gdb_module
, "Value", (PyObject
*) &value_object_type
);
1027 values_in_python
= NULL
;
1032 static PyGetSetDef value_object_getset
[] = {
1033 { "address", valpy_get_address
, NULL
, "The address of the value.",
1035 { "is_optimized_out", valpy_get_is_optimized_out
, NULL
,
1036 "Boolean telling whether the value is optimized out (i.e., not available).",
1038 { "type", valpy_get_type
, NULL
, "Type of the value.", NULL
},
1039 {NULL
} /* Sentinel */
1042 static PyMethodDef value_object_methods
[] = {
1043 { "cast", valpy_cast
, METH_VARARGS
, "Cast the value to the supplied type." },
1044 { "dereference", valpy_dereference
, METH_NOARGS
, "Dereferences the value." },
1045 { "lazy_string", (PyCFunction
) valpy_lazy_string
, METH_VARARGS
| METH_KEYWORDS
,
1046 "lazy_string ([encoding] [, length]) -> lazy_string\n\
1047 Return a lazy string representation of the value." },
1048 { "string", (PyCFunction
) valpy_string
, METH_VARARGS
| METH_KEYWORDS
,
1049 "string ([encoding] [, errors] [, length]) -> string\n\
1050 Return Unicode string representation of the value." },
1051 {NULL
} /* Sentinel */
1054 static PyNumberMethods value_object_as_number
= {
1060 NULL
, /* nb_divmod */
1061 valpy_power
, /* nb_power */
1062 valpy_negative
, /* nb_negative */
1063 valpy_positive
, /* nb_positive */
1064 valpy_absolute
, /* nb_absolute */
1065 valpy_nonzero
, /* nb_nonzero */
1066 valpy_invert
, /* nb_invert */
1067 valpy_lsh
, /* nb_lshift */
1068 valpy_rsh
, /* nb_rshift */
1069 valpy_and
, /* nb_and */
1070 valpy_xor
, /* nb_xor */
1071 valpy_or
, /* nb_or */
1072 NULL
, /* nb_coerce */
1073 valpy_int
, /* nb_int */
1074 valpy_long
, /* nb_long */
1075 valpy_float
, /* nb_float */
1080 static PyMappingMethods value_object_as_mapping
= {
1086 PyTypeObject value_object_type
= {
1087 PyObject_HEAD_INIT (NULL
)
1089 "gdb.Value", /*tp_name*/
1090 sizeof (value_object
), /*tp_basicsize*/
1092 valpy_dealloc
, /*tp_dealloc*/
1098 &value_object_as_number
, /*tp_as_number*/
1099 0, /*tp_as_sequence*/
1100 &value_object_as_mapping
, /*tp_as_mapping*/
1103 valpy_str
, /*tp_str*/
1107 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_CHECKTYPES
, /*tp_flags*/
1108 "GDB value object", /* tp_doc */
1109 0, /* tp_traverse */
1111 valpy_richcompare
, /* tp_richcompare */
1112 0, /* tp_weaklistoffset */
1114 0, /* tp_iternext */
1115 value_object_methods
, /* tp_methods */
1117 value_object_getset
, /* tp_getset */
1120 0, /* tp_descr_get */
1121 0, /* tp_descr_set */
1122 0, /* tp_dictoffset */
1125 valpy_new
/* tp_new */
1131 preserve_python_values (struct objfile
*objfile
, htab_t copied_types
)
1136 #endif /* HAVE_PYTHON */