1 /* Python interface to values.
3 Copyright (C) 2008, 2009 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 /* List of all values which are currently exposed to Python. It is
30 maintained so that when an objfile is discarded, preserve_values
31 can copy the values' types if needed. This is declared
32 unconditionally to reduce the number of uses of HAVE_PYTHON in the
34 /* This variable is unnecessarily initialized to NULL in order to
35 work around a linker bug on MacOS. */
36 struct value
*values_in_python
= NULL
;
40 #include "python-internal.h"
42 /* Even though Python scalar types directly map to host types, we use
43 target types here to remain consistent with the the values system in
44 GDB (which uses target arithmetic). */
46 /* Python's integer type corresponds to C's long type. */
47 #define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long
49 /* Python's float type corresponds to C's double type. */
50 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
52 /* Python's long type corresponds to C's long long type. */
53 #define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
55 #define builtin_type_pybool \
56 language_bool_type (python_language, python_gdbarch)
58 #define builtin_type_pychar \
59 language_string_char_type (python_language, python_gdbarch)
68 /* Called by the Python interpreter when deallocating a value object. */
70 valpy_dealloc (PyObject
*obj
)
72 value_object
*self
= (value_object
*) obj
;
74 value_remove_from_list (&values_in_python
, self
->value
);
76 value_free (self
->value
);
79 /* Use braces to appease gcc warning. *sigh* */
81 Py_DECREF (self
->address
);
86 Py_DECREF (self
->type
);
89 self
->ob_type
->tp_free (self
);
92 /* Called when a new gdb.Value object needs to be allocated. */
94 valpy_new (PyTypeObject
*subtype
, PyObject
*args
, PyObject
*keywords
)
96 struct value
*value
= NULL
; /* Initialize to appease gcc warning. */
97 value_object
*value_obj
;
99 if (PyTuple_Size (args
) != 1)
101 PyErr_SetString (PyExc_TypeError
, _("Value object creation takes only "
106 value_obj
= (value_object
*) subtype
->tp_alloc (subtype
, 1);
107 if (value_obj
== NULL
)
109 PyErr_SetString (PyExc_MemoryError
, _("Could not allocate memory to "
110 "create Value object."));
114 value
= convert_value_from_python (PyTuple_GetItem (args
, 0));
117 subtype
->tp_free (value_obj
);
121 value_obj
->value
= value
;
122 value_obj
->address
= NULL
;
123 value_obj
->type
= NULL
;
124 release_value (value
);
125 value_prepend_to_list (&values_in_python
, value
);
127 return (PyObject
*) value_obj
;
130 /* Given a value of a pointer type, apply the C unary * operator to it. */
132 valpy_dereference (PyObject
*self
, PyObject
*args
)
134 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
135 volatile struct gdb_exception except
;
137 TRY_CATCH (except
, RETURN_MASK_ALL
)
139 res_val
= value_ind (((value_object
*) self
)->value
);
141 GDB_PY_HANDLE_EXCEPTION (except
);
143 return value_to_value_object (res_val
);
146 /* Return "&value". */
148 valpy_get_address (PyObject
*self
, void *closure
)
150 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
151 value_object
*val_obj
= (value_object
*) self
;
152 volatile struct gdb_exception except
;
154 if (!val_obj
->address
)
156 TRY_CATCH (except
, RETURN_MASK_ALL
)
158 res_val
= value_addr (val_obj
->value
);
160 if (except
.reason
< 0)
162 val_obj
->address
= Py_None
;
166 val_obj
->address
= value_to_value_object (res_val
);
169 Py_INCREF (val_obj
->address
);
171 return val_obj
->address
;
174 /* Return type of the value. */
176 valpy_get_type (PyObject
*self
, void *closure
)
178 value_object
*obj
= (value_object
*) self
;
181 obj
->type
= type_to_type_object (value_type (obj
->value
));
185 Py_INCREF (obj
->type
);
188 Py_INCREF (obj
->type
);
192 /* Implementation of gdb.Value.string ([encoding] [, errors]) -> string
193 Return Unicode string with value contents. If ENCODING is not given,
194 the string is assumed to be encoded in the target's charset. */
196 valpy_string (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
200 struct value
*value
= ((value_object
*) self
)->value
;
201 volatile struct gdb_exception except
;
203 const char *encoding
= NULL
;
204 const char *errors
= NULL
;
205 const char *user_encoding
= NULL
;
206 const char *la_encoding
= NULL
;
207 static char *keywords
[] = { "encoding", "errors" };
209 if (!PyArg_ParseTupleAndKeywords (args
, kw
, "|ss", keywords
,
210 &user_encoding
, &errors
))
213 TRY_CATCH (except
, RETURN_MASK_ALL
)
215 LA_GET_STRING (value
, &buffer
, &length
, &la_encoding
);
217 GDB_PY_HANDLE_EXCEPTION (except
);
219 encoding
= (user_encoding
&& *user_encoding
) ? user_encoding
: la_encoding
;
220 unicode
= PyUnicode_Decode (buffer
, length
, encoding
, errors
);
226 /* Cast a value to a given type. */
228 valpy_cast (PyObject
*self
, PyObject
*args
)
232 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
233 volatile struct gdb_exception except
;
235 if (! PyArg_ParseTuple (args
, "O", &type_obj
))
238 type
= type_object_to_type (type_obj
);
241 PyErr_SetString (PyExc_RuntimeError
, "argument must be a Type");
245 TRY_CATCH (except
, RETURN_MASK_ALL
)
247 res_val
= value_cast (type
, ((value_object
*) self
)->value
);
249 GDB_PY_HANDLE_EXCEPTION (except
);
251 return value_to_value_object (res_val
);
255 valpy_length (PyObject
*self
)
257 /* We don't support getting the number of elements in a struct / class. */
258 PyErr_SetString (PyExc_NotImplementedError
,
259 "Invalid operation on gdb.Value.");
263 /* Given string name of an element inside structure, return its value
266 valpy_getitem (PyObject
*self
, PyObject
*key
)
268 value_object
*self_value
= (value_object
*) self
;
270 struct value
*res_val
= NULL
;
271 volatile struct gdb_exception except
;
273 if (gdbpy_is_string (key
))
275 field
= python_string_to_host_string (key
);
280 TRY_CATCH (except
, RETURN_MASK_ALL
)
282 struct value
*tmp
= self_value
->value
;
285 res_val
= value_struct_elt (&tmp
, NULL
, field
, 0, NULL
);
288 /* Assume we are attempting an array access, and let the
289 value code throw an exception if the index has an invalid
291 struct value
*idx
= convert_value_from_python (key
);
293 res_val
= value_subscript (tmp
, value_as_long (idx
));
298 GDB_PY_HANDLE_EXCEPTION (except
);
300 return res_val
? value_to_value_object (res_val
) : NULL
;
304 valpy_setitem (PyObject
*self
, PyObject
*key
, PyObject
*value
)
306 PyErr_Format (PyExc_NotImplementedError
,
307 _("Setting of struct elements is not currently supported."));
311 /* Called by the Python interpreter to obtain string representation
314 valpy_str (PyObject
*self
)
319 struct cleanup
*old_chain
;
321 struct value_print_options opts
;
322 volatile struct gdb_exception except
;
324 get_user_print_options (&opts
);
327 stb
= mem_fileopen ();
328 old_chain
= make_cleanup_ui_file_delete (stb
);
330 TRY_CATCH (except
, RETURN_MASK_ALL
)
332 common_val_print (((value_object
*) self
)->value
, stb
, 0,
333 &opts
, python_language
);
334 s
= ui_file_xstrdup (stb
, &dummy
);
336 GDB_PY_HANDLE_EXCEPTION (except
);
338 do_cleanups (old_chain
);
340 result
= PyUnicode_Decode (s
, strlen (s
), host_charset (), NULL
);
346 /* Implements gdb.Value.is_optimized_out. */
348 valpy_get_is_optimized_out (PyObject
*self
, void *closure
)
350 struct value
*value
= ((value_object
*) self
)->value
;
352 if (value_optimized_out (value
))
373 /* If TYPE is a reference, return the target; otherwise return TYPE. */
374 #define STRIP_REFERENCE(TYPE) \
375 ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
377 /* Returns a value object which is the result of applying the operation
378 specified by OPCODE to the given arguments. */
380 valpy_binop (enum valpy_opcode opcode
, PyObject
*self
, PyObject
*other
)
382 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
383 volatile struct gdb_exception except
;
385 TRY_CATCH (except
, RETURN_MASK_ALL
)
387 struct value
*arg1
, *arg2
;
389 /* If the gdb.Value object is the second operand, then it will be passed
390 to us as the OTHER argument, and SELF will be an entirely different
391 kind of object, altogether. Because of this, we can't assume self is
392 a gdb.Value object and need to convert it from python as well. */
393 arg1
= convert_value_from_python (self
);
397 arg2
= convert_value_from_python (other
);
405 struct type
*ltype
= value_type (arg1
);
406 struct type
*rtype
= value_type (arg2
);
408 CHECK_TYPEDEF (ltype
);
409 ltype
= STRIP_REFERENCE (ltype
);
410 CHECK_TYPEDEF (rtype
);
411 rtype
= STRIP_REFERENCE (rtype
);
413 if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
414 && is_integral_type (rtype
))
415 res_val
= value_ptradd (arg1
, value_as_long (arg2
));
416 else if (TYPE_CODE (rtype
) == TYPE_CODE_PTR
417 && is_integral_type (ltype
))
418 res_val
= value_ptradd (arg2
, value_as_long (arg1
));
420 res_val
= value_binop (arg1
, arg2
, BINOP_ADD
);
425 struct type
*ltype
= value_type (arg1
);
426 struct type
*rtype
= value_type (arg2
);
428 CHECK_TYPEDEF (ltype
);
429 ltype
= STRIP_REFERENCE (ltype
);
430 CHECK_TYPEDEF (rtype
);
431 rtype
= STRIP_REFERENCE (rtype
);
433 if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
434 && TYPE_CODE (rtype
) == TYPE_CODE_PTR
)
435 /* A ptrdiff_t for the target would be preferable here. */
436 res_val
= value_from_longest (builtin_type_pyint
,
437 value_ptrdiff (arg1
, arg2
));
438 else if (TYPE_CODE (ltype
) == TYPE_CODE_PTR
439 && is_integral_type (rtype
))
440 res_val
= value_ptradd (arg1
, - value_as_long (arg2
));
442 res_val
= value_binop (arg1
, arg2
, BINOP_SUB
);
446 res_val
= value_binop (arg1
, arg2
, BINOP_MUL
);
449 res_val
= value_binop (arg1
, arg2
, BINOP_DIV
);
452 res_val
= value_binop (arg1
, arg2
, BINOP_REM
);
455 res_val
= value_binop (arg1
, arg2
, BINOP_EXP
);
458 res_val
= value_binop (arg1
, arg2
, BINOP_LSH
);
461 res_val
= value_binop (arg1
, arg2
, BINOP_RSH
);
464 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_AND
);
467 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_IOR
);
470 res_val
= value_binop (arg1
, arg2
, BINOP_BITWISE_XOR
);
474 GDB_PY_HANDLE_EXCEPTION (except
);
476 return res_val
? value_to_value_object (res_val
) : NULL
;
480 valpy_add (PyObject
*self
, PyObject
*other
)
482 return valpy_binop (VALPY_ADD
, self
, other
);
486 valpy_subtract (PyObject
*self
, PyObject
*other
)
488 return valpy_binop (VALPY_SUB
, self
, other
);
492 valpy_multiply (PyObject
*self
, PyObject
*other
)
494 return valpy_binop (VALPY_MUL
, self
, other
);
498 valpy_divide (PyObject
*self
, PyObject
*other
)
500 return valpy_binop (VALPY_DIV
, self
, other
);
504 valpy_remainder (PyObject
*self
, PyObject
*other
)
506 return valpy_binop (VALPY_REM
, self
, other
);
510 valpy_power (PyObject
*self
, PyObject
*other
, PyObject
*unused
)
512 /* We don't support the ternary form of pow. I don't know how to express
513 that, so let's just throw NotImplementedError to at least do something
515 if (unused
!= Py_None
)
517 PyErr_SetString (PyExc_NotImplementedError
,
518 "Invalid operation on gdb.Value.");
522 return valpy_binop (VALPY_POW
, self
, other
);
526 valpy_negative (PyObject
*self
)
528 struct value
*val
= NULL
;
529 volatile struct gdb_exception except
;
531 TRY_CATCH (except
, RETURN_MASK_ALL
)
533 val
= value_neg (((value_object
*) self
)->value
);
535 GDB_PY_HANDLE_EXCEPTION (except
);
537 return value_to_value_object (val
);
541 valpy_positive (PyObject
*self
)
543 struct value
*copy
= value_copy (((value_object
*) self
)->value
);
545 return value_to_value_object (copy
);
549 valpy_absolute (PyObject
*self
)
551 struct value
*value
= ((value_object
*) self
)->value
;
552 if (value_less (value
, value_zero (value_type (value
), not_lval
)))
553 return valpy_negative (self
);
555 return valpy_positive (self
);
558 /* Implements boolean evaluation of gdb.Value. */
560 valpy_nonzero (PyObject
*self
)
562 value_object
*self_value
= (value_object
*) self
;
565 type
= check_typedef (value_type (self_value
->value
));
567 if (is_integral_type (type
) || TYPE_CODE (type
) == TYPE_CODE_PTR
)
568 return !!value_as_long (self_value
->value
);
569 else if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
570 return value_as_double (self_value
->value
) != 0;
571 else if (TYPE_CODE (type
) == TYPE_CODE_DECFLOAT
)
572 return !decimal_is_zero (value_contents (self_value
->value
),
574 gdbarch_byte_order (get_type_arch (type
)));
577 PyErr_SetString (PyExc_TypeError
, _("Attempted truth testing on invalid "
583 /* Implements ~ for value objects. */
585 valpy_invert (PyObject
*self
)
587 struct value
*val
= NULL
;
588 volatile struct gdb_exception except
;
590 TRY_CATCH (except
, RETURN_MASK_ALL
)
592 val
= value_complement (((value_object
*) self
)->value
);
594 GDB_PY_HANDLE_EXCEPTION (except
);
596 return value_to_value_object (val
);
599 /* Implements left shift for value objects. */
601 valpy_lsh (PyObject
*self
, PyObject
*other
)
603 return valpy_binop (VALPY_LSH
, self
, other
);
606 /* Implements right shift for value objects. */
608 valpy_rsh (PyObject
*self
, PyObject
*other
)
610 return valpy_binop (VALPY_RSH
, self
, other
);
613 /* Implements bitwise and for value objects. */
615 valpy_and (PyObject
*self
, PyObject
*other
)
617 return valpy_binop (VALPY_BITAND
, self
, other
);
620 /* Implements bitwise or for value objects. */
622 valpy_or (PyObject
*self
, PyObject
*other
)
624 return valpy_binop (VALPY_BITOR
, self
, other
);
627 /* Implements bitwise xor for value objects. */
629 valpy_xor (PyObject
*self
, PyObject
*other
)
631 return valpy_binop (VALPY_BITXOR
, self
, other
);
634 /* Implements comparison operations for value objects. */
636 valpy_richcompare (PyObject
*self
, PyObject
*other
, int op
)
639 struct value
*value_other
;
640 volatile struct gdb_exception except
;
642 if (other
== Py_None
)
643 /* Comparing with None is special. From what I can tell, in Python
644 None is smaller than anything else. */
656 PyErr_SetString (PyExc_NotImplementedError
,
657 "Invalid operation on gdb.Value.");
661 TRY_CATCH (except
, RETURN_MASK_ALL
)
663 value_other
= convert_value_from_python (other
);
664 if (value_other
== NULL
)
669 result
= value_less (((value_object
*) self
)->value
, value_other
);
672 result
= value_less (((value_object
*) self
)->value
, value_other
)
673 || value_equal (((value_object
*) self
)->value
, value_other
);
676 result
= value_equal (((value_object
*) self
)->value
, value_other
);
679 result
= !value_equal (((value_object
*) self
)->value
, value_other
);
682 result
= value_less (value_other
, ((value_object
*) self
)->value
);
685 result
= value_less (value_other
, ((value_object
*) self
)->value
)
686 || value_equal (((value_object
*) self
)->value
, value_other
);
690 PyErr_SetString (PyExc_NotImplementedError
,
691 "Invalid operation on gdb.Value.");
695 GDB_PY_HANDLE_EXCEPTION (except
);
703 /* Helper function to determine if a type is "int-like". */
705 is_intlike (struct type
*type
, int ptr_ok
)
707 CHECK_TYPEDEF (type
);
708 return (TYPE_CODE (type
) == TYPE_CODE_INT
709 || TYPE_CODE (type
) == TYPE_CODE_ENUM
710 || TYPE_CODE (type
) == TYPE_CODE_BOOL
711 || TYPE_CODE (type
) == TYPE_CODE_CHAR
712 || (ptr_ok
&& TYPE_CODE (type
) == TYPE_CODE_PTR
));
715 /* Implements conversion to int. */
717 valpy_int (PyObject
*self
)
719 struct value
*value
= ((value_object
*) self
)->value
;
720 struct type
*type
= value_type (value
);
722 volatile struct gdb_exception except
;
724 CHECK_TYPEDEF (type
);
725 if (!is_intlike (type
, 0))
727 PyErr_SetString (PyExc_RuntimeError
, "cannot convert value to int");
731 TRY_CATCH (except
, RETURN_MASK_ALL
)
733 l
= value_as_long (value
);
735 GDB_PY_HANDLE_EXCEPTION (except
);
737 return PyInt_FromLong (l
);
740 /* Implements conversion to long. */
742 valpy_long (PyObject
*self
)
744 struct value
*value
= ((value_object
*) self
)->value
;
745 struct type
*type
= value_type (value
);
747 volatile struct gdb_exception except
;
749 if (!is_intlike (type
, 1))
751 PyErr_SetString (PyExc_RuntimeError
, "cannot convert value to long");
755 TRY_CATCH (except
, RETURN_MASK_ALL
)
757 l
= value_as_long (value
);
759 GDB_PY_HANDLE_EXCEPTION (except
);
761 return PyLong_FromLong (l
);
764 /* Implements conversion to float. */
766 valpy_float (PyObject
*self
)
768 struct value
*value
= ((value_object
*) self
)->value
;
769 struct type
*type
= value_type (value
);
771 volatile struct gdb_exception except
;
773 CHECK_TYPEDEF (type
);
774 if (TYPE_CODE (type
) != TYPE_CODE_FLT
)
776 PyErr_SetString (PyExc_RuntimeError
, "cannot convert value to float");
780 TRY_CATCH (except
, RETURN_MASK_ALL
)
782 d
= value_as_double (value
);
784 GDB_PY_HANDLE_EXCEPTION (except
);
786 return PyFloat_FromDouble (d
);
789 /* Returns an object for a value which is released from the all_values chain,
790 so its lifetime is not bound to the execution of a command. */
792 value_to_value_object (struct value
*val
)
794 value_object
*val_obj
;
796 val_obj
= PyObject_New (value_object
, &value_object_type
);
799 val_obj
->value
= val
;
800 val_obj
->address
= NULL
;
801 val_obj
->type
= NULL
;
803 value_prepend_to_list (&values_in_python
, val
);
806 return (PyObject
*) val_obj
;
809 /* Returns value structure corresponding to the given value object. */
811 value_object_to_value (PyObject
*self
)
814 if (! PyObject_TypeCheck (self
, &value_object_type
))
816 real
= (value_object
*) self
;
820 /* Try to convert a Python value to a gdb value. If the value cannot
821 be converted, set a Python exception and return NULL. */
824 convert_value_from_python (PyObject
*obj
)
826 struct value
*value
= NULL
; /* -Wall */
827 PyObject
*target_str
, *unicode_str
;
829 volatile struct gdb_exception except
;
832 gdb_assert (obj
!= NULL
);
834 TRY_CATCH (except
, RETURN_MASK_ALL
)
836 if (PyBool_Check (obj
))
838 cmp
= PyObject_IsTrue (obj
);
840 value
= value_from_longest (builtin_type_pybool
, cmp
);
842 else if (PyInt_Check (obj
))
844 long l
= PyInt_AsLong (obj
);
846 if (! PyErr_Occurred ())
847 value
= value_from_longest (builtin_type_pyint
, l
);
849 else if (PyLong_Check (obj
))
851 LONGEST l
= PyLong_AsLongLong (obj
);
853 if (! PyErr_Occurred ())
854 value
= value_from_longest (builtin_type_pylong
, l
);
856 else if (PyFloat_Check (obj
))
858 double d
= PyFloat_AsDouble (obj
);
860 if (! PyErr_Occurred ())
861 value
= value_from_double (builtin_type_pyfloat
, d
);
863 else if (gdbpy_is_string (obj
))
867 s
= python_string_to_target_string (obj
);
870 old
= make_cleanup (xfree
, s
);
871 value
= value_cstring (s
, strlen (s
), builtin_type_pychar
);
875 else if (PyObject_TypeCheck (obj
, &value_object_type
))
876 value
= value_copy (((value_object
*) obj
)->value
);
878 PyErr_Format (PyExc_TypeError
, _("Could not convert Python object: %s"),
879 PyString_AsString (PyObject_Str (obj
)));
881 if (except
.reason
< 0)
883 PyErr_Format (except
.reason
== RETURN_QUIT
884 ? PyExc_KeyboardInterrupt
: PyExc_RuntimeError
,
885 "%s", except
.message
);
892 /* Returns value object in the ARGth position in GDB's history. */
894 gdbpy_history (PyObject
*self
, PyObject
*args
)
897 struct value
*res_val
= NULL
; /* Initialize to appease gcc warning. */
898 volatile struct gdb_exception except
;
900 if (!PyArg_ParseTuple (args
, "i", &i
))
903 TRY_CATCH (except
, RETURN_MASK_ALL
)
905 res_val
= access_value_history (i
);
907 GDB_PY_HANDLE_EXCEPTION (except
);
909 return value_to_value_object (res_val
);
913 gdbpy_initialize_values (void)
915 if (PyType_Ready (&value_object_type
) < 0)
918 Py_INCREF (&value_object_type
);
919 PyModule_AddObject (gdb_module
, "Value", (PyObject
*) &value_object_type
);
921 values_in_python
= NULL
;
926 static PyGetSetDef value_object_getset
[] = {
927 { "address", valpy_get_address
, NULL
, "The address of the value.",
929 { "is_optimized_out", valpy_get_is_optimized_out
, NULL
,
930 "Boolean telling whether the value is optimized out (i.e., not available).",
932 { "type", valpy_get_type
, NULL
, "Type of the value.", NULL
},
933 {NULL
} /* Sentinel */
936 static PyMethodDef value_object_methods
[] = {
937 { "cast", valpy_cast
, METH_VARARGS
, "Cast the value to the supplied type." },
938 { "dereference", valpy_dereference
, METH_NOARGS
, "Dereferences the value." },
939 { "string", (PyCFunction
) valpy_string
, METH_VARARGS
| METH_KEYWORDS
,
940 "string ([encoding] [, errors]) -> string\n\
941 Return Unicode string representation of the value." },
942 {NULL
} /* Sentinel */
945 static PyNumberMethods value_object_as_number
= {
951 NULL
, /* nb_divmod */
952 valpy_power
, /* nb_power */
953 valpy_negative
, /* nb_negative */
954 valpy_positive
, /* nb_positive */
955 valpy_absolute
, /* nb_absolute */
956 valpy_nonzero
, /* nb_nonzero */
957 valpy_invert
, /* nb_invert */
958 valpy_lsh
, /* nb_lshift */
959 valpy_rsh
, /* nb_rshift */
960 valpy_and
, /* nb_and */
961 valpy_xor
, /* nb_xor */
962 valpy_or
, /* nb_or */
963 NULL
, /* nb_coerce */
964 valpy_int
, /* nb_int */
965 valpy_long
, /* nb_long */
966 valpy_float
, /* nb_float */
971 static PyMappingMethods value_object_as_mapping
= {
977 PyTypeObject value_object_type
= {
978 PyObject_HEAD_INIT (NULL
)
980 "gdb.Value", /*tp_name*/
981 sizeof (value_object
), /*tp_basicsize*/
983 valpy_dealloc
, /*tp_dealloc*/
989 &value_object_as_number
, /*tp_as_number*/
990 0, /*tp_as_sequence*/
991 &value_object_as_mapping
, /*tp_as_mapping*/
994 valpy_str
, /*tp_str*/
998 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_CHECKTYPES
, /*tp_flags*/
999 "GDB value object", /* tp_doc */
1000 0, /* tp_traverse */
1002 valpy_richcompare
, /* tp_richcompare */
1003 0, /* tp_weaklistoffset */
1005 0, /* tp_iternext */
1006 value_object_methods
, /* tp_methods */
1008 value_object_getset
, /* tp_getset */
1011 0, /* tp_descr_get */
1012 0, /* tp_descr_set */
1013 0, /* tp_dictoffset */
1016 valpy_new
/* tp_new */
1019 #endif /* HAVE_PYTHON */