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