]> Git Repo - binutils.git/blob - gdb/python/py-value.c
b546344da955054f750151ab3e3e364dd1ea9aae
[binutils.git] / gdb / python / py-value.c
1 /* Python interface to values.
2
3    Copyright (C) 2008-2022 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 (type) > 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 (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 (TYPE_TARGET_TYPE (realtype),
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 (TYPE_TARGET_TYPE (realtype),
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 * TYPE_LENGTH (char_type),
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       /* C++ options.  */
644       "deref_refs",             /* No corresponding setting.  */
645       "actual_objects",         /* See set print object on|off.  */
646       "static_members",         /* See set print static-members on|off.  */
647       /* C non-bool options.  */
648       "max_elements",           /* See set print elements N.  */
649       "max_depth",              /* See set print max-depth N.  */
650       "repeat_threshold",       /* See set print repeats.  */
651       "format",                 /* The format passed to the print command.  */
652       NULL
653     };
654
655   /* This function has too many arguments to be useful as positionals, so
656      the user should specify them all as keyword arguments.
657      Python 3.3 and later have a way to specify it (both in C and Python
658      itself), but we could be compiled with older versions, so we just
659      check that the args tuple is empty.  */
660   Py_ssize_t positional_count = PyObject_Length (args);
661   if (positional_count < 0)
662     return NULL;
663   else if (positional_count > 0)
664     {
665       /* This matches the error message that Python 3.3 raises when
666          passing positionals to functions expecting keyword-only
667          arguments.  */
668       PyErr_Format (PyExc_TypeError,
669                     "format_string() takes 0 positional arguments but %zu were given",
670                     positional_count);
671       return NULL;
672     }
673
674   struct value_print_options opts;
675   get_user_print_options (&opts);
676   opts.deref_ref = 0;
677
678   /* We need objects for booleans as the "p" flag for bools is new in
679      Python 3.3.  */
680   PyObject *raw_obj = NULL;
681   PyObject *pretty_arrays_obj = NULL;
682   PyObject *pretty_structs_obj = NULL;
683   PyObject *array_indexes_obj = NULL;
684   PyObject *symbols_obj = NULL;
685   PyObject *unions_obj = NULL;
686   PyObject *address_obj = NULL;
687   PyObject *styling_obj = Py_False;
688   PyObject *deref_refs_obj = NULL;
689   PyObject *actual_objects_obj = NULL;
690   PyObject *static_members_obj = NULL;
691   char *format = NULL;
692   if (!gdb_PyArg_ParseTupleAndKeywords (args,
693                                         kw,
694                                         "|O!O!O!O!O!O!O!O!O!O!O!IIIs",
695                                         keywords,
696                                         &PyBool_Type, &raw_obj,
697                                         &PyBool_Type, &pretty_arrays_obj,
698                                         &PyBool_Type, &pretty_structs_obj,
699                                         &PyBool_Type, &array_indexes_obj,
700                                         &PyBool_Type, &symbols_obj,
701                                         &PyBool_Type, &unions_obj,
702                                         &PyBool_Type, &address_obj,
703                                         &PyBool_Type, &styling_obj,
704                                         &PyBool_Type, &deref_refs_obj,
705                                         &PyBool_Type, &actual_objects_obj,
706                                         &PyBool_Type, &static_members_obj,
707                                         &opts.print_max,
708                                         &opts.max_depth,
709                                         &opts.repeat_count_threshold,
710                                         &format))
711     return NULL;
712
713   /* Set boolean arguments.  */
714   if (!copy_py_bool_obj (&opts.raw, raw_obj))
715     return NULL;
716   if (!copy_py_bool_obj (&opts.prettyformat_arrays, pretty_arrays_obj))
717     return NULL;
718   if (!copy_py_bool_obj (&opts.prettyformat_structs, pretty_structs_obj))
719     return NULL;
720   if (!copy_py_bool_obj (&opts.print_array_indexes, array_indexes_obj))
721     return NULL;
722   if (!copy_py_bool_obj (&opts.symbol_print, symbols_obj))
723     return NULL;
724   if (!copy_py_bool_obj (&opts.unionprint, unions_obj))
725     return NULL;
726   if (!copy_py_bool_obj (&opts.addressprint, address_obj))
727     return NULL;
728   if (!copy_py_bool_obj (&opts.deref_ref, deref_refs_obj))
729     return NULL;
730   if (!copy_py_bool_obj (&opts.objectprint, actual_objects_obj))
731     return NULL;
732   if (!copy_py_bool_obj (&opts.static_field_print, static_members_obj))
733     return NULL;
734
735   /* Numeric arguments for which 0 means unlimited (which we represent as
736      UINT_MAX).  Note that the max-depth numeric argument uses -1 as
737      unlimited, and 0 is a valid choice.  */
738   if (opts.print_max == 0)
739     opts.print_max = UINT_MAX;
740   if (opts.repeat_count_threshold == 0)
741     opts.repeat_count_threshold = UINT_MAX;
742
743   /* Other arguments.  */
744   if (format != NULL)
745     {
746       if (strlen (format) == 1)
747         opts.format = format[0];
748       else
749         {
750           /* Mimic the message on standard Python ones for similar
751              errors.  */
752           PyErr_SetString (PyExc_ValueError,
753                            "a single character is required");
754           return NULL;
755         }
756     }
757
758   string_file stb (PyObject_IsTrue (styling_obj));
759
760   try
761     {
762       common_val_print (((value_object *) self)->value, &stb, 0,
763                         &opts, current_language);
764     }
765   catch (const gdb_exception &except)
766     {
767       GDB_PY_HANDLE_EXCEPTION (except);
768     }
769
770   return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
771 }
772
773 /* A helper function that implements the various cast operators.  */
774
775 static PyObject *
776 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
777 {
778   PyObject *type_obj, *result = NULL;
779   struct type *type;
780
781   if (! PyArg_ParseTuple (args, "O", &type_obj))
782     return NULL;
783
784   type = type_object_to_type (type_obj);
785   if (! type)
786     {
787       PyErr_SetString (PyExc_RuntimeError,
788                        _("Argument must be a type."));
789       return NULL;
790     }
791
792   try
793     {
794       struct value *val = ((value_object *) self)->value;
795       struct value *res_val;
796       scoped_value_mark free_values;
797
798       if (op == UNOP_DYNAMIC_CAST)
799         res_val = value_dynamic_cast (type, val);
800       else if (op == UNOP_REINTERPRET_CAST)
801         res_val = value_reinterpret_cast (type, val);
802       else
803         {
804           gdb_assert (op == UNOP_CAST);
805           res_val = value_cast (type, val);
806         }
807
808       result = value_to_value_object (res_val);
809     }
810   catch (const gdb_exception &except)
811     {
812       GDB_PY_HANDLE_EXCEPTION (except);
813     }
814
815   return result;
816 }
817
818 /* Implementation of the "cast" method.  */
819
820 static PyObject *
821 valpy_cast (PyObject *self, PyObject *args)
822 {
823   return valpy_do_cast (self, args, UNOP_CAST);
824 }
825
826 /* Implementation of the "dynamic_cast" method.  */
827
828 static PyObject *
829 valpy_dynamic_cast (PyObject *self, PyObject *args)
830 {
831   return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
832 }
833
834 /* Implementation of the "reinterpret_cast" method.  */
835
836 static PyObject *
837 valpy_reinterpret_cast (PyObject *self, PyObject *args)
838 {
839   return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
840 }
841
842 static Py_ssize_t
843 valpy_length (PyObject *self)
844 {
845   /* We don't support getting the number of elements in a struct / class.  */
846   PyErr_SetString (PyExc_NotImplementedError,
847                    _("Invalid operation on gdb.Value."));
848   return -1;
849 }
850
851 /* Return 1 if the gdb.Field object FIELD is present in the value V.
852    Returns 0 otherwise.  If any Python error occurs, -1 is returned.  */
853
854 static int
855 value_has_field (struct value *v, PyObject *field)
856 {
857   struct type *parent_type, *val_type;
858   enum type_code type_code;
859   gdbpy_ref<> type_object (PyObject_GetAttrString (field, "parent_type"));
860   int has_field = 0;
861
862   if (type_object == NULL)
863     return -1;
864
865   parent_type = type_object_to_type (type_object.get ());
866   if (parent_type == NULL)
867     {
868       PyErr_SetString (PyExc_TypeError,
869                        _("'parent_type' attribute of gdb.Field object is not a"
870                          "gdb.Type object."));
871       return -1;
872     }
873
874   try
875     {
876       val_type = value_type (v);
877       val_type = check_typedef (val_type);
878       if (val_type->is_pointer_or_reference ())
879         val_type = check_typedef (TYPE_TARGET_TYPE (val_type));
880
881       type_code = val_type->code ();
882       if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION)
883           && types_equal (val_type, parent_type))
884         has_field = 1;
885       else
886         has_field = 0;
887     }
888   catch (const gdb_exception &except)
889     {
890       GDB_PY_SET_HANDLE_EXCEPTION (except);
891     }
892
893   return has_field;
894 }
895
896 /* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
897    Returns 1 if the flag value is true, 0 if it is false, and -1 if
898    a Python error occurs.  */
899
900 static int
901 get_field_flag (PyObject *field, const char *flag_name)
902 {
903   gdbpy_ref<> flag_object (PyObject_GetAttrString (field, flag_name));
904
905   if (flag_object == NULL)
906     return -1;
907
908   return PyObject_IsTrue (flag_object.get ());
909 }
910
911 /* Return the "type" attribute of a gdb.Field object.
912    Returns NULL on error, with a Python exception set.  */
913
914 static struct type *
915 get_field_type (PyObject *field)
916 {
917   gdbpy_ref<> ftype_obj (PyObject_GetAttrString (field, "type"));
918   struct type *ftype;
919
920   if (ftype_obj == NULL)
921     return NULL;
922   ftype = type_object_to_type (ftype_obj.get ());
923   if (ftype == NULL)
924     PyErr_SetString (PyExc_TypeError,
925                      _("'type' attribute of gdb.Field object is not a "
926                        "gdb.Type object."));
927
928   return ftype;
929 }
930
931 /* Given string name or a gdb.Field object corresponding to an element inside
932    a structure, return its value object.  Returns NULL on error, with a python
933    exception set.  */
934
935 static PyObject *
936 valpy_getitem (PyObject *self, PyObject *key)
937 {
938   struct gdb_exception except;
939   value_object *self_value = (value_object *) self;
940   gdb::unique_xmalloc_ptr<char> field;
941   struct type *base_class_type = NULL, *field_type = NULL;
942   long bitpos = -1;
943   PyObject *result = NULL;
944
945   if (gdbpy_is_string (key))
946     {
947       field = python_string_to_host_string (key);
948       if (field == NULL)
949         return NULL;
950     }
951   else if (gdbpy_is_field (key))
952     {
953       int is_base_class, valid_field;
954
955       valid_field = value_has_field (self_value->value, key);
956       if (valid_field < 0)
957         return NULL;
958       else if (valid_field == 0)
959         {
960           PyErr_SetString (PyExc_TypeError,
961                            _("Invalid lookup for a field not contained in "
962                              "the value."));
963
964           return NULL;
965         }
966
967       is_base_class = get_field_flag (key, "is_base_class");
968       if (is_base_class < 0)
969         return NULL;
970       else if (is_base_class > 0)
971         {
972           base_class_type = get_field_type (key);
973           if (base_class_type == NULL)
974             return NULL;
975         }
976       else
977         {
978           gdbpy_ref<> name_obj (PyObject_GetAttrString (key, "name"));
979
980           if (name_obj == NULL)
981             return NULL;
982
983           if (name_obj != Py_None)
984             {
985               field = python_string_to_host_string (name_obj.get ());
986               if (field == NULL)
987                 return NULL;
988             }
989           else
990             {
991               if (!PyObject_HasAttrString (key, "bitpos"))
992                 {
993                   PyErr_SetString (PyExc_AttributeError,
994                                    _("gdb.Field object has no name and no "
995                                      "'bitpos' attribute."));
996
997                   return NULL;
998                 }
999               gdbpy_ref<> bitpos_obj (PyObject_GetAttrString (key, "bitpos"));
1000               if (bitpos_obj == NULL)
1001                 return NULL;
1002               if (!gdb_py_int_as_long (bitpos_obj.get (), &bitpos))
1003                 return NULL;
1004
1005               field_type = get_field_type (key);
1006               if (field_type == NULL)
1007                 return NULL;
1008             }
1009         }
1010     }
1011
1012   try
1013     {
1014       struct value *tmp = self_value->value;
1015       struct value *res_val = NULL;
1016       scoped_value_mark free_values;
1017
1018       if (field)
1019         res_val = value_struct_elt (&tmp, {}, field.get (), NULL,
1020                                     "struct/class/union");
1021       else if (bitpos >= 0)
1022         res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type,
1023                                            "struct/class/union");
1024       else if (base_class_type != NULL)
1025         {
1026           struct type *val_type;
1027
1028           val_type = check_typedef (value_type (tmp));
1029           if (val_type->code () == TYPE_CODE_PTR)
1030             res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
1031           else if (val_type->code () == TYPE_CODE_REF)
1032             res_val = value_cast (lookup_lvalue_reference_type (base_class_type),
1033                                   tmp);
1034           else if (val_type->code () == TYPE_CODE_RVALUE_REF)
1035             res_val = value_cast (lookup_rvalue_reference_type (base_class_type),
1036                                   tmp);
1037           else
1038             res_val = value_cast (base_class_type, tmp);
1039         }
1040       else
1041         {
1042           /* Assume we are attempting an array access, and let the
1043              value code throw an exception if the index has an invalid
1044              type.  */
1045           struct value *idx = convert_value_from_python (key);
1046
1047           if (idx != NULL)
1048             {
1049               /* Check the value's type is something that can be accessed via
1050                  a subscript.  */
1051               struct type *type;
1052
1053               tmp = coerce_ref (tmp);
1054               type = check_typedef (value_type (tmp));
1055               if (type->code () != TYPE_CODE_ARRAY
1056                   && type->code () != TYPE_CODE_PTR)
1057                   error (_("Cannot subscript requested type."));
1058               else
1059                 res_val = value_subscript (tmp, value_as_long (idx));
1060             }
1061         }
1062
1063       if (res_val)
1064         result = value_to_value_object (res_val);
1065     }
1066   catch (gdb_exception &ex)
1067     {
1068       except = std::move (ex);
1069     }
1070
1071   GDB_PY_HANDLE_EXCEPTION (except);
1072
1073   return result;
1074 }
1075
1076 static int
1077 valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
1078 {
1079   PyErr_Format (PyExc_NotImplementedError,
1080                 _("Setting of struct elements is not currently supported."));
1081   return -1;
1082 }
1083
1084 /* Called by the Python interpreter to perform an inferior function
1085    call on the value.  Returns NULL on error, with a python exception set.  */
1086 static PyObject *
1087 valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
1088 {
1089   Py_ssize_t args_count;
1090   struct value *function = ((value_object *) self)->value;
1091   struct value **vargs = NULL;
1092   struct type *ftype = NULL;
1093   PyObject *result = NULL;
1094
1095   try
1096     {
1097       ftype = check_typedef (value_type (function));
1098     }
1099   catch (const gdb_exception &except)
1100     {
1101       GDB_PY_HANDLE_EXCEPTION (except);
1102     }
1103
1104   if (ftype->code () != TYPE_CODE_FUNC)
1105     {
1106       PyErr_SetString (PyExc_RuntimeError,
1107                        _("Value is not callable (not TYPE_CODE_FUNC)."));
1108       return NULL;
1109     }
1110
1111   if (! PyTuple_Check (args))
1112     {
1113       PyErr_SetString (PyExc_TypeError,
1114                        _("Inferior arguments must be provided in a tuple."));
1115       return NULL;
1116     }
1117
1118   args_count = PyTuple_Size (args);
1119   if (args_count > 0)
1120     {
1121       int i;
1122
1123       vargs = XALLOCAVEC (struct value *, args_count);
1124       for (i = 0; i < args_count; i++)
1125         {
1126           PyObject *item = PyTuple_GetItem (args, i);
1127
1128           if (item == NULL)
1129             return NULL;
1130
1131           vargs[i] = convert_value_from_python (item);
1132           if (vargs[i] == NULL)
1133             return NULL;
1134         }
1135     }
1136
1137   try
1138     {
1139       scoped_value_mark free_values;
1140
1141       value *return_value
1142         = call_function_by_hand (function, NULL,
1143                                  gdb::make_array_view (vargs, args_count));
1144       result = value_to_value_object (return_value);
1145     }
1146   catch (const gdb_exception &except)
1147     {
1148       GDB_PY_HANDLE_EXCEPTION (except);
1149     }
1150
1151   return result;
1152 }
1153
1154 /* Called by the Python interpreter to obtain string representation
1155    of the object.  */
1156 static PyObject *
1157 valpy_str (PyObject *self)
1158 {
1159   struct value_print_options opts;
1160
1161   get_user_print_options (&opts);
1162   opts.deref_ref = 0;
1163
1164   string_file stb;
1165
1166   try
1167     {
1168       common_val_print (((value_object *) self)->value, &stb, 0,
1169                         &opts, current_language);
1170     }
1171   catch (const gdb_exception &except)
1172     {
1173       GDB_PY_HANDLE_EXCEPTION (except);
1174     }
1175
1176   return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
1177 }
1178
1179 /* Implements gdb.Value.is_optimized_out.  */
1180 static PyObject *
1181 valpy_get_is_optimized_out (PyObject *self, void *closure)
1182 {
1183   struct value *value = ((value_object *) self)->value;
1184   int opt = 0;
1185
1186   try
1187     {
1188       opt = value_optimized_out (value);
1189     }
1190   catch (const gdb_exception &except)
1191     {
1192       GDB_PY_HANDLE_EXCEPTION (except);
1193     }
1194
1195   if (opt)
1196     Py_RETURN_TRUE;
1197
1198   Py_RETURN_FALSE;
1199 }
1200
1201 /* Implements gdb.Value.is_lazy.  */
1202 static PyObject *
1203 valpy_get_is_lazy (PyObject *self, void *closure)
1204 {
1205   struct value *value = ((value_object *) self)->value;
1206   int opt = 0;
1207
1208   try
1209     {
1210       opt = value_lazy (value);
1211     }
1212   catch (const gdb_exception &except)
1213     {
1214       GDB_PY_HANDLE_EXCEPTION (except);
1215     }
1216
1217   if (opt)
1218     Py_RETURN_TRUE;
1219
1220   Py_RETURN_FALSE;
1221 }
1222
1223 /* Implements gdb.Value.fetch_lazy ().  */
1224 static PyObject *
1225 valpy_fetch_lazy (PyObject *self, PyObject *args)
1226 {
1227   struct value *value = ((value_object *) self)->value;
1228
1229   try
1230     {
1231       if (value_lazy (value))
1232         value_fetch_lazy (value);
1233     }
1234   catch (const gdb_exception &except)
1235     {
1236       GDB_PY_HANDLE_EXCEPTION (except);
1237     }
1238
1239   Py_RETURN_NONE;
1240 }
1241
1242 /* Calculate and return the address of the PyObject as the value of
1243    the builtin __hash__ call.  */
1244 static Py_hash_t
1245 valpy_hash (PyObject *self)
1246 {
1247   return (intptr_t) self;
1248 }
1249
1250 enum valpy_opcode
1251 {
1252   VALPY_ADD,
1253   VALPY_SUB,
1254   VALPY_MUL,
1255   VALPY_DIV,
1256   VALPY_REM,
1257   VALPY_POW,
1258   VALPY_LSH,
1259   VALPY_RSH,
1260   VALPY_BITAND,
1261   VALPY_BITOR,
1262   VALPY_BITXOR
1263 };
1264
1265 /* If TYPE is a reference, return the target; otherwise return TYPE.  */
1266 #define STRIP_REFERENCE(TYPE) \
1267   (TYPE_IS_REFERENCE (TYPE) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
1268
1269 /* Helper for valpy_binop.  Returns a value object which is the result
1270    of applying the operation specified by OPCODE to the given
1271    arguments.  Throws a GDB exception on error.  */
1272
1273 static PyObject *
1274 valpy_binop_throw (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1275 {
1276   PyObject *result = NULL;
1277
1278   struct value *arg1, *arg2;
1279   struct value *res_val = NULL;
1280   enum exp_opcode op = OP_NULL;
1281   int handled = 0;
1282
1283   scoped_value_mark free_values;
1284
1285   /* If the gdb.Value object is the second operand, then it will be
1286      passed to us as the OTHER argument, and SELF will be an entirely
1287      different kind of object, altogether.  Because of this, we can't
1288      assume self is a gdb.Value object and need to convert it from
1289      python as well.  */
1290   arg1 = convert_value_from_python (self);
1291   if (arg1 == NULL)
1292     return NULL;
1293
1294   arg2 = convert_value_from_python (other);
1295   if (arg2 == NULL)
1296     return NULL;
1297
1298   switch (opcode)
1299     {
1300     case VALPY_ADD:
1301       {
1302         struct type *ltype = value_type (arg1);
1303         struct type *rtype = value_type (arg2);
1304
1305         ltype = check_typedef (ltype);
1306         ltype = STRIP_REFERENCE (ltype);
1307         rtype = check_typedef (rtype);
1308         rtype = STRIP_REFERENCE (rtype);
1309
1310         handled = 1;
1311         if (ltype->code () == TYPE_CODE_PTR
1312             && is_integral_type (rtype))
1313           res_val = value_ptradd (arg1, value_as_long (arg2));
1314         else if (rtype->code () == TYPE_CODE_PTR
1315                  && is_integral_type (ltype))
1316           res_val = value_ptradd (arg2, value_as_long (arg1));
1317         else
1318           {
1319             handled = 0;
1320             op = BINOP_ADD;
1321           }
1322       }
1323       break;
1324     case VALPY_SUB:
1325       {
1326         struct type *ltype = value_type (arg1);
1327         struct type *rtype = value_type (arg2);
1328
1329         ltype = check_typedef (ltype);
1330         ltype = STRIP_REFERENCE (ltype);
1331         rtype = check_typedef (rtype);
1332         rtype = STRIP_REFERENCE (rtype);
1333
1334         handled = 1;
1335         if (ltype->code () == TYPE_CODE_PTR
1336             && rtype->code () == TYPE_CODE_PTR)
1337           /* A ptrdiff_t for the target would be preferable here.  */
1338           res_val = value_from_longest (builtin_type_pyint,
1339                                         value_ptrdiff (arg1, arg2));
1340         else if (ltype->code () == TYPE_CODE_PTR
1341                  && is_integral_type (rtype))
1342           res_val = value_ptradd (arg1, - value_as_long (arg2));
1343         else
1344           {
1345             handled = 0;
1346             op = BINOP_SUB;
1347           }
1348       }
1349       break;
1350     case VALPY_MUL:
1351       op = BINOP_MUL;
1352       break;
1353     case VALPY_DIV:
1354       op = BINOP_DIV;
1355       break;
1356     case VALPY_REM:
1357       op = BINOP_REM;
1358       break;
1359     case VALPY_POW:
1360       op = BINOP_EXP;
1361       break;
1362     case VALPY_LSH:
1363       op = BINOP_LSH;
1364       break;
1365     case VALPY_RSH:
1366       op = BINOP_RSH;
1367       break;
1368     case VALPY_BITAND:
1369       op = BINOP_BITWISE_AND;
1370       break;
1371     case VALPY_BITOR:
1372       op = BINOP_BITWISE_IOR;
1373       break;
1374     case VALPY_BITXOR:
1375       op = BINOP_BITWISE_XOR;
1376       break;
1377     }
1378
1379   if (!handled)
1380     {
1381       if (binop_user_defined_p (op, arg1, arg2))
1382         res_val = value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
1383       else
1384         res_val = value_binop (arg1, arg2, op);
1385     }
1386
1387   if (res_val)
1388     result = value_to_value_object (res_val);
1389
1390   return result;
1391 }
1392
1393 /* Returns a value object which is the result of applying the operation
1394    specified by OPCODE to the given arguments.  Returns NULL on error, with
1395    a python exception set.  */
1396 static PyObject *
1397 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1398 {
1399   PyObject *result = NULL;
1400
1401   try
1402     {
1403       result = valpy_binop_throw (opcode, self, other);
1404     }
1405   catch (const gdb_exception &except)
1406     {
1407       GDB_PY_HANDLE_EXCEPTION (except);
1408     }
1409
1410   return result;
1411 }
1412
1413 static PyObject *
1414 valpy_add (PyObject *self, PyObject *other)
1415 {
1416   return valpy_binop (VALPY_ADD, self, other);
1417 }
1418
1419 static PyObject *
1420 valpy_subtract (PyObject *self, PyObject *other)
1421 {
1422   return valpy_binop (VALPY_SUB, self, other);
1423 }
1424
1425 static PyObject *
1426 valpy_multiply (PyObject *self, PyObject *other)
1427 {
1428   return valpy_binop (VALPY_MUL, self, other);
1429 }
1430
1431 static PyObject *
1432 valpy_divide (PyObject *self, PyObject *other)
1433 {
1434   return valpy_binop (VALPY_DIV, self, other);
1435 }
1436
1437 static PyObject *
1438 valpy_remainder (PyObject *self, PyObject *other)
1439 {
1440   return valpy_binop (VALPY_REM, self, other);
1441 }
1442
1443 static PyObject *
1444 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
1445 {
1446   /* We don't support the ternary form of pow.  I don't know how to express
1447      that, so let's just throw NotImplementedError to at least do something
1448      about it.  */
1449   if (unused != Py_None)
1450     {
1451       PyErr_SetString (PyExc_NotImplementedError,
1452                        "Invalid operation on gdb.Value.");
1453       return NULL;
1454     }
1455
1456   return valpy_binop (VALPY_POW, self, other);
1457 }
1458
1459 static PyObject *
1460 valpy_negative (PyObject *self)
1461 {
1462   PyObject *result = NULL;
1463
1464   try
1465     {
1466       /* Perhaps overkill, but consistency has some virtue.  */
1467       scoped_value_mark free_values;
1468       struct value *val;
1469
1470       val = value_neg (((value_object *) self)->value);
1471       result = value_to_value_object (val);
1472     }
1473   catch (const gdb_exception &except)
1474     {
1475       GDB_PY_HANDLE_EXCEPTION (except);
1476     }
1477
1478   return result;
1479 }
1480
1481 static PyObject *
1482 valpy_positive (PyObject *self)
1483 {
1484   return value_to_value_object (((value_object *) self)->value);
1485 }
1486
1487 static PyObject *
1488 valpy_absolute (PyObject *self)
1489 {
1490   struct value *value = ((value_object *) self)->value;
1491   int isabs = 1;
1492
1493   try
1494     {
1495       scoped_value_mark free_values;
1496
1497       if (value_less (value, value_zero (value_type (value), not_lval)))
1498         isabs = 0;
1499     }
1500   catch (const gdb_exception &except)
1501     {
1502       GDB_PY_HANDLE_EXCEPTION (except);
1503     }
1504
1505   if (isabs)
1506     return valpy_positive (self);
1507   else
1508     return valpy_negative (self);
1509 }
1510
1511 /* Implements boolean evaluation of gdb.Value.  */
1512 static int
1513 valpy_nonzero (PyObject *self)
1514 {
1515   struct gdb_exception except;
1516   value_object *self_value = (value_object *) self;
1517   struct type *type;
1518   int nonzero = 0; /* Appease GCC warning.  */
1519
1520   try
1521     {
1522       type = check_typedef (value_type (self_value->value));
1523
1524       if (is_integral_type (type) || type->code () == TYPE_CODE_PTR)
1525         nonzero = !!value_as_long (self_value->value);
1526       else if (is_floating_value (self_value->value))
1527         nonzero = !target_float_is_zero
1528           (value_contents (self_value->value).data (), type);
1529       else
1530         /* All other values are True.  */
1531         nonzero = 1;
1532     }
1533   catch (gdb_exception &ex)
1534     {
1535       except = std::move (ex);
1536     }
1537
1538   /* This is not documented in the Python documentation, but if this
1539      function fails, return -1 as slot_nb_nonzero does (the default
1540      Python nonzero function).  */
1541   GDB_PY_SET_HANDLE_EXCEPTION (except);
1542
1543   return nonzero;
1544 }
1545
1546 /* Implements ~ for value objects.  */
1547 static PyObject *
1548 valpy_invert (PyObject *self)
1549 {
1550   struct value *val = NULL;
1551
1552   try
1553     {
1554       val = value_complement (((value_object *) self)->value);
1555     }
1556   catch (const gdb_exception &except)
1557     {
1558       GDB_PY_HANDLE_EXCEPTION (except);
1559     }
1560
1561   return value_to_value_object (val);
1562 }
1563
1564 /* Implements left shift for value objects.  */
1565 static PyObject *
1566 valpy_lsh (PyObject *self, PyObject *other)
1567 {
1568   return valpy_binop (VALPY_LSH, self, other);
1569 }
1570
1571 /* Implements right shift for value objects.  */
1572 static PyObject *
1573 valpy_rsh (PyObject *self, PyObject *other)
1574 {
1575   return valpy_binop (VALPY_RSH, self, other);
1576 }
1577
1578 /* Implements bitwise and for value objects.  */
1579 static PyObject *
1580 valpy_and (PyObject *self, PyObject *other)
1581 {
1582   return valpy_binop (VALPY_BITAND, self, other);
1583 }
1584
1585 /* Implements bitwise or for value objects.  */
1586 static PyObject *
1587 valpy_or (PyObject *self, PyObject *other)
1588 {
1589   return valpy_binop (VALPY_BITOR, self, other);
1590 }
1591
1592 /* Implements bitwise xor for value objects.  */
1593 static PyObject *
1594 valpy_xor (PyObject *self, PyObject *other)
1595 {
1596   return valpy_binop (VALPY_BITXOR, self, other);
1597 }
1598
1599 /* Helper for valpy_richcompare.  Implements comparison operations for
1600    value objects.  Returns true/false on success.  Returns -1 with a
1601    Python exception set if a Python error is detected.  Throws a GDB
1602    exception on other errors (memory error, etc.).  */
1603
1604 static int
1605 valpy_richcompare_throw (PyObject *self, PyObject *other, int op)
1606 {
1607   int result;
1608   struct value *value_other;
1609   struct value *value_self;
1610
1611   scoped_value_mark free_values;
1612
1613   value_other = convert_value_from_python (other);
1614   if (value_other == NULL)
1615     return -1;
1616
1617   value_self = ((value_object *) self)->value;
1618
1619   switch (op)
1620     {
1621     case Py_LT:
1622       result = value_less (value_self, value_other);
1623       break;
1624     case Py_LE:
1625       result = value_less (value_self, value_other)
1626         || value_equal (value_self, value_other);
1627       break;
1628     case Py_EQ:
1629       result = value_equal (value_self, value_other);
1630       break;
1631     case Py_NE:
1632       result = !value_equal (value_self, value_other);
1633       break;
1634     case Py_GT:
1635       result = value_less (value_other, value_self);
1636       break;
1637     case Py_GE:
1638       result = (value_less (value_other, value_self)
1639                 || value_equal (value_self, value_other));
1640       break;
1641     default:
1642       /* Can't happen.  */
1643       PyErr_SetString (PyExc_NotImplementedError,
1644                        _("Invalid operation on gdb.Value."));
1645       result = -1;
1646       break;
1647     }
1648
1649   return result;
1650 }
1651
1652
1653 /* Implements comparison operations for value objects.  Returns NULL on error,
1654    with a python exception set.  */
1655 static PyObject *
1656 valpy_richcompare (PyObject *self, PyObject *other, int op)
1657 {
1658   int result = 0;
1659
1660   if (other == Py_None)
1661     /* Comparing with None is special.  From what I can tell, in Python
1662        None is smaller than anything else.  */
1663     switch (op) {
1664       case Py_LT:
1665       case Py_LE:
1666       case Py_EQ:
1667         Py_RETURN_FALSE;
1668       case Py_NE:
1669       case Py_GT:
1670       case Py_GE:
1671         Py_RETURN_TRUE;
1672       default:
1673         /* Can't happen.  */
1674         PyErr_SetString (PyExc_NotImplementedError,
1675                          _("Invalid operation on gdb.Value."));
1676         return NULL;
1677     }
1678
1679   try
1680     {
1681       result = valpy_richcompare_throw (self, other, op);
1682     }
1683   catch (const gdb_exception &except)
1684     {
1685       GDB_PY_HANDLE_EXCEPTION (except);
1686     }
1687
1688   /* In this case, the Python exception has already been set.  */
1689   if (result < 0)
1690     return NULL;
1691
1692   if (result == 1)
1693     Py_RETURN_TRUE;
1694
1695   Py_RETURN_FALSE;
1696 }
1697
1698 #ifndef IS_PY3K
1699 /* Implements conversion to int.  */
1700 static PyObject *
1701 valpy_int (PyObject *self)
1702 {
1703   struct value *value = ((value_object *) self)->value;
1704   struct type *type = value_type (value);
1705   LONGEST l = 0;
1706
1707   try
1708     {
1709       if (is_floating_value (value))
1710         {
1711           type = builtin_type_pylong;
1712           value = value_cast (type, value);
1713         }
1714
1715       if (!is_integral_type (type)
1716           && type->code () != TYPE_CODE_PTR)
1717         error (_("Cannot convert value to int."));
1718
1719       l = value_as_long (value);
1720     }
1721   catch (const gdb_exception &except)
1722     {
1723       GDB_PY_HANDLE_EXCEPTION (except);
1724     }
1725
1726   if (type->is_unsigned ())
1727     return gdb_py_object_from_ulongest (l).release ();
1728   else
1729     return gdb_py_object_from_longest (l).release ();
1730 }
1731 #endif
1732
1733 /* Implements conversion to long.  */
1734 static PyObject *
1735 valpy_long (PyObject *self)
1736 {
1737   struct value *value = ((value_object *) self)->value;
1738   struct type *type = value_type (value);
1739   LONGEST l = 0;
1740
1741   try
1742     {
1743       if (is_floating_value (value))
1744         {
1745           type = builtin_type_pylong;
1746           value = value_cast (type, value);
1747         }
1748
1749       type = check_typedef (type);
1750
1751       if (!is_integral_type (type)
1752           && type->code () != TYPE_CODE_PTR)
1753         error (_("Cannot convert value to long."));
1754
1755       l = value_as_long (value);
1756     }
1757   catch (const gdb_exception &except)
1758     {
1759       GDB_PY_HANDLE_EXCEPTION (except);
1760     }
1761
1762   if (type->is_unsigned ())
1763     return gdb_py_object_from_ulongest (l).release ();
1764   else
1765     return gdb_py_object_from_longest (l).release ();
1766 }
1767
1768 /* Implements conversion to float.  */
1769 static PyObject *
1770 valpy_float (PyObject *self)
1771 {
1772   struct value *value = ((value_object *) self)->value;
1773   struct type *type = value_type (value);
1774   double d = 0;
1775
1776   try
1777     {
1778       type = check_typedef (type);
1779
1780       if (type->code () == TYPE_CODE_FLT && is_floating_value (value))
1781         d = target_float_to_host_double (value_contents (value).data (), type);
1782       else if (type->code () == TYPE_CODE_INT)
1783         {
1784           /* Note that valpy_long accepts TYPE_CODE_PTR and some
1785              others here here -- but casting a pointer or bool to a
1786              float seems wrong.  */
1787           d = value_as_long (value);
1788         }
1789       else
1790         error (_("Cannot convert value to float."));
1791     }
1792   catch (const gdb_exception &except)
1793     {
1794       GDB_PY_HANDLE_EXCEPTION (except);
1795     }
1796
1797   return PyFloat_FromDouble (d);
1798 }
1799
1800 /* Returns an object for a value which is released from the all_values chain,
1801    so its lifetime is not bound to the execution of a command.  */
1802 PyObject *
1803 value_to_value_object (struct value *val)
1804 {
1805   value_object *val_obj;
1806
1807   val_obj = PyObject_New (value_object, &value_object_type);
1808   if (val_obj != NULL)
1809     {
1810       val_obj->value = release_value (val).release ();
1811       val_obj->next = nullptr;
1812       val_obj->prev = nullptr;
1813       val_obj->address = NULL;
1814       val_obj->type = NULL;
1815       val_obj->dynamic_type = NULL;
1816       note_value (val_obj);
1817     }
1818
1819   return (PyObject *) val_obj;
1820 }
1821
1822 /* Returns an object for a value, but without releasing it from the
1823    all_values chain.  */
1824 PyObject *
1825 value_to_value_object_no_release (struct value *val)
1826 {
1827   value_object *val_obj;
1828
1829   val_obj = PyObject_New (value_object, &value_object_type);
1830   if (val_obj != NULL)
1831     {
1832       value_incref (val);
1833       val_obj->value = val;
1834       val_obj->next = nullptr;
1835       val_obj->prev = nullptr;
1836       val_obj->address = NULL;
1837       val_obj->type = NULL;
1838       val_obj->dynamic_type = NULL;
1839       note_value (val_obj);
1840     }
1841
1842   return (PyObject *) val_obj;
1843 }
1844
1845 /* Returns a borrowed reference to the struct value corresponding to
1846    the given value object.  */
1847 struct value *
1848 value_object_to_value (PyObject *self)
1849 {
1850   value_object *real;
1851
1852   if (! PyObject_TypeCheck (self, &value_object_type))
1853     return NULL;
1854   real = (value_object *) self;
1855   return real->value;
1856 }
1857
1858 /* Try to convert a Python value to a gdb value.  If the value cannot
1859    be converted, set a Python exception and return NULL.  Returns a
1860    reference to a new value on the all_values chain.  */
1861
1862 struct value *
1863 convert_value_from_python (PyObject *obj)
1864 {
1865   struct value *value = NULL; /* -Wall */
1866   int cmp;
1867
1868   gdb_assert (obj != NULL);
1869
1870   try
1871     {
1872       if (PyBool_Check (obj))
1873         {
1874           cmp = PyObject_IsTrue (obj);
1875           if (cmp >= 0)
1876             value = value_from_longest (builtin_type_pybool, cmp);
1877         }
1878       /* Make a long logic check first.  In Python 3.x, internally,
1879          all integers are represented as longs.  In Python 2.x, there
1880          is still a differentiation internally between a PyInt and a
1881          PyLong.  Explicitly do this long check conversion first. In
1882          GDB, for Python 3.x, we #ifdef PyInt = PyLong.  This check has
1883          to be done first to ensure we do not lose information in the
1884          conversion process.  */
1885       else if (PyLong_Check (obj))
1886         {
1887           LONGEST l = PyLong_AsLongLong (obj);
1888
1889           if (PyErr_Occurred ())
1890             {
1891               /* If the error was an overflow, we can try converting to
1892                  ULONGEST instead.  */
1893               if (PyErr_ExceptionMatches (PyExc_OverflowError))
1894                 {
1895                   gdbpy_err_fetch fetched_error;
1896                   gdbpy_ref<> zero = gdb_py_object_from_longest (0);
1897
1898                   /* Check whether obj is positive.  */
1899                   if (PyObject_RichCompareBool (obj, zero.get (), Py_GT) > 0)
1900                     {
1901                       ULONGEST ul;
1902
1903                       ul = PyLong_AsUnsignedLongLong (obj);
1904                       if (! PyErr_Occurred ())
1905                         value = value_from_ulongest (builtin_type_upylong, ul);
1906                     }
1907                   else
1908                     {
1909                       /* There's nothing we can do.  */
1910                       fetched_error.restore ();
1911                     }
1912                 }
1913             }
1914           else
1915             value = value_from_longest (builtin_type_pylong, l);
1916         }
1917 #if PY_MAJOR_VERSION == 2
1918       else if (PyInt_Check (obj))
1919         {
1920           long l = PyInt_AsLong (obj);
1921
1922           if (! PyErr_Occurred ())
1923             value = value_from_longest (builtin_type_pyint, l);
1924         }
1925 #endif
1926       else if (PyFloat_Check (obj))
1927         {
1928           double d = PyFloat_AsDouble (obj);
1929
1930           if (! PyErr_Occurred ())
1931             value = value_from_host_double (builtin_type_pyfloat, d);
1932         }
1933       else if (gdbpy_is_string (obj))
1934         {
1935           gdb::unique_xmalloc_ptr<char> s
1936             = python_string_to_target_string (obj);
1937           if (s != NULL)
1938             value = value_cstring (s.get (), strlen (s.get ()),
1939                                    builtin_type_pychar);
1940         }
1941       else if (PyObject_TypeCheck (obj, &value_object_type))
1942         value = value_copy (((value_object *) obj)->value);
1943       else if (gdbpy_is_lazy_string (obj))
1944         {
1945           PyObject *result;
1946
1947           result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst,  NULL);
1948           value = value_copy (((value_object *) result)->value);
1949         }
1950       else
1951 #ifdef IS_PY3K
1952         PyErr_Format (PyExc_TypeError,
1953                       _("Could not convert Python object: %S."), obj);
1954 #else
1955         PyErr_Format (PyExc_TypeError,
1956                       _("Could not convert Python object: %s."),
1957                       PyString_AsString (PyObject_Str (obj)));
1958 #endif
1959     }
1960   catch (const gdb_exception &except)
1961     {
1962       gdbpy_convert_exception (except);
1963       return NULL;
1964     }
1965
1966   return value;
1967 }
1968
1969 /* Returns value object in the ARGth position in GDB's history.  */
1970 PyObject *
1971 gdbpy_history (PyObject *self, PyObject *args)
1972 {
1973   int i;
1974   struct value *res_val = NULL;   /* Initialize to appease gcc warning.  */
1975
1976   if (!PyArg_ParseTuple (args, "i", &i))
1977     return NULL;
1978
1979   try
1980     {
1981       res_val = access_value_history (i);
1982     }
1983   catch (const gdb_exception &except)
1984     {
1985       GDB_PY_HANDLE_EXCEPTION (except);
1986     }
1987
1988   return value_to_value_object (res_val);
1989 }
1990
1991 /* Add a gdb.Value into GDB's history, and return (as an integer) the
1992    position of the newly added value.  */
1993 PyObject *
1994 gdbpy_add_history (PyObject *self, PyObject *args)
1995 {
1996   PyObject *value_obj;
1997
1998   if (!PyArg_ParseTuple (args, "O", &value_obj))
1999     return nullptr;
2000
2001   struct value *value = convert_value_from_python (value_obj);
2002   if (value == nullptr)
2003     return nullptr;
2004
2005   try
2006     {
2007       int idx = record_latest_value (value);
2008       return gdb_py_object_from_longest (idx).release ();
2009     }
2010   catch (const gdb_exception &except)
2011     {
2012       GDB_PY_HANDLE_EXCEPTION (except);
2013     }
2014
2015   return nullptr;
2016 }
2017
2018 /* Return an integer, the number of items in GDB's history.  */
2019
2020 PyObject *
2021 gdbpy_history_count (PyObject *self, PyObject *args)
2022 {
2023   return gdb_py_object_from_ulongest (value_history_count ()).release ();
2024 }
2025
2026 /* Return the value of a convenience variable.  */
2027 PyObject *
2028 gdbpy_convenience_variable (PyObject *self, PyObject *args)
2029 {
2030   const char *varname;
2031   struct value *res_val = NULL;
2032
2033   if (!PyArg_ParseTuple (args, "s", &varname))
2034     return NULL;
2035
2036   try
2037     {
2038       struct internalvar *var = lookup_only_internalvar (varname);
2039
2040       if (var != NULL)
2041         {
2042           res_val = value_of_internalvar (gdbpy_enter::get_gdbarch (), var);
2043           if (value_type (res_val)->code () == TYPE_CODE_VOID)
2044             res_val = NULL;
2045         }
2046     }
2047   catch (const gdb_exception &except)
2048     {
2049       GDB_PY_HANDLE_EXCEPTION (except);
2050     }
2051
2052   if (res_val == NULL)
2053     Py_RETURN_NONE;
2054
2055   return value_to_value_object (res_val);
2056 }
2057
2058 /* Set the value of a convenience variable.  */
2059 PyObject *
2060 gdbpy_set_convenience_variable (PyObject *self, PyObject *args)
2061 {
2062   const char *varname;
2063   PyObject *value_obj;
2064   struct value *value = NULL;
2065
2066   if (!PyArg_ParseTuple (args, "sO", &varname, &value_obj))
2067     return NULL;
2068
2069   /* None means to clear the variable.  */
2070   if (value_obj != Py_None)
2071     {
2072       value = convert_value_from_python (value_obj);
2073       if (value == NULL)
2074         return NULL;
2075     }
2076
2077   try
2078     {
2079       if (value == NULL)
2080         {
2081           struct internalvar *var = lookup_only_internalvar (varname);
2082
2083           if (var != NULL)
2084             clear_internalvar (var);
2085         }
2086       else
2087         {
2088           struct internalvar *var = lookup_internalvar (varname);
2089
2090           set_internalvar (var, value);
2091         }
2092     }
2093   catch (const gdb_exception &except)
2094     {
2095       GDB_PY_HANDLE_EXCEPTION (except);
2096     }
2097
2098   Py_RETURN_NONE;
2099 }
2100
2101 /* Returns 1 in OBJ is a gdb.Value object, 0 otherwise.  */
2102
2103 int
2104 gdbpy_is_value_object (PyObject *obj)
2105 {
2106   return PyObject_TypeCheck (obj, &value_object_type);
2107 }
2108
2109 int
2110 gdbpy_initialize_values (void)
2111 {
2112   if (PyType_Ready (&value_object_type) < 0)
2113     return -1;
2114
2115   return gdb_pymodule_addobject (gdb_module, "Value",
2116                                  (PyObject *) &value_object_type);
2117 }
2118
2119 \f
2120
2121 static gdb_PyGetSetDef value_object_getset[] = {
2122   { "address", valpy_get_address, NULL, "The address of the value.",
2123     NULL },
2124   { "is_optimized_out", valpy_get_is_optimized_out, NULL,
2125     "Boolean telling whether the value is optimized "
2126     "out (i.e., not available).",
2127     NULL },
2128   { "type", valpy_get_type, NULL, "Type of the value.", NULL },
2129   { "dynamic_type", valpy_get_dynamic_type, NULL,
2130     "Dynamic type of the value.", NULL },
2131   { "is_lazy", valpy_get_is_lazy, NULL,
2132     "Boolean telling whether the value is lazy (not fetched yet\n\
2133 from the inferior).  A lazy value is fetched when needed, or when\n\
2134 the \"fetch_lazy()\" method is called.", NULL },
2135   {NULL}  /* Sentinel */
2136 };
2137
2138 static PyMethodDef value_object_methods[] = {
2139   { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
2140   { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
2141     "dynamic_cast (gdb.Type) -> gdb.Value\n\
2142 Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
2143   },
2144   { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
2145     "reinterpret_cast (gdb.Type) -> gdb.Value\n\
2146 Cast the value to the supplied type, as if by the C++\n\
2147 reinterpret_cast operator."
2148   },
2149   { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
2150   { "referenced_value", valpy_referenced_value, METH_NOARGS,
2151     "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
2152   { "reference_value", valpy_lvalue_reference_value, METH_NOARGS,
2153     "Return a value of type TYPE_CODE_REF referencing this value." },
2154   { "rvalue_reference_value", valpy_rvalue_reference_value, METH_NOARGS,
2155     "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
2156   { "const_value", valpy_const_value, METH_NOARGS,
2157     "Return a 'const' qualied version of the same value." },
2158   { "lazy_string", (PyCFunction) valpy_lazy_string,
2159     METH_VARARGS | METH_KEYWORDS,
2160     "lazy_string ([encoding]  [, length]) -> lazy_string\n\
2161 Return a lazy string representation of the value." },
2162   { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
2163     "string ([encoding] [, errors] [, length]) -> string\n\
2164 Return Unicode string representation of the value." },
2165   { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
2166     "Fetches the value from the inferior, if it was lazy." },
2167   { "format_string", (PyCFunction) valpy_format_string,
2168     METH_VARARGS | METH_KEYWORDS,
2169     "format_string (...) -> string\n\
2170 Return a string representation of the value using the specified\n\
2171 formatting options" },
2172   {NULL}  /* Sentinel */
2173 };
2174
2175 static PyNumberMethods value_object_as_number = {
2176   valpy_add,
2177   valpy_subtract,
2178   valpy_multiply,
2179 #ifndef IS_PY3K
2180   valpy_divide,
2181 #endif
2182   valpy_remainder,
2183   NULL,                       /* nb_divmod */
2184   valpy_power,                /* nb_power */
2185   valpy_negative,             /* nb_negative */
2186   valpy_positive,             /* nb_positive */
2187   valpy_absolute,             /* nb_absolute */
2188   valpy_nonzero,              /* nb_nonzero */
2189   valpy_invert,               /* nb_invert */
2190   valpy_lsh,                  /* nb_lshift */
2191   valpy_rsh,                  /* nb_rshift */
2192   valpy_and,                  /* nb_and */
2193   valpy_xor,                  /* nb_xor */
2194   valpy_or,                   /* nb_or */
2195 #ifdef IS_PY3K
2196   valpy_long,                 /* nb_int */
2197   NULL,                       /* reserved */
2198 #else
2199   NULL,                       /* nb_coerce */
2200   valpy_int,                  /* nb_int */
2201   valpy_long,                 /* nb_long */
2202 #endif
2203   valpy_float,                /* nb_float */
2204 #ifndef IS_PY3K
2205   NULL,                       /* nb_oct */
2206   NULL,                       /* nb_hex */
2207 #endif
2208   NULL,                       /* nb_inplace_add */
2209   NULL,                       /* nb_inplace_subtract */
2210   NULL,                       /* nb_inplace_multiply */
2211 #ifndef IS_PY3K
2212   NULL,                       /* nb_inplace_divide */
2213 #endif
2214   NULL,                       /* nb_inplace_remainder */
2215   NULL,                       /* nb_inplace_power */
2216   NULL,                       /* nb_inplace_lshift */
2217   NULL,                       /* nb_inplace_rshift */
2218   NULL,                       /* nb_inplace_and */
2219   NULL,                       /* nb_inplace_xor */
2220   NULL,                       /* nb_inplace_or */
2221   NULL,                       /* nb_floor_divide */
2222   valpy_divide,               /* nb_true_divide */
2223   NULL,                       /* nb_inplace_floor_divide */
2224   NULL,                       /* nb_inplace_true_divide */
2225   valpy_long,                 /* nb_index */
2226 };
2227
2228 static PyMappingMethods value_object_as_mapping = {
2229   valpy_length,
2230   valpy_getitem,
2231   valpy_setitem
2232 };
2233
2234 PyTypeObject value_object_type = {
2235   PyVarObject_HEAD_INIT (NULL, 0)
2236   "gdb.Value",                    /*tp_name*/
2237   sizeof (value_object),          /*tp_basicsize*/
2238   0,                              /*tp_itemsize*/
2239   valpy_dealloc,                  /*tp_dealloc*/
2240   0,                              /*tp_print*/
2241   0,                              /*tp_getattr*/
2242   0,                              /*tp_setattr*/
2243   0,                              /*tp_compare*/
2244   0,                              /*tp_repr*/
2245   &value_object_as_number,        /*tp_as_number*/
2246   0,                              /*tp_as_sequence*/
2247   &value_object_as_mapping,       /*tp_as_mapping*/
2248   valpy_hash,                     /*tp_hash*/
2249   valpy_call,                     /*tp_call*/
2250   valpy_str,                      /*tp_str*/
2251   0,                              /*tp_getattro*/
2252   0,                              /*tp_setattro*/
2253   0,                              /*tp_as_buffer*/
2254   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
2255   | Py_TPFLAGS_BASETYPE,          /*tp_flags*/
2256   "GDB value object",             /* tp_doc */
2257   0,                              /* tp_traverse */
2258   0,                              /* tp_clear */
2259   valpy_richcompare,              /* tp_richcompare */
2260   0,                              /* tp_weaklistoffset */
2261   0,                              /* tp_iter */
2262   0,                              /* tp_iternext */
2263   value_object_methods,           /* tp_methods */
2264   0,                              /* tp_members */
2265   value_object_getset,            /* tp_getset */
2266   0,                              /* tp_base */
2267   0,                              /* tp_dict */
2268   0,                              /* tp_descr_get */
2269   0,                              /* tp_descr_set */
2270   0,                              /* tp_dictoffset */
2271   valpy_init,                     /* tp_init */
2272   0,                              /* tp_alloc */
2273   PyType_GenericNew,              /* tp_new */
2274 };
This page took 0.14477 seconds and 2 git commands to generate.