Automatic date update in version.in
[platform/upstream/binutils.git] / gdb / python / py-value.c
1 /* Python interface to values.
2
3    Copyright (C) 2008-2014 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
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.
11
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.
16
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/>.  */
19
20 #include "defs.h"
21 #include "charset.h"
22 #include "value.h"
23 #include "language.h"
24 #include "dfp.h"
25 #include "valprint.h"
26 #include "infcall.h"
27 #include "expression.h"
28 #include "cp-abi.h"
29 #include "python.h"
30
31 #include "python-internal.h"
32
33 /* Even though Python scalar types directly map to host types, we use
34    target types here to remain consistent with the values system in
35    GDB (which uses target arithmetic).  */
36
37 /* Python's integer type corresponds to C's long type.  */
38 #define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long
39
40 /* Python's float type corresponds to C's double type.  */
41 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
42
43 /* Python's long type corresponds to C's long long type.  */
44 #define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
45
46 /* Python's long type corresponds to C's long long type.  Unsigned version.  */
47 #define builtin_type_upylong builtin_type \
48   (python_gdbarch)->builtin_unsigned_long_long
49
50 #define builtin_type_pybool \
51   language_bool_type (python_language, python_gdbarch)
52
53 #define builtin_type_pychar \
54   language_string_char_type (python_language, python_gdbarch)
55
56 typedef struct value_object {
57   PyObject_HEAD
58   struct value_object *next;
59   struct value_object *prev;
60   struct value *value;
61   PyObject *address;
62   PyObject *type;
63   PyObject *dynamic_type;
64 } value_object;
65
66 /* List of all values which are currently exposed to Python. It is
67    maintained so that when an objfile is discarded, preserve_values
68    can copy the values' types if needed.  */
69 /* This variable is unnecessarily initialized to NULL in order to
70    work around a linker bug on MacOS.  */
71 static value_object *values_in_python = NULL;
72
73 /* Called by the Python interpreter when deallocating a value object.  */
74 static void
75 valpy_dealloc (PyObject *obj)
76 {
77   value_object *self = (value_object *) obj;
78
79   /* Remove SELF from the global list.  */
80   if (self->prev)
81     self->prev->next = self->next;
82   else
83     {
84       gdb_assert (values_in_python == self);
85       values_in_python = self->next;
86     }
87   if (self->next)
88     self->next->prev = self->prev;
89
90   value_free (self->value);
91
92   if (self->address)
93     /* Use braces to appease gcc warning.  *sigh*  */
94     {
95       Py_DECREF (self->address);
96     }
97
98   if (self->type)
99     {
100       Py_DECREF (self->type);
101     }
102
103   Py_XDECREF (self->dynamic_type);
104
105   Py_TYPE (self)->tp_free (self);
106 }
107
108 /* Helper to push a Value object on the global list.  */
109 static void
110 note_value (value_object *value_obj)
111 {
112   value_obj->next = values_in_python;
113   if (value_obj->next)
114     value_obj->next->prev = value_obj;
115   value_obj->prev = NULL;
116   values_in_python = value_obj;
117 }
118
119 /* Called when a new gdb.Value object needs to be allocated.  Returns NULL on
120    error, with a python exception set.  */
121 static PyObject *
122 valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
123 {
124   struct value *value = NULL;   /* Initialize to appease gcc warning.  */
125   value_object *value_obj;
126
127   if (PyTuple_Size (args) != 1)
128     {
129       PyErr_SetString (PyExc_TypeError, _("Value object creation takes only "
130                                           "1 argument"));
131       return NULL;
132     }
133
134   value_obj = (value_object *) subtype->tp_alloc (subtype, 1);
135   if (value_obj == NULL)
136     {
137       PyErr_SetString (PyExc_MemoryError, _("Could not allocate memory to "
138                                             "create Value object."));
139       return NULL;
140     }
141
142   value = convert_value_from_python (PyTuple_GetItem (args, 0));
143   if (value == NULL)
144     {
145       subtype->tp_free (value_obj);
146       return NULL;
147     }
148
149   value_obj->value = value;
150   release_value_or_incref (value);
151   value_obj->address = NULL;
152   value_obj->type = NULL;
153   value_obj->dynamic_type = NULL;
154   note_value (value_obj);
155
156   return (PyObject *) value_obj;
157 }
158
159 /* Iterate over all the Value objects, calling preserve_one_value on
160    each.  */
161 void
162 gdbpy_preserve_values (const struct extension_language_defn *extlang,
163                        struct objfile *objfile, htab_t copied_types)
164 {
165   value_object *iter;
166
167   for (iter = values_in_python; iter; iter = iter->next)
168     preserve_one_value (iter->value, objfile, copied_types);
169 }
170
171 /* Given a value of a pointer type, apply the C unary * operator to it.  */
172 static PyObject *
173 valpy_dereference (PyObject *self, PyObject *args)
174 {
175   volatile struct gdb_exception except;
176   PyObject *result = NULL;
177
178   TRY_CATCH (except, RETURN_MASK_ALL)
179     {
180       struct value *res_val;
181       struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
182
183       res_val = value_ind (((value_object *) self)->value);
184       result = value_to_value_object (res_val);
185       do_cleanups (cleanup);
186     }
187   GDB_PY_HANDLE_EXCEPTION (except);
188
189   return result;
190 }
191
192 /* Given a value of a pointer type or a reference type, return the value
193    referenced. The difference between this function and valpy_dereference is
194    that the latter applies * unary operator to a value, which need not always
195    result in the value referenced. For example, for a value which is a reference
196    to an 'int' pointer ('int *'), valpy_dereference will result in a value of
197    type 'int' while valpy_referenced_value will result in a value of type
198    'int *'.  */
199
200 static PyObject *
201 valpy_referenced_value (PyObject *self, PyObject *args)
202 {
203   volatile struct gdb_exception except;
204   PyObject *result = NULL;
205
206   TRY_CATCH (except, RETURN_MASK_ALL)
207     {
208       struct value *self_val, *res_val;
209       struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
210
211       self_val = ((value_object *) self)->value;
212       switch (TYPE_CODE (check_typedef (value_type (self_val))))
213         {
214         case TYPE_CODE_PTR:
215           res_val = value_ind (self_val);
216           break;
217         case TYPE_CODE_REF:
218           res_val = coerce_ref (self_val);
219           break;
220         default:
221           error(_("Trying to get the referenced value from a value which is "
222                   "neither a pointer nor a reference."));
223         }
224
225       result = value_to_value_object (res_val);
226       do_cleanups (cleanup);
227     }
228   GDB_PY_HANDLE_EXCEPTION (except);
229
230   return result;
231 }
232
233 /* Return "&value".  */
234 static PyObject *
235 valpy_get_address (PyObject *self, void *closure)
236 {
237   value_object *val_obj = (value_object *) self;
238   volatile struct gdb_exception except;
239
240   if (!val_obj->address)
241     {
242       TRY_CATCH (except, RETURN_MASK_ALL)
243         {
244           struct value *res_val;
245           struct cleanup *cleanup
246             = make_cleanup_value_free_to_mark (value_mark ());
247
248           res_val = value_addr (val_obj->value);
249           val_obj->address = value_to_value_object (res_val);
250           do_cleanups (cleanup);
251         }
252       if (except.reason < 0)
253         {
254           val_obj->address = Py_None;
255           Py_INCREF (Py_None);
256         }
257     }
258
259   Py_XINCREF (val_obj->address);
260
261   return val_obj->address;
262 }
263
264 /* Return type of the value.  */
265 static PyObject *
266 valpy_get_type (PyObject *self, void *closure)
267 {
268   value_object *obj = (value_object *) self;
269
270   if (!obj->type)
271     {
272       obj->type = type_to_type_object (value_type (obj->value));
273       if (!obj->type)
274         return NULL;
275     }
276   Py_INCREF (obj->type);
277   return obj->type;
278 }
279
280 /* Return dynamic type of the value.  */
281
282 static PyObject *
283 valpy_get_dynamic_type (PyObject *self, void *closure)
284 {
285   value_object *obj = (value_object *) self;
286   volatile struct gdb_exception except;
287   struct type *type = NULL;
288
289   if (obj->dynamic_type != NULL)
290     {
291       Py_INCREF (obj->dynamic_type);
292       return obj->dynamic_type;
293     }
294
295   TRY_CATCH (except, RETURN_MASK_ALL)
296     {
297       struct value *val = obj->value;
298       struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
299
300       type = value_type (val);
301       CHECK_TYPEDEF (type);
302
303       if (((TYPE_CODE (type) == TYPE_CODE_PTR)
304            || (TYPE_CODE (type) == TYPE_CODE_REF))
305           && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
306         {
307           struct value *target;
308           int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
309
310           if (was_pointer)
311             target = value_ind (val);
312           else
313             target = coerce_ref (val);
314           type = value_rtti_type (target, NULL, NULL, NULL);
315
316           if (type)
317             {
318               if (was_pointer)
319                 type = lookup_pointer_type (type);
320               else
321                 type = lookup_reference_type (type);
322             }
323         }
324       else if (TYPE_CODE (type) == TYPE_CODE_CLASS)
325         type = value_rtti_type (val, NULL, NULL, NULL);
326       else
327         {
328           /* Re-use object's static type.  */
329           type = NULL;
330         }
331
332       do_cleanups (cleanup);
333     }
334   GDB_PY_HANDLE_EXCEPTION (except);
335
336   if (type == NULL)
337     obj->dynamic_type = valpy_get_type (self, NULL);
338   else
339     obj->dynamic_type = type_to_type_object (type);
340
341   Py_XINCREF (obj->dynamic_type);
342   return obj->dynamic_type;
343 }
344
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).  */
353 static PyObject *
354 valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
355 {
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;
362
363   if (!PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG, keywords,
364                                     &user_encoding, &length))
365     return NULL;
366
367   TRY_CATCH (except, RETURN_MASK_ALL)
368     {
369       struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
370
371       if (TYPE_CODE (value_type (value)) == TYPE_CODE_PTR)
372         value = value_ind (value);
373
374       str_obj = gdbpy_create_lazy_string_object (value_address (value), length,
375                                                  user_encoding,
376                                                  value_type (value));
377
378       do_cleanups (cleanup);
379     }
380   GDB_PY_HANDLE_EXCEPTION (except);
381
382   return str_obj;
383 }
384
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.  */
390
391 static PyObject *
392 valpy_string (PyObject *self, PyObject *args, PyObject *kw)
393 {
394   int length = -1;
395   gdb_byte *buffer;
396   struct value *value = ((value_object *) self)->value;
397   volatile struct gdb_exception except;
398   PyObject *unicode;
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 };
405
406   if (!PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords,
407                                     &user_encoding, &errors, &length))
408     return NULL;
409
410   TRY_CATCH (except, RETURN_MASK_ALL)
411     {
412       LA_GET_STRING (value, &buffer, &length, &char_type, &la_encoding);
413     }
414   GDB_PY_HANDLE_EXCEPTION (except);
415
416   encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding;
417   unicode = PyUnicode_Decode ((const char *) buffer,
418                               length * TYPE_LENGTH (char_type),
419                               encoding, errors);
420   xfree (buffer);
421
422   return unicode;
423 }
424
425 /* A helper function that implements the various cast operators.  */
426
427 static PyObject *
428 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
429 {
430   PyObject *type_obj, *result = NULL;
431   struct type *type;
432   volatile struct gdb_exception except;
433
434   if (! PyArg_ParseTuple (args, "O", &type_obj))
435     return NULL;
436
437   type = type_object_to_type (type_obj);
438   if (! type)
439     {
440       PyErr_SetString (PyExc_RuntimeError,
441                        _("Argument must be a type."));
442       return NULL;
443     }
444
445   TRY_CATCH (except, RETURN_MASK_ALL)
446     {
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 ());
450
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);
455       else
456         {
457           gdb_assert (op == UNOP_CAST);
458           res_val = value_cast (type, val);
459         }
460
461       result = value_to_value_object (res_val);
462       do_cleanups (cleanup);
463     }
464   GDB_PY_HANDLE_EXCEPTION (except);
465
466   return result;
467 }
468
469 /* Implementation of the "cast" method.  */
470
471 static PyObject *
472 valpy_cast (PyObject *self, PyObject *args)
473 {
474   return valpy_do_cast (self, args, UNOP_CAST);
475 }
476
477 /* Implementation of the "dynamic_cast" method.  */
478
479 static PyObject *
480 valpy_dynamic_cast (PyObject *self, PyObject *args)
481 {
482   return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
483 }
484
485 /* Implementation of the "reinterpret_cast" method.  */
486
487 static PyObject *
488 valpy_reinterpret_cast (PyObject *self, PyObject *args)
489 {
490   return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
491 }
492
493 static Py_ssize_t
494 valpy_length (PyObject *self)
495 {
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."));
499   return -1;
500 }
501
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.  */
504
505 static int
506 value_has_field (struct value *v, PyObject *field)
507 {
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;
512   int has_field = 0;
513
514   if (type_object == NULL)
515     return -1;
516
517   parent_type = type_object_to_type (type_object);
518   Py_DECREF (type_object);
519   if (parent_type == NULL)
520     {
521       PyErr_SetString (PyExc_TypeError,
522                        _("'parent_type' attribute of gdb.Field object is not a"
523                          "gdb.Type object."));
524       return -1;
525     }
526
527   TRY_CATCH (except, RETURN_MASK_ALL)
528     {
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));
534
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))
538         has_field = 1;
539       else
540         has_field = 0;
541     }
542   GDB_PY_SET_HANDLE_EXCEPTION (except);
543
544   return has_field;
545 }
546
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.  */
550
551 static int
552 get_field_flag (PyObject *field, const char *flag_name)
553 {
554   int flag_value;
555   PyObject *flag_object = PyObject_GetAttrString (field, flag_name);
556
557   if (flag_object == NULL)
558     return -1;
559
560   flag_value = PyObject_IsTrue (flag_object);
561   Py_DECREF (flag_object);
562
563   return flag_value;
564 }
565
566 /* Return the "type" attribute of a gdb.Field object.
567    Returns NULL on error, with a Python exception set.  */
568
569 static struct type *
570 get_field_type (PyObject *field)
571 {
572   PyObject *ftype_obj = PyObject_GetAttrString (field, "type");
573   struct type *ftype;
574
575   if (ftype_obj == NULL)
576     return NULL;
577   ftype = type_object_to_type (ftype_obj);
578   Py_DECREF (ftype_obj);
579   if (ftype == NULL)
580     PyErr_SetString (PyExc_TypeError,
581                      _("'type' attribute of gdb.Field object is not a "
582                        "gdb.Type object."));
583
584   return ftype;
585 }
586
587 /* Given string name or a gdb.Field object corresponding to an element inside
588    a structure, return its value object.  Returns NULL on error, with a python
589    exception set.  */
590
591 static PyObject *
592 valpy_getitem (PyObject *self, PyObject *key)
593 {
594   value_object *self_value = (value_object *) self;
595   char *field = NULL;
596   struct type *base_class_type = NULL, *field_type = NULL;
597   long bitpos = -1;
598   volatile struct gdb_exception except;
599   PyObject *result = NULL;
600
601   if (gdbpy_is_string (key))
602     {
603       field = python_string_to_host_string (key);
604       if (field == NULL)
605         return NULL;
606     }
607   else if (gdbpy_is_field (key))
608     {
609       int is_base_class, valid_field;
610
611       valid_field = value_has_field (self_value->value, key);
612       if (valid_field < 0)
613         return NULL;
614       else if (valid_field == 0)
615         {
616           PyErr_SetString (PyExc_TypeError,
617                            _("Invalid lookup for a field not contained in "
618                              "the value."));
619
620           return NULL;
621         }
622
623       is_base_class = get_field_flag (key, "is_base_class");
624       if (is_base_class < 0)
625         return NULL;
626       else if (is_base_class > 0)
627         {
628           base_class_type = get_field_type (key);
629           if (base_class_type == NULL)
630             return NULL;
631         }
632       else
633         {
634           PyObject *name_obj = PyObject_GetAttrString (key, "name");
635
636           if (name_obj == NULL)
637             return NULL;
638
639           if (name_obj != Py_None)
640             {
641               field = python_string_to_host_string (name_obj);
642               Py_DECREF (name_obj);
643               if (field == NULL)
644                 return NULL;
645             }
646           else
647             {
648               PyObject *bitpos_obj;
649               int valid;
650
651               Py_DECREF (name_obj);
652
653               if (!PyObject_HasAttrString (key, "bitpos"))
654                 {
655                   PyErr_SetString (PyExc_AttributeError,
656                                    _("gdb.Field object has no name and no "
657                                      "'bitpos' attribute."));
658
659                   return NULL;
660                 }
661               bitpos_obj = PyObject_GetAttrString (key, "bitpos");
662               if (bitpos_obj == NULL)
663                 return NULL;
664               valid = gdb_py_int_as_long (bitpos_obj, &bitpos);
665               Py_DECREF (bitpos_obj);
666               if (!valid)
667                 return NULL;
668
669               field_type = get_field_type (key);
670               if (field_type == NULL)
671                 return NULL;
672             }
673         }
674     }
675
676   TRY_CATCH (except, RETURN_MASK_ALL)
677     {
678       struct value *tmp = self_value->value;
679       struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
680       struct value *res_val = NULL;
681
682       if (field)
683         res_val = value_struct_elt (&tmp, NULL, field, 0, NULL);
684       else if (bitpos >= 0)
685         res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type,
686                                            "struct/class/union");
687       else if (base_class_type != NULL)
688         {
689           struct type *val_type;
690
691           val_type = check_typedef (value_type (tmp));
692           if (TYPE_CODE (val_type) == TYPE_CODE_PTR)
693             res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
694           else if (TYPE_CODE (val_type) == TYPE_CODE_REF)
695             res_val = value_cast (lookup_reference_type (base_class_type), tmp);
696           else
697             res_val = value_cast (base_class_type, tmp);
698         }
699       else
700         {
701           /* Assume we are attempting an array access, and let the
702              value code throw an exception if the index has an invalid
703              type.  */
704           struct value *idx = convert_value_from_python (key);
705
706           if (idx != NULL)
707             {
708               /* Check the value's type is something that can be accessed via
709                  a subscript.  */
710               struct type *type;
711
712               tmp = coerce_ref (tmp);
713               type = check_typedef (value_type (tmp));
714               if (TYPE_CODE (type) != TYPE_CODE_ARRAY
715                   && TYPE_CODE (type) != TYPE_CODE_PTR)
716                   error (_("Cannot subscript requested type."));
717               else
718                 res_val = value_subscript (tmp, value_as_long (idx));
719             }
720         }
721
722       if (res_val)
723         result = value_to_value_object (res_val);
724       do_cleanups (cleanup);
725     }
726
727   xfree (field);
728   GDB_PY_HANDLE_EXCEPTION (except);
729
730   return result;
731 }
732
733 static int
734 valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
735 {
736   PyErr_Format (PyExc_NotImplementedError,
737                 _("Setting of struct elements is not currently supported."));
738   return -1;
739 }
740
741 /* Called by the Python interpreter to perform an inferior function
742    call on the value.  Returns NULL on error, with a python exception set.  */
743 static PyObject *
744 valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
745 {
746   Py_ssize_t args_count;
747   volatile struct gdb_exception except;
748   struct value *function = ((value_object *) self)->value;
749   struct value **vargs = NULL;
750   struct type *ftype = NULL;
751   struct value *mark = value_mark ();
752   PyObject *result = NULL;
753
754   TRY_CATCH (except, RETURN_MASK_ALL)
755     {
756       ftype = check_typedef (value_type (function));
757     }
758   GDB_PY_HANDLE_EXCEPTION (except);
759
760   if (TYPE_CODE (ftype) != TYPE_CODE_FUNC)
761     {
762       PyErr_SetString (PyExc_RuntimeError,
763                        _("Value is not callable (not TYPE_CODE_FUNC)."));
764       return NULL;
765     }
766
767   if (! PyTuple_Check (args))
768     {
769       PyErr_SetString (PyExc_TypeError,
770                        _("Inferior arguments must be provided in a tuple."));
771       return NULL;
772     }
773
774   args_count = PyTuple_Size (args);
775   if (args_count > 0)
776     {
777       int i;
778
779       vargs = alloca (sizeof (struct value *) * args_count);
780       for (i = 0; i < args_count; i++)
781         {
782           PyObject *item = PyTuple_GetItem (args, i);
783
784           if (item == NULL)
785             return NULL;
786
787           vargs[i] = convert_value_from_python (item);
788           if (vargs[i] == NULL)
789             return NULL;
790         }
791     }
792
793   TRY_CATCH (except, RETURN_MASK_ALL)
794     {
795       struct cleanup *cleanup = make_cleanup_value_free_to_mark (mark);
796       struct value *return_value;
797
798       return_value = call_function_by_hand (function, args_count, vargs);
799       result = value_to_value_object (return_value);
800       do_cleanups (cleanup);
801     }
802   GDB_PY_HANDLE_EXCEPTION (except);
803
804   return result;
805 }
806
807 /* Called by the Python interpreter to obtain string representation
808    of the object.  */
809 static PyObject *
810 valpy_str (PyObject *self)
811 {
812   char *s = NULL;
813   PyObject *result;
814   struct value_print_options opts;
815   volatile struct gdb_exception except;
816
817   get_user_print_options (&opts);
818   opts.deref_ref = 0;
819
820   TRY_CATCH (except, RETURN_MASK_ALL)
821     {
822       struct ui_file *stb = mem_fileopen ();
823       struct cleanup *old_chain = make_cleanup_ui_file_delete (stb);
824
825       common_val_print (((value_object *) self)->value, stb, 0,
826                         &opts, python_language);
827       s = ui_file_xstrdup (stb, NULL);
828
829       do_cleanups (old_chain);
830     }
831   GDB_PY_HANDLE_EXCEPTION (except);
832
833   result = PyUnicode_Decode (s, strlen (s), host_charset (), NULL);
834   xfree (s);
835
836   return result;
837 }
838
839 /* Implements gdb.Value.is_optimized_out.  */
840 static PyObject *
841 valpy_get_is_optimized_out (PyObject *self, void *closure)
842 {
843   struct value *value = ((value_object *) self)->value;
844   int opt = 0;
845   volatile struct gdb_exception except;
846
847   TRY_CATCH (except, RETURN_MASK_ALL)
848     {
849       opt = value_optimized_out (value);
850     }
851   GDB_PY_HANDLE_EXCEPTION (except);
852
853   if (opt)
854     Py_RETURN_TRUE;
855
856   Py_RETURN_FALSE;
857 }
858
859 /* Implements gdb.Value.is_lazy.  */
860 static PyObject *
861 valpy_get_is_lazy (PyObject *self, void *closure)
862 {
863   struct value *value = ((value_object *) self)->value;
864   int opt = 0;
865   volatile struct gdb_exception except;
866
867   TRY_CATCH (except, RETURN_MASK_ALL)
868     {
869       opt = value_lazy (value);
870     }
871   GDB_PY_HANDLE_EXCEPTION (except);
872
873   if (opt)
874     Py_RETURN_TRUE;
875
876   Py_RETURN_FALSE;
877 }
878
879 /* Implements gdb.Value.fetch_lazy ().  */
880 static PyObject *
881 valpy_fetch_lazy (PyObject *self, PyObject *args)
882 {
883   struct value *value = ((value_object *) self)->value;
884   volatile struct gdb_exception except;
885
886   TRY_CATCH (except, RETURN_MASK_ALL)
887     {
888       if (value_lazy (value))
889         value_fetch_lazy (value);
890     }
891   GDB_PY_HANDLE_EXCEPTION (except);
892
893   Py_RETURN_NONE;
894 }
895
896 /* Calculate and return the address of the PyObject as the value of
897    the builtin __hash__ call.  */
898 static long
899 valpy_hash (PyObject *self)
900 {
901   return (long) (intptr_t) self;
902 }
903
904 enum valpy_opcode
905 {
906   VALPY_ADD,
907   VALPY_SUB,
908   VALPY_MUL,
909   VALPY_DIV,
910   VALPY_REM,
911   VALPY_POW,
912   VALPY_LSH,
913   VALPY_RSH,
914   VALPY_BITAND,
915   VALPY_BITOR,
916   VALPY_BITXOR
917 };
918
919 /* If TYPE is a reference, return the target; otherwise return TYPE.  */
920 #define STRIP_REFERENCE(TYPE) \
921   ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
922
923 /* Returns a value object which is the result of applying the operation
924    specified by OPCODE to the given arguments.  Returns NULL on error, with
925    a python exception set.  */
926 static PyObject *
927 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
928 {
929   volatile struct gdb_exception except;
930   PyObject *result = NULL;
931
932   TRY_CATCH (except, RETURN_MASK_ALL)
933     {
934       struct value *arg1, *arg2;
935       struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
936       struct value *res_val = NULL;
937       enum exp_opcode op = OP_NULL;
938       int handled = 0;
939
940       /* If the gdb.Value object is the second operand, then it will be passed
941          to us as the OTHER argument, and SELF will be an entirely different
942          kind of object, altogether.  Because of this, we can't assume self is
943          a gdb.Value object and need to convert it from python as well.  */
944       arg1 = convert_value_from_python (self);
945       if (arg1 == NULL)
946         {
947           do_cleanups (cleanup);
948           break;
949         }
950
951       arg2 = convert_value_from_python (other);
952       if (arg2 == NULL)
953         {
954           do_cleanups (cleanup);
955           break;
956         }
957
958       switch (opcode)
959         {
960         case VALPY_ADD:
961           {
962             struct type *ltype = value_type (arg1);
963             struct type *rtype = value_type (arg2);
964
965             CHECK_TYPEDEF (ltype);
966             ltype = STRIP_REFERENCE (ltype);
967             CHECK_TYPEDEF (rtype);
968             rtype = STRIP_REFERENCE (rtype);
969
970             handled = 1;
971             if (TYPE_CODE (ltype) == TYPE_CODE_PTR
972                 && is_integral_type (rtype))
973               res_val = value_ptradd (arg1, value_as_long (arg2));
974             else if (TYPE_CODE (rtype) == TYPE_CODE_PTR
975                      && is_integral_type (ltype))
976               res_val = value_ptradd (arg2, value_as_long (arg1));
977             else
978               {
979                 handled = 0;
980                 op = BINOP_ADD;
981               }
982           }
983           break;
984         case VALPY_SUB:
985           {
986             struct type *ltype = value_type (arg1);
987             struct type *rtype = value_type (arg2);
988
989             CHECK_TYPEDEF (ltype);
990             ltype = STRIP_REFERENCE (ltype);
991             CHECK_TYPEDEF (rtype);
992             rtype = STRIP_REFERENCE (rtype);
993
994             handled = 1;
995             if (TYPE_CODE (ltype) == TYPE_CODE_PTR
996                 && TYPE_CODE (rtype) == TYPE_CODE_PTR)
997               /* A ptrdiff_t for the target would be preferable here.  */
998               res_val = value_from_longest (builtin_type_pyint,
999                                             value_ptrdiff (arg1, arg2));
1000             else if (TYPE_CODE (ltype) == TYPE_CODE_PTR
1001                      && is_integral_type (rtype))
1002               res_val = value_ptradd (arg1, - value_as_long (arg2));
1003             else
1004               {
1005                 handled = 0;
1006                 op = BINOP_SUB;
1007               }
1008           }
1009           break;
1010         case VALPY_MUL:
1011           op = BINOP_MUL;
1012           break;
1013         case VALPY_DIV:
1014           op = BINOP_DIV;
1015           break;
1016         case VALPY_REM:
1017           op = BINOP_REM;
1018           break;
1019         case VALPY_POW:
1020           op = BINOP_EXP;
1021           break;
1022         case VALPY_LSH:
1023           op = BINOP_LSH;
1024           break;
1025         case VALPY_RSH:
1026           op = BINOP_RSH;
1027           break;
1028         case VALPY_BITAND:
1029           op = BINOP_BITWISE_AND;
1030           break;
1031         case VALPY_BITOR:
1032           op = BINOP_BITWISE_IOR;
1033           break;
1034         case VALPY_BITXOR:
1035           op = BINOP_BITWISE_XOR;
1036           break;
1037         }
1038
1039       if (!handled)
1040         {
1041           if (binop_user_defined_p (op, arg1, arg2))
1042             res_val = value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
1043           else
1044             res_val = value_binop (arg1, arg2, op);
1045         }
1046
1047       if (res_val)
1048         result = value_to_value_object (res_val);
1049
1050       do_cleanups (cleanup);
1051     }
1052   GDB_PY_HANDLE_EXCEPTION (except);
1053
1054   return result;
1055 }
1056
1057 static PyObject *
1058 valpy_add (PyObject *self, PyObject *other)
1059 {
1060   return valpy_binop (VALPY_ADD, self, other);
1061 }
1062
1063 static PyObject *
1064 valpy_subtract (PyObject *self, PyObject *other)
1065 {
1066   return valpy_binop (VALPY_SUB, self, other);
1067 }
1068
1069 static PyObject *
1070 valpy_multiply (PyObject *self, PyObject *other)
1071 {
1072   return valpy_binop (VALPY_MUL, self, other);
1073 }
1074
1075 static PyObject *
1076 valpy_divide (PyObject *self, PyObject *other)
1077 {
1078   return valpy_binop (VALPY_DIV, self, other);
1079 }
1080
1081 static PyObject *
1082 valpy_remainder (PyObject *self, PyObject *other)
1083 {
1084   return valpy_binop (VALPY_REM, self, other);
1085 }
1086
1087 static PyObject *
1088 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
1089 {
1090   /* We don't support the ternary form of pow.  I don't know how to express
1091      that, so let's just throw NotImplementedError to at least do something
1092      about it.  */
1093   if (unused != Py_None)
1094     {
1095       PyErr_SetString (PyExc_NotImplementedError,
1096                        "Invalid operation on gdb.Value.");
1097       return NULL;
1098     }
1099
1100   return valpy_binop (VALPY_POW, self, other);
1101 }
1102
1103 static PyObject *
1104 valpy_negative (PyObject *self)
1105 {
1106   volatile struct gdb_exception except;
1107   PyObject *result = NULL;
1108
1109   TRY_CATCH (except, RETURN_MASK_ALL)
1110     {
1111       /* Perhaps overkill, but consistency has some virtue.  */
1112       struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
1113       struct value *val;
1114
1115       val = value_neg (((value_object *) self)->value);
1116       result = value_to_value_object (val);
1117       do_cleanups (cleanup);
1118     }
1119   GDB_PY_HANDLE_EXCEPTION (except);
1120
1121   return result;
1122 }
1123
1124 static PyObject *
1125 valpy_positive (PyObject *self)
1126 {
1127   return value_to_value_object (((value_object *) self)->value);
1128 }
1129
1130 static PyObject *
1131 valpy_absolute (PyObject *self)
1132 {
1133   struct value *value = ((value_object *) self)->value;
1134   volatile struct gdb_exception except;
1135   int isabs = 1;
1136
1137   TRY_CATCH (except, RETURN_MASK_ALL)
1138     {
1139       struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
1140
1141       if (value_less (value, value_zero (value_type (value), not_lval)))
1142         isabs = 0;
1143
1144       do_cleanups (cleanup);
1145     }
1146   GDB_PY_HANDLE_EXCEPTION (except);
1147
1148   if (isabs)
1149     return valpy_positive (self);
1150   else
1151     return valpy_negative (self);
1152 }
1153
1154 /* Implements boolean evaluation of gdb.Value.  */
1155 static int
1156 valpy_nonzero (PyObject *self)
1157 {
1158   volatile struct gdb_exception except;
1159   value_object *self_value = (value_object *) self;
1160   struct type *type;
1161   int nonzero = 0; /* Appease GCC warning.  */
1162
1163   TRY_CATCH (except, RETURN_MASK_ALL)
1164     {
1165       type = check_typedef (value_type (self_value->value));
1166
1167       if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
1168         nonzero = !!value_as_long (self_value->value);
1169       else if (TYPE_CODE (type) == TYPE_CODE_FLT)
1170         nonzero = value_as_double (self_value->value) != 0;
1171       else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1172         nonzero = !decimal_is_zero (value_contents (self_value->value),
1173                                  TYPE_LENGTH (type),
1174                                  gdbarch_byte_order (get_type_arch (type)));
1175       else
1176         /* All other values are True.  */
1177         nonzero = 1;
1178     }
1179   /* This is not documented in the Python documentation, but if this
1180      function fails, return -1 as slot_nb_nonzero does (the default
1181      Python nonzero function).  */
1182   GDB_PY_SET_HANDLE_EXCEPTION (except);
1183
1184   return nonzero;
1185 }
1186
1187 /* Implements ~ for value objects.  */
1188 static PyObject *
1189 valpy_invert (PyObject *self)
1190 {
1191   struct value *val = NULL;
1192   volatile struct gdb_exception except;
1193
1194   TRY_CATCH (except, RETURN_MASK_ALL)
1195     {
1196       val = value_complement (((value_object *) self)->value);
1197     }
1198   GDB_PY_HANDLE_EXCEPTION (except);
1199
1200   return value_to_value_object (val);
1201 }
1202
1203 /* Implements left shift for value objects.  */
1204 static PyObject *
1205 valpy_lsh (PyObject *self, PyObject *other)
1206 {
1207   return valpy_binop (VALPY_LSH, self, other);
1208 }
1209
1210 /* Implements right shift for value objects.  */
1211 static PyObject *
1212 valpy_rsh (PyObject *self, PyObject *other)
1213 {
1214   return valpy_binop (VALPY_RSH, self, other);
1215 }
1216
1217 /* Implements bitwise and for value objects.  */
1218 static PyObject *
1219 valpy_and (PyObject *self, PyObject *other)
1220 {
1221   return valpy_binop (VALPY_BITAND, self, other);
1222 }
1223
1224 /* Implements bitwise or for value objects.  */
1225 static PyObject *
1226 valpy_or (PyObject *self, PyObject *other)
1227 {
1228   return valpy_binop (VALPY_BITOR, self, other);
1229 }
1230
1231 /* Implements bitwise xor for value objects.  */
1232 static PyObject *
1233 valpy_xor (PyObject *self, PyObject *other)
1234 {
1235   return valpy_binop (VALPY_BITXOR, self, other);
1236 }
1237
1238 /* Implements comparison operations for value objects.  Returns NULL on error,
1239    with a python exception set.  */
1240 static PyObject *
1241 valpy_richcompare (PyObject *self, PyObject *other, int op)
1242 {
1243   int result = 0;
1244   volatile struct gdb_exception except;
1245
1246   if (other == Py_None)
1247     /* Comparing with None is special.  From what I can tell, in Python
1248        None is smaller than anything else.  */
1249     switch (op) {
1250       case Py_LT:
1251       case Py_LE:
1252       case Py_EQ:
1253         Py_RETURN_FALSE;
1254       case Py_NE:
1255       case Py_GT:
1256       case Py_GE:
1257         Py_RETURN_TRUE;
1258       default:
1259         /* Can't happen.  */
1260         PyErr_SetString (PyExc_NotImplementedError,
1261                          _("Invalid operation on gdb.Value."));
1262         return NULL;
1263     }
1264
1265   TRY_CATCH (except, RETURN_MASK_ALL)
1266     {
1267       struct value *value_other, *mark = value_mark ();
1268       struct cleanup *cleanup;
1269
1270       value_other = convert_value_from_python (other);
1271       if (value_other == NULL)
1272         {
1273           result = -1;
1274           break;
1275         }
1276
1277       cleanup = make_cleanup_value_free_to_mark (mark);
1278
1279       switch (op) {
1280         case Py_LT:
1281           result = value_less (((value_object *) self)->value, value_other);
1282           break;
1283         case Py_LE:
1284           result = value_less (((value_object *) self)->value, value_other)
1285             || value_equal (((value_object *) self)->value, value_other);
1286           break;
1287         case Py_EQ:
1288           result = value_equal (((value_object *) self)->value, value_other);
1289           break;
1290         case Py_NE:
1291           result = !value_equal (((value_object *) self)->value, value_other);
1292           break;
1293         case Py_GT:
1294           result = value_less (value_other, ((value_object *) self)->value);
1295           break;
1296         case Py_GE:
1297           result = value_less (value_other, ((value_object *) self)->value)
1298             || value_equal (((value_object *) self)->value, value_other);
1299           break;
1300         default:
1301           /* Can't happen.  */
1302           PyErr_SetString (PyExc_NotImplementedError,
1303                            _("Invalid operation on gdb.Value."));
1304           result = -1;
1305           break;
1306       }
1307
1308       do_cleanups (cleanup);
1309     }
1310   GDB_PY_HANDLE_EXCEPTION (except);
1311
1312   /* In this case, the Python exception has already been set.  */
1313   if (result < 0)
1314     return NULL;
1315
1316   if (result == 1)
1317     Py_RETURN_TRUE;
1318
1319   Py_RETURN_FALSE;
1320 }
1321
1322 #ifndef IS_PY3K
1323 /* Implements conversion to int.  */
1324 static PyObject *
1325 valpy_int (PyObject *self)
1326 {
1327   struct value *value = ((value_object *) self)->value;
1328   struct type *type = value_type (value);
1329   LONGEST l = 0;
1330   volatile struct gdb_exception except;
1331
1332   TRY_CATCH (except, RETURN_MASK_ALL)
1333     {
1334       if (!is_integral_type (type))
1335         error (_("Cannot convert value to int."));
1336
1337       l = value_as_long (value);
1338     }
1339   GDB_PY_HANDLE_EXCEPTION (except);
1340
1341   return gdb_py_object_from_longest (l);
1342 }
1343 #endif
1344
1345 /* Implements conversion to long.  */
1346 static PyObject *
1347 valpy_long (PyObject *self)
1348 {
1349   struct value *value = ((value_object *) self)->value;
1350   struct type *type = value_type (value);
1351   LONGEST l = 0;
1352   volatile struct gdb_exception except;
1353
1354   TRY_CATCH (except, RETURN_MASK_ALL)
1355     {
1356       CHECK_TYPEDEF (type);
1357
1358       if (!is_integral_type (type)
1359           && TYPE_CODE (type) != TYPE_CODE_PTR)
1360         error (_("Cannot convert value to long."));
1361
1362       l = value_as_long (value);
1363     }
1364   GDB_PY_HANDLE_EXCEPTION (except);
1365
1366   return gdb_py_long_from_longest (l);
1367 }
1368
1369 /* Implements conversion to float.  */
1370 static PyObject *
1371 valpy_float (PyObject *self)
1372 {
1373   struct value *value = ((value_object *) self)->value;
1374   struct type *type = value_type (value);
1375   double d = 0;
1376   volatile struct gdb_exception except;
1377
1378   TRY_CATCH (except, RETURN_MASK_ALL)
1379     {
1380       CHECK_TYPEDEF (type);
1381
1382       if (TYPE_CODE (type) != TYPE_CODE_FLT)
1383         error (_("Cannot convert value to float."));
1384
1385       d = value_as_double (value);
1386     }
1387   GDB_PY_HANDLE_EXCEPTION (except);
1388
1389   return PyFloat_FromDouble (d);
1390 }
1391
1392 /* Returns an object for a value which is released from the all_values chain,
1393    so its lifetime is not bound to the execution of a command.  */
1394 PyObject *
1395 value_to_value_object (struct value *val)
1396 {
1397   value_object *val_obj;
1398
1399   val_obj = PyObject_New (value_object, &value_object_type);
1400   if (val_obj != NULL)
1401     {
1402       val_obj->value = val;
1403       release_value_or_incref (val);
1404       val_obj->address = NULL;
1405       val_obj->type = NULL;
1406       val_obj->dynamic_type = NULL;
1407       note_value (val_obj);
1408     }
1409
1410   return (PyObject *) val_obj;
1411 }
1412
1413 /* Returns a borrowed reference to the struct value corresponding to
1414    the given value object.  */
1415 struct value *
1416 value_object_to_value (PyObject *self)
1417 {
1418   value_object *real;
1419
1420   if (! PyObject_TypeCheck (self, &value_object_type))
1421     return NULL;
1422   real = (value_object *) self;
1423   return real->value;
1424 }
1425
1426 /* Try to convert a Python value to a gdb value.  If the value cannot
1427    be converted, set a Python exception and return NULL.  Returns a
1428    reference to a new value on the all_values chain.  */
1429
1430 struct value *
1431 convert_value_from_python (PyObject *obj)
1432 {
1433   struct value *value = NULL; /* -Wall */
1434   volatile struct gdb_exception except;
1435   int cmp;
1436
1437   gdb_assert (obj != NULL);
1438
1439   TRY_CATCH (except, RETURN_MASK_ALL)
1440     {
1441       if (PyBool_Check (obj))
1442         {
1443           cmp = PyObject_IsTrue (obj);
1444           if (cmp >= 0)
1445             value = value_from_longest (builtin_type_pybool, cmp);
1446         }
1447       /* Make a long logic check first.  In Python 3.x, internally,
1448          all integers are represented as longs.  In Python 2.x, there
1449          is still a differentiation internally between a PyInt and a
1450          PyLong.  Explicitly do this long check conversion first. In
1451          GDB, for Python 3.x, we #ifdef PyInt = PyLong.  This check has
1452          to be done first to ensure we do not lose information in the
1453          conversion process.  */
1454       else if (PyLong_Check (obj))
1455         {
1456           LONGEST l = PyLong_AsLongLong (obj);
1457
1458           if (PyErr_Occurred ())
1459             {
1460               /* If the error was an overflow, we can try converting to
1461                  ULONGEST instead.  */
1462               if (PyErr_ExceptionMatches (PyExc_OverflowError))
1463                 {
1464                   PyObject *etype, *evalue, *etraceback, *zero;
1465
1466                   PyErr_Fetch (&etype, &evalue, &etraceback);
1467                   zero = PyInt_FromLong (0);
1468
1469                   /* Check whether obj is positive.  */
1470                   if (PyObject_RichCompareBool (obj, zero, Py_GT) > 0)
1471                     {
1472                       ULONGEST ul;
1473
1474                       ul = PyLong_AsUnsignedLongLong (obj);
1475                       if (! PyErr_Occurred ())
1476                         value = value_from_ulongest (builtin_type_upylong, ul);
1477                     }
1478                   else
1479                     /* There's nothing we can do.  */
1480                     PyErr_Restore (etype, evalue, etraceback);
1481
1482                   Py_DECREF (zero);
1483                 }
1484             }
1485           else
1486             value = value_from_longest (builtin_type_pylong, l);
1487         }
1488       else if (PyInt_Check (obj))
1489         {
1490           long l = PyInt_AsLong (obj);
1491
1492           if (! PyErr_Occurred ())
1493             value = value_from_longest (builtin_type_pyint, l);
1494         }
1495       else if (PyFloat_Check (obj))
1496         {
1497           double d = PyFloat_AsDouble (obj);
1498
1499           if (! PyErr_Occurred ())
1500             value = value_from_double (builtin_type_pyfloat, d);
1501         }
1502       else if (gdbpy_is_string (obj))
1503         {
1504           char *s;
1505
1506           s = python_string_to_target_string (obj);
1507           if (s != NULL)
1508             {
1509               struct cleanup *old;
1510
1511               old = make_cleanup (xfree, s);
1512               value = value_cstring (s, strlen (s), builtin_type_pychar);
1513               do_cleanups (old);
1514             }
1515         }
1516       else if (PyObject_TypeCheck (obj, &value_object_type))
1517         value = value_copy (((value_object *) obj)->value);
1518       else if (gdbpy_is_lazy_string (obj))
1519         {
1520           PyObject *result;
1521
1522           result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst,  NULL);
1523           value = value_copy (((value_object *) result)->value);
1524         }
1525       else
1526 #ifdef IS_PY3K
1527         PyErr_Format (PyExc_TypeError,
1528                       _("Could not convert Python object: %S."), obj);
1529 #else
1530         PyErr_Format (PyExc_TypeError,
1531                       _("Could not convert Python object: %s."),
1532                       PyString_AsString (PyObject_Str (obj)));
1533 #endif
1534     }
1535   if (except.reason < 0)
1536     {
1537       PyErr_Format (except.reason == RETURN_QUIT
1538                     ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
1539                     "%s", except.message);
1540       return NULL;
1541     }
1542
1543   return value;
1544 }
1545
1546 /* Returns value object in the ARGth position in GDB's history.  */
1547 PyObject *
1548 gdbpy_history (PyObject *self, PyObject *args)
1549 {
1550   int i;
1551   struct value *res_val = NULL;   /* Initialize to appease gcc warning.  */
1552   volatile struct gdb_exception except;
1553
1554   if (!PyArg_ParseTuple (args, "i", &i))
1555     return NULL;
1556
1557   TRY_CATCH (except, RETURN_MASK_ALL)
1558     {
1559       res_val = access_value_history (i);
1560     }
1561   GDB_PY_HANDLE_EXCEPTION (except);
1562
1563   return value_to_value_object (res_val);
1564 }
1565
1566 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise.  */
1567
1568 int
1569 gdbpy_is_value_object (PyObject *obj)
1570 {
1571   return PyObject_TypeCheck (obj, &value_object_type);
1572 }
1573
1574 int
1575 gdbpy_initialize_values (void)
1576 {
1577   if (PyType_Ready (&value_object_type) < 0)
1578     return -1;
1579
1580   return gdb_pymodule_addobject (gdb_module, "Value",
1581                                  (PyObject *) &value_object_type);
1582 }
1583
1584 \f
1585
1586 static PyGetSetDef value_object_getset[] = {
1587   { "address", valpy_get_address, NULL, "The address of the value.",
1588     NULL },
1589   { "is_optimized_out", valpy_get_is_optimized_out, NULL,
1590     "Boolean telling whether the value is optimized "
1591     "out (i.e., not available).",
1592     NULL },
1593   { "type", valpy_get_type, NULL, "Type of the value.", NULL },
1594   { "dynamic_type", valpy_get_dynamic_type, NULL,
1595     "Dynamic type of the value.", NULL },
1596   { "is_lazy", valpy_get_is_lazy, NULL,
1597     "Boolean telling whether the value is lazy (not fetched yet\n\
1598 from the inferior).  A lazy value is fetched when needed, or when\n\
1599 the \"fetch_lazy()\" method is called.", NULL },
1600   {NULL}  /* Sentinel */
1601 };
1602
1603 static PyMethodDef value_object_methods[] = {
1604   { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
1605   { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
1606     "dynamic_cast (gdb.Type) -> gdb.Value\n\
1607 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
1608   },
1609   { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
1610     "reinterpret_cast (gdb.Type) -> gdb.Value\n\
1611 Cast the value to the supplied type, as if by the C++\n\
1612 reinterpret_cast operator."
1613   },
1614   { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
1615   { "referenced_value", valpy_referenced_value, METH_NOARGS,
1616     "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
1617   { "lazy_string", (PyCFunction) valpy_lazy_string,
1618     METH_VARARGS | METH_KEYWORDS,
1619     "lazy_string ([encoding]  [, length]) -> lazy_string\n\
1620 Return a lazy string representation of the value." },
1621   { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
1622     "string ([encoding] [, errors] [, length]) -> string\n\
1623 Return Unicode string representation of the value." },
1624   { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
1625     "Fetches the value from the inferior, if it was lazy." },
1626   {NULL}  /* Sentinel */
1627 };
1628
1629 static PyNumberMethods value_object_as_number = {
1630   valpy_add,
1631   valpy_subtract,
1632   valpy_multiply,
1633 #ifndef IS_PY3K
1634   valpy_divide,
1635 #endif
1636   valpy_remainder,
1637   NULL,                       /* nb_divmod */
1638   valpy_power,                /* nb_power */
1639   valpy_negative,             /* nb_negative */
1640   valpy_positive,             /* nb_positive */
1641   valpy_absolute,             /* nb_absolute */
1642   valpy_nonzero,              /* nb_nonzero */
1643   valpy_invert,               /* nb_invert */
1644   valpy_lsh,                  /* nb_lshift */
1645   valpy_rsh,                  /* nb_rshift */
1646   valpy_and,                  /* nb_and */
1647   valpy_xor,                  /* nb_xor */
1648   valpy_or,                   /* nb_or */
1649 #ifdef IS_PY3K
1650   valpy_long,                 /* nb_int */
1651   NULL,                       /* reserved */
1652 #else
1653   NULL,                       /* nb_coerce */
1654   valpy_int,                  /* nb_int */
1655   valpy_long,                 /* nb_long */
1656 #endif
1657   valpy_float,                /* nb_float */
1658 #ifndef IS_PY3K
1659   NULL,                       /* nb_oct */
1660   NULL,                       /* nb_hex */
1661 #endif
1662   NULL,                       /* nb_inplace_add */
1663   NULL,                       /* nb_inplace_subtract */
1664   NULL,                       /* nb_inplace_multiply */
1665   NULL,                       /* nb_inplace_remainder */
1666   NULL,                       /* nb_inplace_power */
1667   NULL,                       /* nb_inplace_lshift */
1668   NULL,                       /* nb_inplace_rshift */
1669   NULL,                       /* nb_inplace_and */
1670   NULL,                       /* nb_inplace_xor */
1671   NULL,                       /* nb_inplace_or */
1672   NULL,                       /* nb_floor_divide */
1673   valpy_divide                /* nb_true_divide */
1674 };
1675
1676 static PyMappingMethods value_object_as_mapping = {
1677   valpy_length,
1678   valpy_getitem,
1679   valpy_setitem
1680 };
1681
1682 PyTypeObject value_object_type = {
1683   PyVarObject_HEAD_INIT (NULL, 0)
1684   "gdb.Value",                    /*tp_name*/
1685   sizeof (value_object),          /*tp_basicsize*/
1686   0,                              /*tp_itemsize*/
1687   valpy_dealloc,                  /*tp_dealloc*/
1688   0,                              /*tp_print*/
1689   0,                              /*tp_getattr*/
1690   0,                              /*tp_setattr*/
1691   0,                              /*tp_compare*/
1692   0,                              /*tp_repr*/
1693   &value_object_as_number,        /*tp_as_number*/
1694   0,                              /*tp_as_sequence*/
1695   &value_object_as_mapping,       /*tp_as_mapping*/
1696   valpy_hash,                     /*tp_hash*/
1697   valpy_call,                     /*tp_call*/
1698   valpy_str,                      /*tp_str*/
1699   0,                              /*tp_getattro*/
1700   0,                              /*tp_setattro*/
1701   0,                              /*tp_as_buffer*/
1702   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
1703   | Py_TPFLAGS_BASETYPE,          /*tp_flags*/
1704   "GDB value object",             /* tp_doc */
1705   0,                              /* tp_traverse */
1706   0,                              /* tp_clear */
1707   valpy_richcompare,              /* tp_richcompare */
1708   0,                              /* tp_weaklistoffset */
1709   0,                              /* tp_iter */
1710   0,                              /* tp_iternext */
1711   value_object_methods,           /* tp_methods */
1712   0,                              /* tp_members */
1713   value_object_getset,            /* tp_getset */
1714   0,                              /* tp_base */
1715   0,                              /* tp_dict */
1716   0,                              /* tp_descr_get */
1717   0,                              /* tp_descr_set */
1718   0,                              /* tp_dictoffset */
1719   0,                              /* tp_init */
1720   0,                              /* tp_alloc */
1721   valpy_new                       /* tp_new */
1722 };