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