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