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