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