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