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