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