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