2013-11-11 Phil Muldoon <pmuldoon@redhat.com>
[deliverable/binutils-gdb.git] / gdb / python / py-value.c
CommitLineData
7843261b
TJB
1/* Python interface to values.
2
28e7fd62 3 Copyright (C) 2008-2013 Free Software Foundation, Inc.
7843261b
TJB
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"
08c637de 21#include "gdb_assert.h"
7843261b
TJB
22#include "charset.h"
23#include "value.h"
24#include "exceptions.h"
25#include "language.h"
26#include "dfp.h"
79a45b7d 27#include "valprint.h"
5374244e 28#include "infcall.h"
f9ffd4bb 29#include "expression.h"
03f17ccf 30#include "cp-abi.h"
49a8461d 31#include "python.h"
7843261b 32
7843261b
TJB
33#ifdef HAVE_PYTHON
34
35#include "python-internal.h"
36
37/* Even though Python scalar types directly map to host types, we use
b021a221 38 target types here to remain consistent with the values system in
7843261b
TJB
39 GDB (which uses target arithmetic). */
40
41/* Python's integer type corresponds to C's long type. */
d452c4bc 42#define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long
7843261b
TJB
43
44/* Python's float type corresponds to C's double type. */
d452c4bc 45#define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
7843261b
TJB
46
47/* Python's long type corresponds to C's long long type. */
d452c4bc 48#define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
7843261b 49
595939de
PM
50/* Python's long type corresponds to C's long long type. Unsigned version. */
51#define builtin_type_upylong builtin_type \
52 (python_gdbarch)->builtin_unsigned_long_long
53
7843261b 54#define builtin_type_pybool \
d452c4bc 55 language_bool_type (python_language, python_gdbarch)
7843261b 56
3b7538c0 57#define builtin_type_pychar \
d452c4bc 58 language_string_char_type (python_language, python_gdbarch)
3b7538c0 59
4e7a5ef5 60typedef struct value_object {
7843261b 61 PyObject_HEAD
4e7a5ef5
TT
62 struct value_object *next;
63 struct value_object *prev;
7843261b 64 struct value *value;
c0c6f777 65 PyObject *address;
2c74e833 66 PyObject *type;
03f17ccf 67 PyObject *dynamic_type;
7843261b
TJB
68} value_object;
69
4e7a5ef5
TT
70/* List of all values which are currently exposed to Python. It is
71 maintained so that when an objfile is discarded, preserve_values
72 can copy the values' types if needed. */
73/* This variable is unnecessarily initialized to NULL in order to
74 work around a linker bug on MacOS. */
75static value_object *values_in_python = NULL;
76
7843261b
TJB
77/* Called by the Python interpreter when deallocating a value object. */
78static void
79valpy_dealloc (PyObject *obj)
80{
81 value_object *self = (value_object *) obj;
82
4e7a5ef5
TT
83 /* Remove SELF from the global list. */
84 if (self->prev)
85 self->prev->next = self->next;
86 else
87 {
88 gdb_assert (values_in_python == self);
89 values_in_python = self->next;
90 }
91 if (self->next)
92 self->next->prev = self->prev;
7843261b 93
77316f4c 94 value_free (self->value);
c0c6f777
TJB
95
96 if (self->address)
97 /* Use braces to appease gcc warning. *sigh* */
98 {
99 Py_DECREF (self->address);
100 }
101
2c74e833
TT
102 if (self->type)
103 {
104 Py_DECREF (self->type);
105 }
106
03f17ccf
TT
107 Py_XDECREF (self->dynamic_type);
108
9a27f2c6 109 Py_TYPE (self)->tp_free (self);
7843261b
TJB
110}
111
4e7a5ef5
TT
112/* Helper to push a Value object on the global list. */
113static void
114note_value (value_object *value_obj)
115{
116 value_obj->next = values_in_python;
117 if (value_obj->next)
118 value_obj->next->prev = value_obj;
119 value_obj->prev = NULL;
120 values_in_python = value_obj;
121}
122
8dc78533
JK
123/* Called when a new gdb.Value object needs to be allocated. Returns NULL on
124 error, with a python exception set. */
7843261b
TJB
125static PyObject *
126valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
127{
128 struct value *value = NULL; /* Initialize to appease gcc warning. */
129 value_object *value_obj;
7843261b
TJB
130
131 if (PyTuple_Size (args) != 1)
132 {
133 PyErr_SetString (PyExc_TypeError, _("Value object creation takes only "
134 "1 argument"));
135 return NULL;
136 }
137
138 value_obj = (value_object *) subtype->tp_alloc (subtype, 1);
139 if (value_obj == NULL)
140 {
141 PyErr_SetString (PyExc_MemoryError, _("Could not allocate memory to "
142 "create Value object."));
143 return NULL;
144 }
145
08c637de
TJB
146 value = convert_value_from_python (PyTuple_GetItem (args, 0));
147 if (value == NULL)
7843261b
TJB
148 {
149 subtype->tp_free (value_obj);
08c637de 150 return NULL;
7843261b
TJB
151 }
152
153 value_obj->value = value;
e848a8a5 154 release_value_or_incref (value);
c0c6f777 155 value_obj->address = NULL;
2c74e833 156 value_obj->type = NULL;
03f17ccf 157 value_obj->dynamic_type = NULL;
4e7a5ef5 158 note_value (value_obj);
7843261b
TJB
159
160 return (PyObject *) value_obj;
161}
162
4e7a5ef5
TT
163/* Iterate over all the Value objects, calling preserve_one_value on
164 each. */
165void
166preserve_python_values (struct objfile *objfile, htab_t copied_types)
167{
168 value_object *iter;
169
170 for (iter = values_in_python; iter; iter = iter->next)
171 preserve_one_value (iter->value, objfile, copied_types);
172}
173
7843261b
TJB
174/* Given a value of a pointer type, apply the C unary * operator to it. */
175static PyObject *
176valpy_dereference (PyObject *self, PyObject *args)
177{
7843261b 178 volatile struct gdb_exception except;
888fe1e1 179 PyObject *result = NULL;
7843261b
TJB
180
181 TRY_CATCH (except, RETURN_MASK_ALL)
182 {
888fe1e1
TT
183 struct value *res_val;
184 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
185
7843261b 186 res_val = value_ind (((value_object *) self)->value);
888fe1e1
TT
187 result = value_to_value_object (res_val);
188 do_cleanups (cleanup);
7843261b
TJB
189 }
190 GDB_PY_HANDLE_EXCEPTION (except);
191
888fe1e1 192 return result;
7843261b
TJB
193}
194
7b282c5a
SCR
195/* Given a value of a pointer type or a reference type, return the value
196 referenced. The difference between this function and valpy_dereference is
197 that the latter applies * unary operator to a value, which need not always
198 result in the value referenced. For example, for a value which is a reference
199 to an 'int' pointer ('int *'), valpy_dereference will result in a value of
200 type 'int' while valpy_referenced_value will result in a value of type
201 'int *'. */
202
203static PyObject *
204valpy_referenced_value (PyObject *self, PyObject *args)
205{
206 volatile struct gdb_exception except;
207 PyObject *result = NULL;
208
209 TRY_CATCH (except, RETURN_MASK_ALL)
210 {
211 struct value *self_val, *res_val;
212 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
213
214 self_val = ((value_object *) self)->value;
215 switch (TYPE_CODE (check_typedef (value_type (self_val))))
216 {
217 case TYPE_CODE_PTR:
218 res_val = value_ind (self_val);
219 break;
220 case TYPE_CODE_REF:
221 res_val = coerce_ref (self_val);
222 break;
223 default:
224 error(_("Trying to get the referenced value from a value which is "
225 "neither a pointer nor a reference."));
226 }
227
228 result = value_to_value_object (res_val);
229 do_cleanups (cleanup);
230 }
231 GDB_PY_HANDLE_EXCEPTION (except);
232
233 return result;
234}
235
08c637de
TJB
236/* Return "&value". */
237static PyObject *
c0c6f777 238valpy_get_address (PyObject *self, void *closure)
08c637de 239{
c0c6f777 240 value_object *val_obj = (value_object *) self;
08c637de
TJB
241 volatile struct gdb_exception except;
242
c0c6f777 243 if (!val_obj->address)
08c637de 244 {
c0c6f777
TJB
245 TRY_CATCH (except, RETURN_MASK_ALL)
246 {
888fe1e1
TT
247 struct value *res_val;
248 struct cleanup *cleanup
249 = make_cleanup_value_free_to_mark (value_mark ());
250
c0c6f777 251 res_val = value_addr (val_obj->value);
888fe1e1
TT
252 val_obj->address = value_to_value_object (res_val);
253 do_cleanups (cleanup);
c0c6f777
TJB
254 }
255 if (except.reason < 0)
256 {
257 val_obj->address = Py_None;
258 Py_INCREF (Py_None);
259 }
08c637de 260 }
08c637de 261
3fcaed38 262 Py_XINCREF (val_obj->address);
c0c6f777
TJB
263
264 return val_obj->address;
08c637de
TJB
265}
266
2c74e833
TT
267/* Return type of the value. */
268static PyObject *
269valpy_get_type (PyObject *self, void *closure)
270{
271 value_object *obj = (value_object *) self;
d59b6f6c 272
2c74e833
TT
273 if (!obj->type)
274 {
275 obj->type = type_to_type_object (value_type (obj->value));
276 if (!obj->type)
03f17ccf 277 return NULL;
2c74e833
TT
278 }
279 Py_INCREF (obj->type);
280 return obj->type;
281}
282
03f17ccf
TT
283/* Return dynamic type of the value. */
284
285static PyObject *
286valpy_get_dynamic_type (PyObject *self, void *closure)
287{
288 value_object *obj = (value_object *) self;
289 volatile struct gdb_exception except;
290 struct type *type = NULL;
291
292 if (obj->dynamic_type != NULL)
293 {
294 Py_INCREF (obj->dynamic_type);
295 return obj->dynamic_type;
296 }
297
298 TRY_CATCH (except, RETURN_MASK_ALL)
299 {
300 struct value *val = obj->value;
888fe1e1 301 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
03f17ccf
TT
302
303 type = value_type (val);
304 CHECK_TYPEDEF (type);
305
306 if (((TYPE_CODE (type) == TYPE_CODE_PTR)
307 || (TYPE_CODE (type) == TYPE_CODE_REF))
308 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
309 {
310 struct value *target;
311 int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
312
313 target = value_ind (val);
314 type = value_rtti_type (target, NULL, NULL, NULL);
315
316 if (type)
317 {
318 if (was_pointer)
319 type = lookup_pointer_type (type);
320 else
321 type = lookup_reference_type (type);
322 }
323 }
324 else if (TYPE_CODE (type) == TYPE_CODE_CLASS)
325 type = value_rtti_type (val, NULL, NULL, NULL);
326 else
327 {
328 /* Re-use object's static type. */
329 type = NULL;
330 }
888fe1e1
TT
331
332 do_cleanups (cleanup);
03f17ccf
TT
333 }
334 GDB_PY_HANDLE_EXCEPTION (except);
335
336 if (type == NULL)
97b77b39 337 obj->dynamic_type = valpy_get_type (self, NULL);
03f17ccf
TT
338 else
339 obj->dynamic_type = type_to_type_object (type);
340
97b77b39 341 Py_XINCREF (obj->dynamic_type);
03f17ccf
TT
342 return obj->dynamic_type;
343}
344
be759fcf
PM
345/* Implementation of gdb.Value.lazy_string ([encoding] [, length]) ->
346 string. Return a PyObject representing a lazy_string_object type.
347 A lazy string is a pointer to a string with an optional encoding and
348 length. If ENCODING is not given, encoding is set to None. If an
349 ENCODING is provided the encoding parameter is set to ENCODING, but
350 the string is not encoded. If LENGTH is provided then the length
351 parameter is set to LENGTH, otherwise length will be set to -1 (first
352 null of appropriate with). */
353static PyObject *
354valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
355{
74aedc46 356 gdb_py_longest length = -1;
be759fcf
PM
357 struct value *value = ((value_object *) self)->value;
358 const char *user_encoding = NULL;
359 static char *keywords[] = { "encoding", "length", NULL };
888fe1e1 360 PyObject *str_obj = NULL;
f287c1f3 361 volatile struct gdb_exception except;
be759fcf 362
74aedc46 363 if (!PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG, keywords,
be759fcf
PM
364 &user_encoding, &length))
365 return NULL;
366
f287c1f3
PM
367 TRY_CATCH (except, RETURN_MASK_ALL)
368 {
888fe1e1
TT
369 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
370
f287c1f3
PM
371 if (TYPE_CODE (value_type (value)) == TYPE_CODE_PTR)
372 value = value_ind (value);
888fe1e1
TT
373
374 str_obj = gdbpy_create_lazy_string_object (value_address (value), length,
375 user_encoding,
376 value_type (value));
377
378 do_cleanups (cleanup);
f287c1f3
PM
379 }
380 GDB_PY_HANDLE_EXCEPTION (except);
be759fcf 381
888fe1e1 382 return str_obj;
be759fcf
PM
383}
384
fbb8f299
PM
385/* Implementation of gdb.Value.string ([encoding] [, errors]
386 [, length]) -> string. Return Unicode string with value contents.
387 If ENCODING is not given, the string is assumed to be encoded in
388 the target's charset. If LENGTH is provided, only fetch string to
389 the length provided. */
390
b6cb8e7d 391static PyObject *
cc924cad 392valpy_string (PyObject *self, PyObject *args, PyObject *kw)
b6cb8e7d 393{
f92adf3c 394 int length = -1;
b6cb8e7d
TJB
395 gdb_byte *buffer;
396 struct value *value = ((value_object *) self)->value;
397 volatile struct gdb_exception except;
398 PyObject *unicode;
399 const char *encoding = NULL;
400 const char *errors = NULL;
401 const char *user_encoding = NULL;
402 const char *la_encoding = NULL;
96c07c5b 403 struct type *char_type;
31158f0e 404 static char *keywords[] = { "encoding", "errors", "length", NULL };
b6cb8e7d 405
fbb8f299
PM
406 if (!PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords,
407 &user_encoding, &errors, &length))
b6cb8e7d
TJB
408 return NULL;
409
410 TRY_CATCH (except, RETURN_MASK_ALL)
411 {
96c07c5b 412 LA_GET_STRING (value, &buffer, &length, &char_type, &la_encoding);
b6cb8e7d
TJB
413 }
414 GDB_PY_HANDLE_EXCEPTION (except);
415
416 encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding;
89f6d837
PA
417 unicode = PyUnicode_Decode ((const char *) buffer,
418 length * TYPE_LENGTH (char_type),
96c07c5b 419 encoding, errors);
b6cb8e7d
TJB
420 xfree (buffer);
421
422 return unicode;
423}
424
f9ffd4bb
TT
425/* A helper function that implements the various cast operators. */
426
2c74e833 427static PyObject *
f9ffd4bb 428valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
2c74e833 429{
888fe1e1 430 PyObject *type_obj, *result = NULL;
2c74e833 431 struct type *type;
2c74e833
TT
432 volatile struct gdb_exception except;
433
434 if (! PyArg_ParseTuple (args, "O", &type_obj))
435 return NULL;
436
437 type = type_object_to_type (type_obj);
438 if (! type)
439 {
044c0f87
PM
440 PyErr_SetString (PyExc_RuntimeError,
441 _("Argument must be a type."));
2c74e833
TT
442 return NULL;
443 }
444
445 TRY_CATCH (except, RETURN_MASK_ALL)
446 {
f9ffd4bb 447 struct value *val = ((value_object *) self)->value;
888fe1e1
TT
448 struct value *res_val;
449 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
f9ffd4bb
TT
450
451 if (op == UNOP_DYNAMIC_CAST)
452 res_val = value_dynamic_cast (type, val);
453 else if (op == UNOP_REINTERPRET_CAST)
454 res_val = value_reinterpret_cast (type, val);
455 else
456 {
457 gdb_assert (op == UNOP_CAST);
458 res_val = value_cast (type, val);
459 }
888fe1e1
TT
460
461 result = value_to_value_object (res_val);
462 do_cleanups (cleanup);
2c74e833
TT
463 }
464 GDB_PY_HANDLE_EXCEPTION (except);
465
888fe1e1 466 return result;
2c74e833
TT
467}
468
f9ffd4bb
TT
469/* Implementation of the "cast" method. */
470
471static PyObject *
472valpy_cast (PyObject *self, PyObject *args)
473{
474 return valpy_do_cast (self, args, UNOP_CAST);
475}
476
477/* Implementation of the "dynamic_cast" method. */
478
479static PyObject *
480valpy_dynamic_cast (PyObject *self, PyObject *args)
481{
482 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
483}
484
485/* Implementation of the "reinterpret_cast" method. */
486
487static PyObject *
488valpy_reinterpret_cast (PyObject *self, PyObject *args)
489{
490 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
491}
492
7843261b
TJB
493static Py_ssize_t
494valpy_length (PyObject *self)
495{
496 /* We don't support getting the number of elements in a struct / class. */
497 PyErr_SetString (PyExc_NotImplementedError,
044c0f87 498 _("Invalid operation on gdb.Value."));
7843261b
TJB
499 return -1;
500}
501
502/* Given string name of an element inside structure, return its value
8dc78533 503 object. Returns NULL on error, with a python exception set. */
7843261b
TJB
504static PyObject *
505valpy_getitem (PyObject *self, PyObject *key)
506{
507 value_object *self_value = (value_object *) self;
08c637de 508 char *field = NULL;
7843261b 509 volatile struct gdb_exception except;
888fe1e1 510 PyObject *result = NULL;
7843261b 511
08c637de
TJB
512 if (gdbpy_is_string (key))
513 {
514 field = python_string_to_host_string (key);
515 if (field == NULL)
516 return NULL;
517 }
7843261b
TJB
518
519 TRY_CATCH (except, RETURN_MASK_ALL)
520 {
3c0ed299 521 struct value *tmp = self_value->value;
888fe1e1
TT
522 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
523 struct value *res_val = NULL;
08c637de
TJB
524
525 if (field)
526 res_val = value_struct_elt (&tmp, NULL, field, 0, NULL);
527 else
528 {
529 /* Assume we are attempting an array access, and let the
530 value code throw an exception if the index has an invalid
531 type. */
532 struct value *idx = convert_value_from_python (key);
d59b6f6c 533
570e2b1a 534 if (idx != NULL)
2e4d963f
PM
535 {
536 /* Check the value's type is something that can be accessed via
537 a subscript. */
538 struct type *type;
d59b6f6c 539
2e4d963f
PM
540 tmp = coerce_ref (tmp);
541 type = check_typedef (value_type (tmp));
542 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
543 && TYPE_CODE (type) != TYPE_CODE_PTR)
e10abd8f 544 error (_("Cannot subscript requested type."));
2e4d963f
PM
545 else
546 res_val = value_subscript (tmp, value_as_long (idx));
547 }
08c637de 548 }
888fe1e1
TT
549
550 if (res_val)
551 result = value_to_value_object (res_val);
552 do_cleanups (cleanup);
7843261b 553 }
570e2b1a 554
06878dd2 555 xfree (field);
7843261b
TJB
556 GDB_PY_HANDLE_EXCEPTION (except);
557
888fe1e1 558 return result;
7843261b
TJB
559}
560
561static int
562valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
563{
564 PyErr_Format (PyExc_NotImplementedError,
565 _("Setting of struct elements is not currently supported."));
566 return -1;
567}
568
5374244e 569/* Called by the Python interpreter to perform an inferior function
8dc78533 570 call on the value. Returns NULL on error, with a python exception set. */
5374244e
PM
571static PyObject *
572valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
573{
5374244e
PM
574 Py_ssize_t args_count;
575 volatile struct gdb_exception except;
576 struct value *function = ((value_object *) self)->value;
577 struct value **vargs = NULL;
749fd4ea 578 struct type *ftype = NULL;
888fe1e1
TT
579 struct value *mark = value_mark ();
580 PyObject *result = NULL;
f287c1f3
PM
581
582 TRY_CATCH (except, RETURN_MASK_ALL)
583 {
584 ftype = check_typedef (value_type (function));
585 }
586 GDB_PY_HANDLE_EXCEPTION (except);
5374244e
PM
587
588 if (TYPE_CODE (ftype) != TYPE_CODE_FUNC)
589 {
590 PyErr_SetString (PyExc_RuntimeError,
591 _("Value is not callable (not TYPE_CODE_FUNC)."));
592 return NULL;
593 }
594
f287c1f3
PM
595 if (! PyTuple_Check (args))
596 {
597 PyErr_SetString (PyExc_TypeError,
598 _("Inferior arguments must be provided in a tuple."));
599 return NULL;
600 }
601
5374244e
PM
602 args_count = PyTuple_Size (args);
603 if (args_count > 0)
604 {
605 int i;
606
607 vargs = alloca (sizeof (struct value *) * args_count);
608 for (i = 0; i < args_count; i++)
609 {
610 PyObject *item = PyTuple_GetItem (args, i);
611
612 if (item == NULL)
613 return NULL;
614
615 vargs[i] = convert_value_from_python (item);
616 if (vargs[i] == NULL)
617 return NULL;
618 }
619 }
620
621 TRY_CATCH (except, RETURN_MASK_ALL)
622 {
888fe1e1
TT
623 struct cleanup *cleanup = make_cleanup_value_free_to_mark (mark);
624 struct value *return_value;
625
5374244e 626 return_value = call_function_by_hand (function, args_count, vargs);
888fe1e1
TT
627 result = value_to_value_object (return_value);
628 do_cleanups (cleanup);
5374244e
PM
629 }
630 GDB_PY_HANDLE_EXCEPTION (except);
631
888fe1e1 632 return result;
5374244e
PM
633}
634
7843261b
TJB
635/* Called by the Python interpreter to obtain string representation
636 of the object. */
637static PyObject *
638valpy_str (PyObject *self)
639{
640 char *s = NULL;
7843261b 641 PyObject *result;
79a45b7d 642 struct value_print_options opts;
7843261b
TJB
643 volatile struct gdb_exception except;
644
79a45b7d
TT
645 get_user_print_options (&opts);
646 opts.deref_ref = 0;
647
7843261b
TJB
648 TRY_CATCH (except, RETURN_MASK_ALL)
649 {
5fe41fbf
TT
650 struct ui_file *stb = mem_fileopen ();
651 struct cleanup *old_chain = make_cleanup_ui_file_delete (stb);
652
79a45b7d 653 common_val_print (((value_object *) self)->value, stb, 0,
d452c4bc 654 &opts, python_language);
759ef836 655 s = ui_file_xstrdup (stb, NULL);
5fe41fbf
TT
656
657 do_cleanups (old_chain);
7843261b
TJB
658 }
659 GDB_PY_HANDLE_EXCEPTION (except);
660
7843261b
TJB
661 result = PyUnicode_Decode (s, strlen (s), host_charset (), NULL);
662 xfree (s);
663
664 return result;
665}
666
def2b000
TJB
667/* Implements gdb.Value.is_optimized_out. */
668static PyObject *
669valpy_get_is_optimized_out (PyObject *self, void *closure)
670{
671 struct value *value = ((value_object *) self)->value;
f287c1f3
PM
672 int opt = 0;
673 volatile struct gdb_exception except;
def2b000 674
f287c1f3
PM
675 TRY_CATCH (except, RETURN_MASK_ALL)
676 {
677 opt = value_optimized_out (value);
678 }
679 GDB_PY_HANDLE_EXCEPTION (except);
680
681 if (opt)
def2b000
TJB
682 Py_RETURN_TRUE;
683
684 Py_RETURN_FALSE;
685}
686
913460fc
PK
687/* Implements gdb.Value.is_lazy. */
688static PyObject *
689valpy_get_is_lazy (PyObject *self, void *closure)
690{
691 struct value *value = ((value_object *) self)->value;
692 int opt = 0;
693 volatile struct gdb_exception except;
694
695 TRY_CATCH (except, RETURN_MASK_ALL)
696 {
697 opt = value_lazy (value);
698 }
699 GDB_PY_HANDLE_EXCEPTION (except);
700
701 if (opt)
702 Py_RETURN_TRUE;
703
704 Py_RETURN_FALSE;
705}
706
707/* Implements gdb.Value.fetch_lazy (). */
708static PyObject *
709valpy_fetch_lazy (PyObject *self, PyObject *args)
710{
711 struct value *value = ((value_object *) self)->value;
712 volatile struct gdb_exception except;
713
714 TRY_CATCH (except, RETURN_MASK_ALL)
715 {
716 if (value_lazy (value))
717 value_fetch_lazy (value);
718 }
719 GDB_PY_HANDLE_EXCEPTION (except);
720
721 Py_RETURN_NONE;
722}
723
88d4aea7
PM
724/* Calculate and return the address of the PyObject as the value of
725 the builtin __hash__ call. */
726static long
727valpy_hash (PyObject *self)
728{
729 return (long) (intptr_t) self;
730}
731
7843261b
TJB
732enum valpy_opcode
733{
734 VALPY_ADD,
735 VALPY_SUB,
736 VALPY_MUL,
737 VALPY_DIV,
738 VALPY_REM,
08c637de
TJB
739 VALPY_POW,
740 VALPY_LSH,
741 VALPY_RSH,
742 VALPY_BITAND,
743 VALPY_BITOR,
744 VALPY_BITXOR
7843261b
TJB
745};
746
747/* If TYPE is a reference, return the target; otherwise return TYPE. */
748#define STRIP_REFERENCE(TYPE) \
749 ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
750
751/* Returns a value object which is the result of applying the operation
8dc78533
JK
752 specified by OPCODE to the given arguments. Returns NULL on error, with
753 a python exception set. */
7843261b
TJB
754static PyObject *
755valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
756{
7843261b 757 volatile struct gdb_exception except;
888fe1e1 758 PyObject *result = NULL;
7843261b
TJB
759
760 TRY_CATCH (except, RETURN_MASK_ALL)
761 {
762 struct value *arg1, *arg2;
888fe1e1 763 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
0f5b7562 764 struct value *res_val = NULL;
7843261b
TJB
765
766 /* If the gdb.Value object is the second operand, then it will be passed
767 to us as the OTHER argument, and SELF will be an entirely different
768 kind of object, altogether. Because of this, we can't assume self is
769 a gdb.Value object and need to convert it from python as well. */
770 arg1 = convert_value_from_python (self);
08c637de 771 if (arg1 == NULL)
edefe1da
TT
772 {
773 do_cleanups (cleanup);
774 break;
775 }
08c637de 776
7843261b 777 arg2 = convert_value_from_python (other);
08c637de 778 if (arg2 == NULL)
edefe1da
TT
779 {
780 do_cleanups (cleanup);
781 break;
782 }
7843261b
TJB
783
784 switch (opcode)
785 {
786 case VALPY_ADD:
787 {
788 struct type *ltype = value_type (arg1);
789 struct type *rtype = value_type (arg2);
790
791 CHECK_TYPEDEF (ltype);
792 ltype = STRIP_REFERENCE (ltype);
793 CHECK_TYPEDEF (rtype);
794 rtype = STRIP_REFERENCE (rtype);
795
2497b498
UW
796 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
797 && is_integral_type (rtype))
798 res_val = value_ptradd (arg1, value_as_long (arg2));
799 else if (TYPE_CODE (rtype) == TYPE_CODE_PTR
800 && is_integral_type (ltype))
801 res_val = value_ptradd (arg2, value_as_long (arg1));
7843261b
TJB
802 else
803 res_val = value_binop (arg1, arg2, BINOP_ADD);
804 }
805 break;
806 case VALPY_SUB:
807 {
808 struct type *ltype = value_type (arg1);
809 struct type *rtype = value_type (arg2);
810
811 CHECK_TYPEDEF (ltype);
812 ltype = STRIP_REFERENCE (ltype);
813 CHECK_TYPEDEF (rtype);
814 rtype = STRIP_REFERENCE (rtype);
815
2497b498
UW
816 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
817 && TYPE_CODE (rtype) == TYPE_CODE_PTR)
818 /* A ptrdiff_t for the target would be preferable here. */
819 res_val = value_from_longest (builtin_type_pyint,
820 value_ptrdiff (arg1, arg2));
821 else if (TYPE_CODE (ltype) == TYPE_CODE_PTR
822 && is_integral_type (rtype))
823 res_val = value_ptradd (arg1, - value_as_long (arg2));
7843261b
TJB
824 else
825 res_val = value_binop (arg1, arg2, BINOP_SUB);
826 }
827 break;
828 case VALPY_MUL:
829 res_val = value_binop (arg1, arg2, BINOP_MUL);
830 break;
831 case VALPY_DIV:
832 res_val = value_binop (arg1, arg2, BINOP_DIV);
833 break;
834 case VALPY_REM:
835 res_val = value_binop (arg1, arg2, BINOP_REM);
836 break;
837 case VALPY_POW:
838 res_val = value_binop (arg1, arg2, BINOP_EXP);
839 break;
08c637de
TJB
840 case VALPY_LSH:
841 res_val = value_binop (arg1, arg2, BINOP_LSH);
842 break;
843 case VALPY_RSH:
844 res_val = value_binop (arg1, arg2, BINOP_RSH);
845 break;
846 case VALPY_BITAND:
847 res_val = value_binop (arg1, arg2, BINOP_BITWISE_AND);
848 break;
849 case VALPY_BITOR:
850 res_val = value_binop (arg1, arg2, BINOP_BITWISE_IOR);
851 break;
852 case VALPY_BITXOR:
853 res_val = value_binop (arg1, arg2, BINOP_BITWISE_XOR);
854 break;
7843261b 855 }
888fe1e1
TT
856
857 if (res_val)
858 result = value_to_value_object (res_val);
859
860 do_cleanups (cleanup);
7843261b
TJB
861 }
862 GDB_PY_HANDLE_EXCEPTION (except);
863
888fe1e1 864 return result;
7843261b
TJB
865}
866
867static PyObject *
868valpy_add (PyObject *self, PyObject *other)
869{
870 return valpy_binop (VALPY_ADD, self, other);
871}
872
873static PyObject *
874valpy_subtract (PyObject *self, PyObject *other)
875{
876 return valpy_binop (VALPY_SUB, self, other);
877}
878
879static PyObject *
880valpy_multiply (PyObject *self, PyObject *other)
881{
882 return valpy_binop (VALPY_MUL, self, other);
883}
884
885static PyObject *
886valpy_divide (PyObject *self, PyObject *other)
887{
888 return valpy_binop (VALPY_DIV, self, other);
889}
890
891static PyObject *
892valpy_remainder (PyObject *self, PyObject *other)
893{
894 return valpy_binop (VALPY_REM, self, other);
895}
896
897static PyObject *
898valpy_power (PyObject *self, PyObject *other, PyObject *unused)
899{
900 /* We don't support the ternary form of pow. I don't know how to express
901 that, so let's just throw NotImplementedError to at least do something
902 about it. */
903 if (unused != Py_None)
904 {
905 PyErr_SetString (PyExc_NotImplementedError,
906 "Invalid operation on gdb.Value.");
907 return NULL;
908 }
909
910 return valpy_binop (VALPY_POW, self, other);
911}
912
913static PyObject *
914valpy_negative (PyObject *self)
915{
7843261b 916 volatile struct gdb_exception except;
888fe1e1 917 PyObject *result = NULL;
7843261b
TJB
918
919 TRY_CATCH (except, RETURN_MASK_ALL)
920 {
888fe1e1
TT
921 /* Perhaps overkill, but consistency has some virtue. */
922 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
923 struct value *val;
924
7843261b 925 val = value_neg (((value_object *) self)->value);
888fe1e1
TT
926 result = value_to_value_object (val);
927 do_cleanups (cleanup);
7843261b
TJB
928 }
929 GDB_PY_HANDLE_EXCEPTION (except);
930
888fe1e1 931 return result;
7843261b
TJB
932}
933
934static PyObject *
935valpy_positive (PyObject *self)
936{
4e7a5ef5 937 return value_to_value_object (((value_object *) self)->value);
7843261b
TJB
938}
939
940static PyObject *
941valpy_absolute (PyObject *self)
942{
22601c15 943 struct value *value = ((value_object *) self)->value;
f287c1f3
PM
944 volatile struct gdb_exception except;
945 int isabs = 1;
d59b6f6c 946
f287c1f3
PM
947 TRY_CATCH (except, RETURN_MASK_ALL)
948 {
888fe1e1
TT
949 struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
950
f287c1f3
PM
951 if (value_less (value, value_zero (value_type (value), not_lval)))
952 isabs = 0;
888fe1e1
TT
953
954 do_cleanups (cleanup);
f287c1f3
PM
955 }
956 GDB_PY_HANDLE_EXCEPTION (except);
957
958 if (isabs)
7843261b 959 return valpy_positive (self);
f287c1f3
PM
960 else
961 return valpy_negative (self);
7843261b
TJB
962}
963
964/* Implements boolean evaluation of gdb.Value. */
965static int
966valpy_nonzero (PyObject *self)
967{
f287c1f3 968 volatile struct gdb_exception except;
7843261b
TJB
969 value_object *self_value = (value_object *) self;
970 struct type *type;
f287c1f3 971 int nonzero = 0; /* Appease GCC warning. */
7843261b 972
f287c1f3
PM
973 TRY_CATCH (except, RETURN_MASK_ALL)
974 {
5d9c5995
PM
975 type = check_typedef (value_type (self_value->value));
976
f287c1f3
PM
977 if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
978 nonzero = !!value_as_long (self_value->value);
979 else if (TYPE_CODE (type) == TYPE_CODE_FLT)
980 nonzero = value_as_double (self_value->value) != 0;
981 else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
982 nonzero = !decimal_is_zero (value_contents (self_value->value),
983 TYPE_LENGTH (type),
984 gdbarch_byte_order (get_type_arch (type)));
985 else
986 /* All other values are True. */
987 nonzero = 1;
988 }
989 /* This is not documented in the Python documentation, but if this
990 function fails, return -1 as slot_nb_nonzero does (the default
991 Python nonzero function). */
992 GDB_PY_SET_HANDLE_EXCEPTION (except);
993
994 return nonzero;
7843261b
TJB
995}
996
08c637de 997/* Implements ~ for value objects. */
7843261b 998static PyObject *
08c637de 999valpy_invert (PyObject *self)
7843261b 1000{
08c637de 1001 struct value *val = NULL;
7843261b
TJB
1002 volatile struct gdb_exception except;
1003
08c637de 1004 TRY_CATCH (except, RETURN_MASK_ALL)
7843261b 1005 {
08c637de
TJB
1006 val = value_complement (((value_object *) self)->value);
1007 }
1008 GDB_PY_HANDLE_EXCEPTION (except);
7843261b 1009
08c637de
TJB
1010 return value_to_value_object (val);
1011}
7843261b 1012
08c637de
TJB
1013/* Implements left shift for value objects. */
1014static PyObject *
1015valpy_lsh (PyObject *self, PyObject *other)
1016{
1017 return valpy_binop (VALPY_LSH, self, other);
1018}
7843261b 1019
08c637de
TJB
1020/* Implements right shift for value objects. */
1021static PyObject *
1022valpy_rsh (PyObject *self, PyObject *other)
1023{
1024 return valpy_binop (VALPY_RSH, self, other);
1025}
7843261b 1026
08c637de
TJB
1027/* Implements bitwise and for value objects. */
1028static PyObject *
1029valpy_and (PyObject *self, PyObject *other)
1030{
1031 return valpy_binop (VALPY_BITAND, self, other);
1032}
7843261b 1033
08c637de
TJB
1034/* Implements bitwise or for value objects. */
1035static PyObject *
1036valpy_or (PyObject *self, PyObject *other)
1037{
1038 return valpy_binop (VALPY_BITOR, self, other);
1039}
1040
1041/* Implements bitwise xor for value objects. */
1042static PyObject *
1043valpy_xor (PyObject *self, PyObject *other)
1044{
1045 return valpy_binop (VALPY_BITXOR, self, other);
1046}
1047
8dc78533
JK
1048/* Implements comparison operations for value objects. Returns NULL on error,
1049 with a python exception set. */
08c637de
TJB
1050static PyObject *
1051valpy_richcompare (PyObject *self, PyObject *other, int op)
1052{
1053 int result = 0;
08c637de
TJB
1054 volatile struct gdb_exception except;
1055
1056 if (other == Py_None)
7843261b
TJB
1057 /* Comparing with None is special. From what I can tell, in Python
1058 None is smaller than anything else. */
1059 switch (op) {
1060 case Py_LT:
1061 case Py_LE:
1062 case Py_EQ:
1063 Py_RETURN_FALSE;
1064 case Py_NE:
1065 case Py_GT:
1066 case Py_GE:
1067 Py_RETURN_TRUE;
1068 default:
1069 /* Can't happen. */
1070 PyErr_SetString (PyExc_NotImplementedError,
044c0f87 1071 _("Invalid operation on gdb.Value."));
7843261b
TJB
1072 return NULL;
1073 }
7843261b
TJB
1074
1075 TRY_CATCH (except, RETURN_MASK_ALL)
1076 {
888fe1e1
TT
1077 struct value *value_other, *mark = value_mark ();
1078 struct cleanup *cleanup;
1079
08c637de
TJB
1080 value_other = convert_value_from_python (other);
1081 if (value_other == NULL)
f02779d8
TT
1082 {
1083 result = -1;
1084 break;
1085 }
08c637de 1086
888fe1e1
TT
1087 cleanup = make_cleanup_value_free_to_mark (mark);
1088
7843261b
TJB
1089 switch (op) {
1090 case Py_LT:
1091 result = value_less (((value_object *) self)->value, value_other);
1092 break;
1093 case Py_LE:
1094 result = value_less (((value_object *) self)->value, value_other)
1095 || value_equal (((value_object *) self)->value, value_other);
1096 break;
1097 case Py_EQ:
1098 result = value_equal (((value_object *) self)->value, value_other);
1099 break;
1100 case Py_NE:
1101 result = !value_equal (((value_object *) self)->value, value_other);
1102 break;
1103 case Py_GT:
1104 result = value_less (value_other, ((value_object *) self)->value);
1105 break;
1106 case Py_GE:
1107 result = value_less (value_other, ((value_object *) self)->value)
1108 || value_equal (((value_object *) self)->value, value_other);
1109 break;
1110 default:
1111 /* Can't happen. */
1112 PyErr_SetString (PyExc_NotImplementedError,
044c0f87 1113 _("Invalid operation on gdb.Value."));
f02779d8
TT
1114 result = -1;
1115 break;
7843261b 1116 }
888fe1e1
TT
1117
1118 do_cleanups (cleanup);
7843261b
TJB
1119 }
1120 GDB_PY_HANDLE_EXCEPTION (except);
1121
f02779d8
TT
1122 /* In this case, the Python exception has already been set. */
1123 if (result < 0)
1124 return NULL;
1125
7843261b
TJB
1126 if (result == 1)
1127 Py_RETURN_TRUE;
1128
1129 Py_RETURN_FALSE;
1130}
1131
08c637de
TJB
1132/* Helper function to determine if a type is "int-like". */
1133static int
1134is_intlike (struct type *type, int ptr_ok)
1135{
08c637de
TJB
1136 return (TYPE_CODE (type) == TYPE_CODE_INT
1137 || TYPE_CODE (type) == TYPE_CODE_ENUM
1138 || TYPE_CODE (type) == TYPE_CODE_BOOL
1139 || TYPE_CODE (type) == TYPE_CODE_CHAR
1140 || (ptr_ok && TYPE_CODE (type) == TYPE_CODE_PTR));
1141}
1142
9a27f2c6 1143#ifndef IS_PY3K
08c637de
TJB
1144/* Implements conversion to int. */
1145static PyObject *
1146valpy_int (PyObject *self)
1147{
1148 struct value *value = ((value_object *) self)->value;
1149 struct type *type = value_type (value);
1150 LONGEST l = 0;
1151 volatile struct gdb_exception except;
1152
08c637de
TJB
1153 TRY_CATCH (except, RETURN_MASK_ALL)
1154 {
f287c1f3
PM
1155 CHECK_TYPEDEF (type);
1156 if (!is_intlike (type, 0))
1157 error (_("Cannot convert value to int."));
1158
08c637de
TJB
1159 l = value_as_long (value);
1160 }
1161 GDB_PY_HANDLE_EXCEPTION (except);
1162
74aedc46 1163 return gdb_py_object_from_longest (l);
08c637de 1164}
9a27f2c6 1165#endif
08c637de
TJB
1166
1167/* Implements conversion to long. */
1168static PyObject *
1169valpy_long (PyObject *self)
1170{
1171 struct value *value = ((value_object *) self)->value;
1172 struct type *type = value_type (value);
1173 LONGEST l = 0;
1174 volatile struct gdb_exception except;
1175
08c637de
TJB
1176 TRY_CATCH (except, RETURN_MASK_ALL)
1177 {
f287c1f3
PM
1178 CHECK_TYPEDEF (type);
1179
1180 if (!is_intlike (type, 1))
1181 error (_("Cannot convert value to long."));
1182
08c637de
TJB
1183 l = value_as_long (value);
1184 }
1185 GDB_PY_HANDLE_EXCEPTION (except);
1186
74aedc46 1187 return gdb_py_long_from_longest (l);
08c637de
TJB
1188}
1189
1190/* Implements conversion to float. */
1191static PyObject *
1192valpy_float (PyObject *self)
1193{
1194 struct value *value = ((value_object *) self)->value;
1195 struct type *type = value_type (value);
1196 double d = 0;
1197 volatile struct gdb_exception except;
1198
08c637de
TJB
1199 TRY_CATCH (except, RETURN_MASK_ALL)
1200 {
f287c1f3
PM
1201 CHECK_TYPEDEF (type);
1202
1203 if (TYPE_CODE (type) != TYPE_CODE_FLT)
1204 error (_("Cannot convert value to float."));
1205
08c637de
TJB
1206 d = value_as_double (value);
1207 }
1208 GDB_PY_HANDLE_EXCEPTION (except);
1209
1210 return PyFloat_FromDouble (d);
1211}
1212
7843261b
TJB
1213/* Returns an object for a value which is released from the all_values chain,
1214 so its lifetime is not bound to the execution of a command. */
1215PyObject *
1216value_to_value_object (struct value *val)
1217{
1218 value_object *val_obj;
1219
1220 val_obj = PyObject_New (value_object, &value_object_type);
1221 if (val_obj != NULL)
1222 {
1223 val_obj->value = val;
e848a8a5 1224 release_value_or_incref (val);
c0c6f777 1225 val_obj->address = NULL;
2c74e833 1226 val_obj->type = NULL;
03f17ccf 1227 val_obj->dynamic_type = NULL;
4e7a5ef5 1228 note_value (val_obj);
7843261b
TJB
1229 }
1230
1231 return (PyObject *) val_obj;
1232}
1233
4e7a5ef5
TT
1234/* Returns a borrowed reference to the struct value corresponding to
1235 the given value object. */
a6bac58e
TT
1236struct value *
1237value_object_to_value (PyObject *self)
1238{
1239 value_object *real;
d59b6f6c 1240
a6bac58e
TT
1241 if (! PyObject_TypeCheck (self, &value_object_type))
1242 return NULL;
1243 real = (value_object *) self;
1244 return real->value;
1245}
1246
7843261b 1247/* Try to convert a Python value to a gdb value. If the value cannot
4e7a5ef5
TT
1248 be converted, set a Python exception and return NULL. Returns a
1249 reference to a new value on the all_values chain. */
7843261b
TJB
1250
1251struct value *
1252convert_value_from_python (PyObject *obj)
1253{
1254 struct value *value = NULL; /* -Wall */
08c637de
TJB
1255 volatile struct gdb_exception except;
1256 int cmp;
7843261b 1257
08c637de 1258 gdb_assert (obj != NULL);
7843261b 1259
08c637de 1260 TRY_CATCH (except, RETURN_MASK_ALL)
7843261b 1261 {
08c637de
TJB
1262 if (PyBool_Check (obj))
1263 {
1264 cmp = PyObject_IsTrue (obj);
1265 if (cmp >= 0)
1266 value = value_from_longest (builtin_type_pybool, cmp);
1267 }
06ab7b19
PM
1268 /* Make a long logic check first. In Python 3.x, internally,
1269 all integers are represented as longs. In Python 2.x, there
1270 is still a differentiation internally between a PyInt and a
1271 PyLong. Explicitly do this long check conversion first. In
1272 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1273 to be done first to ensure we do not lose information in the
1274 conversion process. */
08c637de
TJB
1275 else if (PyLong_Check (obj))
1276 {
1277 LONGEST l = PyLong_AsLongLong (obj);
7843261b 1278
595939de
PM
1279 if (PyErr_Occurred ())
1280 {
1281 /* If the error was an overflow, we can try converting to
1282 ULONGEST instead. */
1283 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1284 {
1285 PyObject *etype, *evalue, *etraceback, *zero;
1286
1287 PyErr_Fetch (&etype, &evalue, &etraceback);
1288 zero = PyInt_FromLong (0);
1289
1290 /* Check whether obj is positive. */
1291 if (PyObject_RichCompareBool (obj, zero, Py_GT) > 0)
1292 {
1293 ULONGEST ul;
1294
1295 ul = PyLong_AsUnsignedLongLong (obj);
1296 if (! PyErr_Occurred ())
1297 value = value_from_ulongest (builtin_type_upylong, ul);
1298 }
1299 else
1300 /* There's nothing we can do. */
1301 PyErr_Restore (etype, evalue, etraceback);
1302
1303 Py_DECREF (zero);
1304 }
1305 }
1306 else
08c637de
TJB
1307 value = value_from_longest (builtin_type_pylong, l);
1308 }
06ab7b19
PM
1309 else if (PyInt_Check (obj))
1310 {
1311 long l = PyInt_AsLong (obj);
1312
1313 if (! PyErr_Occurred ())
1314 value = value_from_longest (builtin_type_pyint, l);
1315 }
08c637de
TJB
1316 else if (PyFloat_Check (obj))
1317 {
1318 double d = PyFloat_AsDouble (obj);
7843261b 1319
08c637de
TJB
1320 if (! PyErr_Occurred ())
1321 value = value_from_double (builtin_type_pyfloat, d);
1322 }
1323 else if (gdbpy_is_string (obj))
1324 {
1325 char *s;
1326
1327 s = python_string_to_target_string (obj);
1328 if (s != NULL)
1329 {
9bc3523d
TT
1330 struct cleanup *old;
1331
08c637de 1332 old = make_cleanup (xfree, s);
3b7538c0 1333 value = value_cstring (s, strlen (s), builtin_type_pychar);
08c637de
TJB
1334 do_cleanups (old);
1335 }
1336 }
1337 else if (PyObject_TypeCheck (obj, &value_object_type))
cc924cad 1338 value = value_copy (((value_object *) obj)->value);
be759fcf
PM
1339 else if (gdbpy_is_lazy_string (obj))
1340 {
1341 PyObject *result;
d59b6f6c 1342
fb6a3ed3 1343 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
be759fcf
PM
1344 value = value_copy (((value_object *) result)->value);
1345 }
08c637de 1346 else
9a27f2c6
PK
1347#ifdef IS_PY3K
1348 PyErr_Format (PyExc_TypeError,
1349 _("Could not convert Python object: %S."), obj);
1350#else
9a2b4c1b
MS
1351 PyErr_Format (PyExc_TypeError,
1352 _("Could not convert Python object: %s."),
08c637de 1353 PyString_AsString (PyObject_Str (obj)));
9a27f2c6 1354#endif
08c637de
TJB
1355 }
1356 if (except.reason < 0)
1357 {
1358 PyErr_Format (except.reason == RETURN_QUIT
1359 ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
1360 "%s", except.message);
1361 return NULL;
1362 }
7843261b
TJB
1363
1364 return value;
1365}
1366
1367/* Returns value object in the ARGth position in GDB's history. */
1368PyObject *
08c637de 1369gdbpy_history (PyObject *self, PyObject *args)
7843261b
TJB
1370{
1371 int i;
1372 struct value *res_val = NULL; /* Initialize to appease gcc warning. */
1373 volatile struct gdb_exception except;
1374
1375 if (!PyArg_ParseTuple (args, "i", &i))
1376 return NULL;
1377
1378 TRY_CATCH (except, RETURN_MASK_ALL)
1379 {
1380 res_val = access_value_history (i);
1381 }
1382 GDB_PY_HANDLE_EXCEPTION (except);
1383
1384 return value_to_value_object (res_val);
1385}
1386
595939de
PM
1387/* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
1388
1389int
1390gdbpy_is_value_object (PyObject *obj)
1391{
1392 return PyObject_TypeCheck (obj, &value_object_type);
1393}
1394
999633ed 1395int
7843261b
TJB
1396gdbpy_initialize_values (void)
1397{
7843261b 1398 if (PyType_Ready (&value_object_type) < 0)
999633ed 1399 return -1;
7843261b 1400
aa36459a
TT
1401 return gdb_pymodule_addobject (gdb_module, "Value",
1402 (PyObject *) &value_object_type);
7843261b
TJB
1403}
1404
2c74e833
TT
1405\f
1406
def2b000 1407static PyGetSetDef value_object_getset[] = {
c0c6f777
TJB
1408 { "address", valpy_get_address, NULL, "The address of the value.",
1409 NULL },
def2b000 1410 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
9a2b4c1b
MS
1411 "Boolean telling whether the value is optimized "
1412 "out (i.e., not available).",
def2b000 1413 NULL },
2c74e833 1414 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
03f17ccf
TT
1415 { "dynamic_type", valpy_get_dynamic_type, NULL,
1416 "Dynamic type of the value.", NULL },
913460fc
PK
1417 { "is_lazy", valpy_get_is_lazy, NULL,
1418 "Boolean telling whether the value is lazy (not fetched yet\n\
1419from the inferior). A lazy value is fetched when needed, or when\n\
1420the \"fetch_lazy()\" method is called.", NULL },
def2b000
TJB
1421 {NULL} /* Sentinel */
1422};
1423
f9176c46 1424static PyMethodDef value_object_methods[] = {
2c74e833 1425 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
f9ffd4bb
TT
1426 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
1427 "dynamic_cast (gdb.Type) -> gdb.Value\n\
1428Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
1429 },
1430 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
1431 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
1432Cast the value to the supplied type, as if by the C++\n\
1433reinterpret_cast operator."
1434 },
f9176c46 1435 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
7b282c5a
SCR
1436 { "referenced_value", valpy_referenced_value, METH_NOARGS,
1437 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
9a2b4c1b
MS
1438 { "lazy_string", (PyCFunction) valpy_lazy_string,
1439 METH_VARARGS | METH_KEYWORDS,
be759fcf
PM
1440 "lazy_string ([encoding] [, length]) -> lazy_string\n\
1441Return a lazy string representation of the value." },
cc924cad 1442 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
fbb8f299 1443 "string ([encoding] [, errors] [, length]) -> string\n\
cc924cad 1444Return Unicode string representation of the value." },
913460fc
PK
1445 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
1446 "Fetches the value from the inferior, if it was lazy." },
f9176c46
PA
1447 {NULL} /* Sentinel */
1448};
1449
1450static PyNumberMethods value_object_as_number = {
1451 valpy_add,
1452 valpy_subtract,
1453 valpy_multiply,
9a27f2c6 1454#ifndef IS_PY3K
f9176c46 1455 valpy_divide,
9a27f2c6 1456#endif
f9176c46
PA
1457 valpy_remainder,
1458 NULL, /* nb_divmod */
1459 valpy_power, /* nb_power */
1460 valpy_negative, /* nb_negative */
1461 valpy_positive, /* nb_positive */
1462 valpy_absolute, /* nb_absolute */
08c637de
TJB
1463 valpy_nonzero, /* nb_nonzero */
1464 valpy_invert, /* nb_invert */
1465 valpy_lsh, /* nb_lshift */
1466 valpy_rsh, /* nb_rshift */
1467 valpy_and, /* nb_and */
1468 valpy_xor, /* nb_xor */
1469 valpy_or, /* nb_or */
9a27f2c6
PK
1470#ifdef IS_PY3K
1471 valpy_long, /* nb_int */
1472 NULL, /* reserved */
1473#else
08c637de
TJB
1474 NULL, /* nb_coerce */
1475 valpy_int, /* nb_int */
1476 valpy_long, /* nb_long */
9a27f2c6 1477#endif
08c637de 1478 valpy_float, /* nb_float */
9a27f2c6 1479#ifndef IS_PY3K
08c637de 1480 NULL, /* nb_oct */
9a27f2c6
PK
1481 NULL, /* nb_hex */
1482#endif
1483 NULL, /* nb_inplace_add */
1484 NULL, /* nb_inplace_subtract */
1485 NULL, /* nb_inplace_multiply */
1486 NULL, /* nb_inplace_remainder */
1487 NULL, /* nb_inplace_power */
1488 NULL, /* nb_inplace_lshift */
1489 NULL, /* nb_inplace_rshift */
1490 NULL, /* nb_inplace_and */
1491 NULL, /* nb_inplace_xor */
1492 NULL, /* nb_inplace_or */
1493 NULL, /* nb_floor_divide */
1494 valpy_divide /* nb_true_divide */
f9176c46
PA
1495};
1496
1497static PyMappingMethods value_object_as_mapping = {
1498 valpy_length,
1499 valpy_getitem,
1500 valpy_setitem
1501};
1502
1503PyTypeObject value_object_type = {
9a27f2c6 1504 PyVarObject_HEAD_INIT (NULL, 0)
f9176c46
PA
1505 "gdb.Value", /*tp_name*/
1506 sizeof (value_object), /*tp_basicsize*/
1507 0, /*tp_itemsize*/
1508 valpy_dealloc, /*tp_dealloc*/
1509 0, /*tp_print*/
1510 0, /*tp_getattr*/
1511 0, /*tp_setattr*/
1512 0, /*tp_compare*/
1513 0, /*tp_repr*/
1514 &value_object_as_number, /*tp_as_number*/
1515 0, /*tp_as_sequence*/
1516 &value_object_as_mapping, /*tp_as_mapping*/
88d4aea7 1517 valpy_hash, /*tp_hash*/
5374244e 1518 valpy_call, /*tp_call*/
f9176c46
PA
1519 valpy_str, /*tp_str*/
1520 0, /*tp_getattro*/
1521 0, /*tp_setattro*/
1522 0, /*tp_as_buffer*/
9a2b4c1b
MS
1523 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
1524 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
f9176c46
PA
1525 "GDB value object", /* tp_doc */
1526 0, /* tp_traverse */
1527 0, /* tp_clear */
1528 valpy_richcompare, /* tp_richcompare */
1529 0, /* tp_weaklistoffset */
1530 0, /* tp_iter */
1531 0, /* tp_iternext */
08c637de
TJB
1532 value_object_methods, /* tp_methods */
1533 0, /* tp_members */
def2b000 1534 value_object_getset, /* tp_getset */
08c637de
TJB
1535 0, /* tp_base */
1536 0, /* tp_dict */
1537 0, /* tp_descr_get */
1538 0, /* tp_descr_set */
1539 0, /* tp_dictoffset */
1540 0, /* tp_init */
1541 0, /* tp_alloc */
1542 valpy_new /* tp_new */
f9176c46
PA
1543};
1544
4e7a5ef5
TT
1545#else
1546
1547void
1548preserve_python_values (struct objfile *objfile, htab_t copied_types)
1549{
1550 /* Nothing. */
1551}
1552
7843261b 1553#endif /* HAVE_PYTHON */
This page took 0.573971 seconds and 4 git commands to generate.