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