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