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