Change boolean options to bool instead of int
[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
491144b5 583/* Given a Python object, copy its truth value to a C bool (the value
52093e1b
MB
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
491144b5 591copy_py_bool_obj (bool *dest, PyObject *src_obj)
52093e1b
MB
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. */
2e62ab40 626 "max_depth", /* See set print max-depth N. */
52093e1b
MB
627 "repeat_threshold", /* See set print repeats. */
628 "format", /* The format passed to the print command. */
629 NULL
630 };
631
632 /* This function has too many arguments to be useful as positionals, so
633 the user should specify them all as keyword arguments.
634 Python 3.3 and later have a way to specify it (both in C and Python
635 itself), but we could be compiled with older versions, so we just
636 check that the args tuple is empty. */
637 Py_ssize_t positional_count = PyObject_Length (args);
638 if (positional_count < 0)
639 return NULL;
640 else if (positional_count > 0)
641 {
642 /* This matches the error message that Python 3.3 raises when
643 passing positionals to functions expecting keyword-only
644 arguments. */
645 PyErr_Format (PyExc_TypeError,
646 "format_string() takes 0 positional arguments but %zu were given",
647 positional_count);
648 return NULL;
649 }
650
651 struct value_print_options opts;
652 get_user_print_options (&opts);
653 opts.deref_ref = 0;
654
655 /* We need objects for booleans as the "p" flag for bools is new in
656 Python 3.3. */
657 PyObject *raw_obj = NULL;
658 PyObject *pretty_arrays_obj = NULL;
659 PyObject *pretty_structs_obj = NULL;
660 PyObject *array_indexes_obj = NULL;
661 PyObject *symbols_obj = NULL;
662 PyObject *unions_obj = NULL;
663 PyObject *deref_refs_obj = NULL;
664 PyObject *actual_objects_obj = NULL;
665 PyObject *static_members_obj = NULL;
666 char *format = NULL;
667 if (!gdb_PyArg_ParseTupleAndKeywords (args,
668 kw,
2e62ab40 669 "|O!O!O!O!O!O!O!O!O!IIIs",
52093e1b
MB
670 keywords,
671 &PyBool_Type, &raw_obj,
672 &PyBool_Type, &pretty_arrays_obj,
673 &PyBool_Type, &pretty_structs_obj,
674 &PyBool_Type, &array_indexes_obj,
675 &PyBool_Type, &symbols_obj,
676 &PyBool_Type, &unions_obj,
677 &PyBool_Type, &deref_refs_obj,
678 &PyBool_Type, &actual_objects_obj,
679 &PyBool_Type, &static_members_obj,
680 &opts.print_max,
2e62ab40 681 &opts.max_depth,
52093e1b
MB
682 &opts.repeat_count_threshold,
683 &format))
684 return NULL;
685
686 /* Set boolean arguments. */
687 if (!copy_py_bool_obj (&opts.raw, raw_obj))
688 return NULL;
689 if (!copy_py_bool_obj (&opts.prettyformat_arrays, pretty_arrays_obj))
690 return NULL;
691 if (!copy_py_bool_obj (&opts.prettyformat_structs, pretty_structs_obj))
692 return NULL;
693 if (!copy_py_bool_obj (&opts.print_array_indexes, array_indexes_obj))
694 return NULL;
695 if (!copy_py_bool_obj (&opts.symbol_print, symbols_obj))
696 return NULL;
697 if (!copy_py_bool_obj (&opts.unionprint, unions_obj))
698 return NULL;
699 if (!copy_py_bool_obj (&opts.deref_ref, deref_refs_obj))
700 return NULL;
701 if (!copy_py_bool_obj (&opts.objectprint, actual_objects_obj))
702 return NULL;
703 if (!copy_py_bool_obj (&opts.static_field_print, static_members_obj))
704 return NULL;
705
706 /* Numeric arguments for which 0 means unlimited (which we represent as
2e62ab40
AB
707 UINT_MAX). Note that the max-depth numeric argument uses -1 as
708 unlimited, and 0 is a valid choice. */
52093e1b
MB
709 if (opts.print_max == 0)
710 opts.print_max = UINT_MAX;
711 if (opts.repeat_count_threshold == 0)
712 opts.repeat_count_threshold = UINT_MAX;
713
714 /* Other arguments. */
715 if (format != NULL)
716 {
717 if (strlen (format) == 1)
718 opts.format = format[0];
719 else
720 {
721 /* Mimic the message on standard Python ones for similar
722 errors. */
723 PyErr_SetString (PyExc_ValueError,
724 "a single character is required");
725 return NULL;
726 }
727 }
728
729 string_file stb;
730
a70b8144 731 try
52093e1b
MB
732 {
733 common_val_print (((value_object *) self)->value, &stb, 0,
734 &opts, python_language);
735 }
230d2906 736 catch (const gdb_exception &except)
52093e1b
MB
737 {
738 GDB_PY_HANDLE_EXCEPTION (except);
739 }
52093e1b
MB
740
741 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
742}
743
f9ffd4bb
TT
744/* A helper function that implements the various cast operators. */
745
2c74e833 746static PyObject *
f9ffd4bb 747valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
2c74e833 748{
888fe1e1 749 PyObject *type_obj, *result = NULL;
2c74e833 750 struct type *type;
2c74e833
TT
751
752 if (! PyArg_ParseTuple (args, "O", &type_obj))
753 return NULL;
754
755 type = type_object_to_type (type_obj);
756 if (! type)
757 {
256458bc 758 PyErr_SetString (PyExc_RuntimeError,
044c0f87 759 _("Argument must be a type."));
2c74e833
TT
760 return NULL;
761 }
762
a70b8144 763 try
2c74e833 764 {
f9ffd4bb 765 struct value *val = ((value_object *) self)->value;
888fe1e1 766 struct value *res_val;
eb115069 767 scoped_value_mark free_values;
f9ffd4bb
TT
768
769 if (op == UNOP_DYNAMIC_CAST)
770 res_val = value_dynamic_cast (type, val);
771 else if (op == UNOP_REINTERPRET_CAST)
772 res_val = value_reinterpret_cast (type, val);
773 else
774 {
775 gdb_assert (op == UNOP_CAST);
776 res_val = value_cast (type, val);
777 }
888fe1e1
TT
778
779 result = value_to_value_object (res_val);
2c74e833 780 }
230d2906 781 catch (const gdb_exception &except)
492d29ea
PA
782 {
783 GDB_PY_HANDLE_EXCEPTION (except);
784 }
2c74e833 785
888fe1e1 786 return result;
2c74e833
TT
787}
788
f9ffd4bb
TT
789/* Implementation of the "cast" method. */
790
791static PyObject *
792valpy_cast (PyObject *self, PyObject *args)
793{
794 return valpy_do_cast (self, args, UNOP_CAST);
795}
796
797/* Implementation of the "dynamic_cast" method. */
798
799static PyObject *
800valpy_dynamic_cast (PyObject *self, PyObject *args)
801{
802 return valpy_do_cast (self, args, UNOP_DYNAMIC_CAST);
803}
804
805/* Implementation of the "reinterpret_cast" method. */
806
807static PyObject *
808valpy_reinterpret_cast (PyObject *self, PyObject *args)
809{
810 return valpy_do_cast (self, args, UNOP_REINTERPRET_CAST);
811}
812
7843261b
TJB
813static Py_ssize_t
814valpy_length (PyObject *self)
815{
816 /* We don't support getting the number of elements in a struct / class. */
817 PyErr_SetString (PyExc_NotImplementedError,
044c0f87 818 _("Invalid operation on gdb.Value."));
7843261b
TJB
819 return -1;
820}
821
a16b0e22
SC
822/* Return 1 if the gdb.Field object FIELD is present in the value V.
823 Returns 0 otherwise. If any Python error occurs, -1 is returned. */
824
825static int
826value_has_field (struct value *v, PyObject *field)
827{
828 struct type *parent_type, *val_type;
829 enum type_code type_code;
7780f186 830 gdbpy_ref<> type_object (PyObject_GetAttrString (field, "parent_type"));
a16b0e22
SC
831 int has_field = 0;
832
833 if (type_object == NULL)
834 return -1;
835
53a0cca3 836 parent_type = type_object_to_type (type_object.get ());
a16b0e22
SC
837 if (parent_type == NULL)
838 {
839 PyErr_SetString (PyExc_TypeError,
840 _("'parent_type' attribute of gdb.Field object is not a"
841 "gdb.Type object."));
842 return -1;
843 }
844
a70b8144 845 try
a16b0e22
SC
846 {
847 val_type = value_type (v);
848 val_type = check_typedef (val_type);
3fcf899d 849 if (TYPE_IS_REFERENCE (val_type) || TYPE_CODE (val_type) == TYPE_CODE_PTR)
7ce8f214 850 val_type = check_typedef (TYPE_TARGET_TYPE (val_type));
a16b0e22
SC
851
852 type_code = TYPE_CODE (val_type);
853 if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION)
854 && types_equal (val_type, parent_type))
855 has_field = 1;
856 else
857 has_field = 0;
858 }
230d2906 859 catch (const gdb_exception &except)
492d29ea
PA
860 {
861 GDB_PY_SET_HANDLE_EXCEPTION (except);
862 }
a16b0e22
SC
863
864 return has_field;
865}
866
867/* Return the value of a flag FLAG_NAME in a gdb.Field object FIELD.
868 Returns 1 if the flag value is true, 0 if it is false, and -1 if
869 a Python error occurs. */
870
871static int
872get_field_flag (PyObject *field, const char *flag_name)
873{
7780f186 874 gdbpy_ref<> flag_object (PyObject_GetAttrString (field, flag_name));
a16b0e22
SC
875
876 if (flag_object == NULL)
877 return -1;
878
53a0cca3 879 return PyObject_IsTrue (flag_object.get ());
a16b0e22
SC
880}
881
b5b08fb4
SC
882/* Return the "type" attribute of a gdb.Field object.
883 Returns NULL on error, with a Python exception set. */
884
885static struct type *
886get_field_type (PyObject *field)
887{
7780f186 888 gdbpy_ref<> ftype_obj (PyObject_GetAttrString (field, "type"));
b5b08fb4
SC
889 struct type *ftype;
890
891 if (ftype_obj == NULL)
892 return NULL;
53a0cca3 893 ftype = type_object_to_type (ftype_obj.get ());
b5b08fb4 894 if (ftype == NULL)
bf7105a4
JB
895 PyErr_SetString (PyExc_TypeError,
896 _("'type' attribute of gdb.Field object is not a "
897 "gdb.Type object."));
b5b08fb4
SC
898
899 return ftype;
900}
901
a16b0e22
SC
902/* Given string name or a gdb.Field object corresponding to an element inside
903 a structure, return its value object. Returns NULL on error, with a python
904 exception set. */
905
7843261b
TJB
906static PyObject *
907valpy_getitem (PyObject *self, PyObject *key)
908{
cc06b668 909 struct gdb_exception except;
7843261b 910 value_object *self_value = (value_object *) self;
9b972014 911 gdb::unique_xmalloc_ptr<char> field;
b5b08fb4
SC
912 struct type *base_class_type = NULL, *field_type = NULL;
913 long bitpos = -1;
888fe1e1 914 PyObject *result = NULL;
7843261b 915
08c637de 916 if (gdbpy_is_string (key))
256458bc 917 {
08c637de
TJB
918 field = python_string_to_host_string (key);
919 if (field == NULL)
920 return NULL;
921 }
a16b0e22
SC
922 else if (gdbpy_is_field (key))
923 {
924 int is_base_class, valid_field;
925
926 valid_field = value_has_field (self_value->value, key);
927 if (valid_field < 0)
928 return NULL;
929 else if (valid_field == 0)
930 {
931 PyErr_SetString (PyExc_TypeError,
932 _("Invalid lookup for a field not contained in "
933 "the value."));
934
935 return NULL;
936 }
937
938 is_base_class = get_field_flag (key, "is_base_class");
939 if (is_base_class < 0)
940 return NULL;
941 else if (is_base_class > 0)
942 {
b5b08fb4
SC
943 base_class_type = get_field_type (key);
944 if (base_class_type == NULL)
a16b0e22
SC
945 return NULL;
946 }
947 else
948 {
7780f186 949 gdbpy_ref<> name_obj (PyObject_GetAttrString (key, "name"));
a16b0e22
SC
950
951 if (name_obj == NULL)
952 return NULL;
953
b5b08fb4
SC
954 if (name_obj != Py_None)
955 {
53a0cca3 956 field = python_string_to_host_string (name_obj.get ());
b5b08fb4
SC
957 if (field == NULL)
958 return NULL;
959 }
960 else
961 {
b5b08fb4
SC
962 if (!PyObject_HasAttrString (key, "bitpos"))
963 {
964 PyErr_SetString (PyExc_AttributeError,
965 _("gdb.Field object has no name and no "
966 "'bitpos' attribute."));
967
968 return NULL;
969 }
7780f186 970 gdbpy_ref<> bitpos_obj (PyObject_GetAttrString (key, "bitpos"));
b5b08fb4
SC
971 if (bitpos_obj == NULL)
972 return NULL;
53a0cca3 973 if (!gdb_py_int_as_long (bitpos_obj.get (), &bitpos))
b5b08fb4
SC
974 return NULL;
975
976 field_type = get_field_type (key);
977 if (field_type == NULL)
978 return NULL;
979 }
a16b0e22
SC
980 }
981 }
7843261b 982
a70b8144 983 try
7843261b 984 {
3c0ed299 985 struct value *tmp = self_value->value;
888fe1e1 986 struct value *res_val = NULL;
eb115069 987 scoped_value_mark free_values;
08c637de
TJB
988
989 if (field)
9b972014 990 res_val = value_struct_elt (&tmp, NULL, field.get (), NULL,
5996220c 991 "struct/class/union");
b5b08fb4
SC
992 else if (bitpos >= 0)
993 res_val = value_struct_elt_bitpos (&tmp, bitpos, field_type,
994 "struct/class/union");
995 else if (base_class_type != NULL)
a16b0e22 996 {
b5b08fb4 997 struct type *val_type;
a16b0e22
SC
998
999 val_type = check_typedef (value_type (tmp));
1000 if (TYPE_CODE (val_type) == TYPE_CODE_PTR)
1001 res_val = value_cast (lookup_pointer_type (base_class_type), tmp);
1002 else if (TYPE_CODE (val_type) == TYPE_CODE_REF)
3b224330
AV
1003 res_val = value_cast (lookup_lvalue_reference_type (base_class_type),
1004 tmp);
3fcf899d
AV
1005 else if (TYPE_CODE (val_type) == TYPE_CODE_RVALUE_REF)
1006 res_val = value_cast (lookup_rvalue_reference_type (base_class_type),
1007 tmp);
a16b0e22
SC
1008 else
1009 res_val = value_cast (base_class_type, tmp);
1010 }
08c637de
TJB
1011 else
1012 {
1013 /* Assume we are attempting an array access, and let the
1014 value code throw an exception if the index has an invalid
1015 type. */
1016 struct value *idx = convert_value_from_python (key);
d59b6f6c 1017
570e2b1a 1018 if (idx != NULL)
2e4d963f
PM
1019 {
1020 /* Check the value's type is something that can be accessed via
1021 a subscript. */
1022 struct type *type;
d59b6f6c 1023
2e4d963f
PM
1024 tmp = coerce_ref (tmp);
1025 type = check_typedef (value_type (tmp));
1026 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
1027 && TYPE_CODE (type) != TYPE_CODE_PTR)
e10abd8f 1028 error (_("Cannot subscript requested type."));
2e4d963f
PM
1029 else
1030 res_val = value_subscript (tmp, value_as_long (idx));
1031 }
08c637de 1032 }
888fe1e1
TT
1033
1034 if (res_val)
1035 result = value_to_value_object (res_val);
7843261b 1036 }
94aeb44b 1037 catch (gdb_exception &ex)
492d29ea 1038 {
94aeb44b 1039 except = std::move (ex);
492d29ea 1040 }
570e2b1a 1041
7843261b
TJB
1042 GDB_PY_HANDLE_EXCEPTION (except);
1043
888fe1e1 1044 return result;
7843261b
TJB
1045}
1046
1047static int
1048valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
1049{
1050 PyErr_Format (PyExc_NotImplementedError,
1051 _("Setting of struct elements is not currently supported."));
1052 return -1;
1053}
1054
5374244e 1055/* Called by the Python interpreter to perform an inferior function
8dc78533 1056 call on the value. Returns NULL on error, with a python exception set. */
5374244e
PM
1057static PyObject *
1058valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
1059{
5374244e 1060 Py_ssize_t args_count;
5374244e
PM
1061 struct value *function = ((value_object *) self)->value;
1062 struct value **vargs = NULL;
749fd4ea 1063 struct type *ftype = NULL;
888fe1e1 1064 PyObject *result = NULL;
f287c1f3 1065
a70b8144 1066 try
f287c1f3
PM
1067 {
1068 ftype = check_typedef (value_type (function));
1069 }
230d2906 1070 catch (const gdb_exception &except)
492d29ea
PA
1071 {
1072 GDB_PY_HANDLE_EXCEPTION (except);
1073 }
5374244e
PM
1074
1075 if (TYPE_CODE (ftype) != TYPE_CODE_FUNC)
1076 {
1077 PyErr_SetString (PyExc_RuntimeError,
1078 _("Value is not callable (not TYPE_CODE_FUNC)."));
1079 return NULL;
1080 }
1081
f287c1f3
PM
1082 if (! PyTuple_Check (args))
1083 {
1084 PyErr_SetString (PyExc_TypeError,
1085 _("Inferior arguments must be provided in a tuple."));
1086 return NULL;
1087 }
1088
5374244e
PM
1089 args_count = PyTuple_Size (args);
1090 if (args_count > 0)
1091 {
1092 int i;
1093
8d749320 1094 vargs = XALLOCAVEC (struct value *, args_count);
5374244e
PM
1095 for (i = 0; i < args_count; i++)
1096 {
1097 PyObject *item = PyTuple_GetItem (args, i);
1098
1099 if (item == NULL)
1100 return NULL;
1101
1102 vargs[i] = convert_value_from_python (item);
1103 if (vargs[i] == NULL)
1104 return NULL;
1105 }
1106 }
1107
a70b8144 1108 try
5374244e 1109 {
eb115069 1110 scoped_value_mark free_values;
888fe1e1 1111
e71585ff
PA
1112 value *return_value
1113 = call_function_by_hand (function, NULL,
1114 gdb::make_array_view (vargs, args_count));
888fe1e1 1115 result = value_to_value_object (return_value);
5374244e 1116 }
230d2906 1117 catch (const gdb_exception &except)
492d29ea
PA
1118 {
1119 GDB_PY_HANDLE_EXCEPTION (except);
1120 }
5374244e 1121
888fe1e1 1122 return result;
5374244e
PM
1123}
1124
7843261b
TJB
1125/* Called by the Python interpreter to obtain string representation
1126 of the object. */
1127static PyObject *
1128valpy_str (PyObject *self)
1129{
79a45b7d 1130 struct value_print_options opts;
7843261b 1131
79a45b7d
TT
1132 get_user_print_options (&opts);
1133 opts.deref_ref = 0;
1134
d7e74731
PA
1135 string_file stb;
1136
a70b8144 1137 try
7843261b 1138 {
d7e74731 1139 common_val_print (((value_object *) self)->value, &stb, 0,
d452c4bc 1140 &opts, python_language);
7843261b 1141 }
230d2906 1142 catch (const gdb_exception &except)
492d29ea
PA
1143 {
1144 GDB_PY_HANDLE_EXCEPTION (except);
1145 }
7843261b 1146
d7e74731 1147 return PyUnicode_Decode (stb.c_str (), stb.size (), host_charset (), NULL);
7843261b
TJB
1148}
1149
def2b000
TJB
1150/* Implements gdb.Value.is_optimized_out. */
1151static PyObject *
1152valpy_get_is_optimized_out (PyObject *self, void *closure)
1153{
1154 struct value *value = ((value_object *) self)->value;
f287c1f3 1155 int opt = 0;
def2b000 1156
a70b8144 1157 try
f287c1f3
PM
1158 {
1159 opt = value_optimized_out (value);
1160 }
230d2906 1161 catch (const gdb_exception &except)
492d29ea
PA
1162 {
1163 GDB_PY_HANDLE_EXCEPTION (except);
1164 }
f287c1f3
PM
1165
1166 if (opt)
def2b000
TJB
1167 Py_RETURN_TRUE;
1168
1169 Py_RETURN_FALSE;
1170}
1171
913460fc
PK
1172/* Implements gdb.Value.is_lazy. */
1173static PyObject *
1174valpy_get_is_lazy (PyObject *self, void *closure)
1175{
1176 struct value *value = ((value_object *) self)->value;
1177 int opt = 0;
913460fc 1178
a70b8144 1179 try
913460fc
PK
1180 {
1181 opt = value_lazy (value);
1182 }
230d2906 1183 catch (const gdb_exception &except)
492d29ea
PA
1184 {
1185 GDB_PY_HANDLE_EXCEPTION (except);
1186 }
913460fc
PK
1187
1188 if (opt)
1189 Py_RETURN_TRUE;
1190
1191 Py_RETURN_FALSE;
1192}
1193
1194/* Implements gdb.Value.fetch_lazy (). */
1195static PyObject *
1196valpy_fetch_lazy (PyObject *self, PyObject *args)
1197{
1198 struct value *value = ((value_object *) self)->value;
913460fc 1199
a70b8144 1200 try
913460fc
PK
1201 {
1202 if (value_lazy (value))
1203 value_fetch_lazy (value);
1204 }
230d2906 1205 catch (const gdb_exception &except)
492d29ea
PA
1206 {
1207 GDB_PY_HANDLE_EXCEPTION (except);
1208 }
913460fc
PK
1209
1210 Py_RETURN_NONE;
1211}
1212
88d4aea7
PM
1213/* Calculate and return the address of the PyObject as the value of
1214 the builtin __hash__ call. */
881d5d5d 1215static Py_hash_t
88d4aea7
PM
1216valpy_hash (PyObject *self)
1217{
881d5d5d 1218 return (intptr_t) self;
88d4aea7
PM
1219}
1220
7843261b
TJB
1221enum valpy_opcode
1222{
1223 VALPY_ADD,
1224 VALPY_SUB,
1225 VALPY_MUL,
1226 VALPY_DIV,
1227 VALPY_REM,
08c637de
TJB
1228 VALPY_POW,
1229 VALPY_LSH,
1230 VALPY_RSH,
1231 VALPY_BITAND,
1232 VALPY_BITOR,
1233 VALPY_BITXOR
7843261b
TJB
1234};
1235
1236/* If TYPE is a reference, return the target; otherwise return TYPE. */
1237#define STRIP_REFERENCE(TYPE) \
aa006118 1238 (TYPE_IS_REFERENCE (TYPE) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
7843261b 1239
9c6595ab
PA
1240/* Helper for valpy_binop. Returns a value object which is the result
1241 of applying the operation specified by OPCODE to the given
1242 arguments. Throws a GDB exception on error. */
1243
7843261b 1244static PyObject *
9c6595ab 1245valpy_binop_throw (enum valpy_opcode opcode, PyObject *self, PyObject *other)
7843261b 1246{
888fe1e1 1247 PyObject *result = NULL;
7843261b 1248
9c6595ab 1249 struct value *arg1, *arg2;
9c6595ab
PA
1250 struct value *res_val = NULL;
1251 enum exp_opcode op = OP_NULL;
1252 int handled = 0;
1253
eb115069
TT
1254 scoped_value_mark free_values;
1255
9c6595ab
PA
1256 /* If the gdb.Value object is the second operand, then it will be
1257 passed to us as the OTHER argument, and SELF will be an entirely
1258 different kind of object, altogether. Because of this, we can't
1259 assume self is a gdb.Value object and need to convert it from
1260 python as well. */
1261 arg1 = convert_value_from_python (self);
1262 if (arg1 == NULL)
eb115069 1263 return NULL;
08c637de 1264
9c6595ab
PA
1265 arg2 = convert_value_from_python (other);
1266 if (arg2 == NULL)
eb115069 1267 return NULL;
7843261b 1268
9c6595ab
PA
1269 switch (opcode)
1270 {
1271 case VALPY_ADD:
1272 {
1273 struct type *ltype = value_type (arg1);
1274 struct type *rtype = value_type (arg2);
1275
1276 ltype = check_typedef (ltype);
1277 ltype = STRIP_REFERENCE (ltype);
1278 rtype = check_typedef (rtype);
1279 rtype = STRIP_REFERENCE (rtype);
1280
1281 handled = 1;
1282 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
1283 && is_integral_type (rtype))
1284 res_val = value_ptradd (arg1, value_as_long (arg2));
1285 else if (TYPE_CODE (rtype) == TYPE_CODE_PTR
1286 && is_integral_type (ltype))
1287 res_val = value_ptradd (arg2, value_as_long (arg1));
1288 else
7843261b 1289 {
9c6595ab
PA
1290 handled = 0;
1291 op = BINOP_ADD;
7843261b 1292 }
9c6595ab
PA
1293 }
1294 break;
1295 case VALPY_SUB:
1296 {
1297 struct type *ltype = value_type (arg1);
1298 struct type *rtype = value_type (arg2);
1299
1300 ltype = check_typedef (ltype);
1301 ltype = STRIP_REFERENCE (ltype);
1302 rtype = check_typedef (rtype);
1303 rtype = STRIP_REFERENCE (rtype);
1304
1305 handled = 1;
1306 if (TYPE_CODE (ltype) == TYPE_CODE_PTR
1307 && TYPE_CODE (rtype) == TYPE_CODE_PTR)
1308 /* A ptrdiff_t for the target would be preferable here. */
1309 res_val = value_from_longest (builtin_type_pyint,
1310 value_ptrdiff (arg1, arg2));
1311 else if (TYPE_CODE (ltype) == TYPE_CODE_PTR
1312 && is_integral_type (rtype))
1313 res_val = value_ptradd (arg1, - value_as_long (arg2));
1314 else
7843261b 1315 {
9c6595ab
PA
1316 handled = 0;
1317 op = BINOP_SUB;
7843261b 1318 }
9c6595ab
PA
1319 }
1320 break;
1321 case VALPY_MUL:
1322 op = BINOP_MUL;
1323 break;
1324 case VALPY_DIV:
1325 op = BINOP_DIV;
1326 break;
1327 case VALPY_REM:
1328 op = BINOP_REM;
1329 break;
1330 case VALPY_POW:
1331 op = BINOP_EXP;
1332 break;
1333 case VALPY_LSH:
1334 op = BINOP_LSH;
1335 break;
1336 case VALPY_RSH:
1337 op = BINOP_RSH;
1338 break;
1339 case VALPY_BITAND:
1340 op = BINOP_BITWISE_AND;
1341 break;
1342 case VALPY_BITOR:
1343 op = BINOP_BITWISE_IOR;
1344 break;
1345 case VALPY_BITXOR:
1346 op = BINOP_BITWISE_XOR;
1347 break;
1348 }
888fe1e1 1349
9c6595ab
PA
1350 if (!handled)
1351 {
1352 if (binop_user_defined_p (op, arg1, arg2))
1353 res_val = value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
1354 else
1355 res_val = value_binop (arg1, arg2, op);
1356 }
f7bd0f78 1357
9c6595ab
PA
1358 if (res_val)
1359 result = value_to_value_object (res_val);
888fe1e1 1360
9c6595ab
PA
1361 return result;
1362}
1363
1364/* Returns a value object which is the result of applying the operation
1365 specified by OPCODE to the given arguments. Returns NULL on error, with
1366 a python exception set. */
1367static PyObject *
1368valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
1369{
1370 PyObject *result = NULL;
1371
a70b8144 1372 try
9c6595ab
PA
1373 {
1374 result = valpy_binop_throw (opcode, self, other);
7843261b 1375 }
230d2906 1376 catch (const gdb_exception &except)
492d29ea
PA
1377 {
1378 GDB_PY_HANDLE_EXCEPTION (except);
1379 }
7843261b 1380
888fe1e1 1381 return result;
7843261b
TJB
1382}
1383
1384static PyObject *
1385valpy_add (PyObject *self, PyObject *other)
1386{
1387 return valpy_binop (VALPY_ADD, self, other);
1388}
1389
1390static PyObject *
1391valpy_subtract (PyObject *self, PyObject *other)
1392{
1393 return valpy_binop (VALPY_SUB, self, other);
1394}
1395
1396static PyObject *
1397valpy_multiply (PyObject *self, PyObject *other)
1398{
1399 return valpy_binop (VALPY_MUL, self, other);
1400}
1401
1402static PyObject *
1403valpy_divide (PyObject *self, PyObject *other)
1404{
1405 return valpy_binop (VALPY_DIV, self, other);
1406}
1407
1408static PyObject *
1409valpy_remainder (PyObject *self, PyObject *other)
1410{
1411 return valpy_binop (VALPY_REM, self, other);
1412}
1413
1414static PyObject *
1415valpy_power (PyObject *self, PyObject *other, PyObject *unused)
1416{
1417 /* We don't support the ternary form of pow. I don't know how to express
1418 that, so let's just throw NotImplementedError to at least do something
1419 about it. */
1420 if (unused != Py_None)
1421 {
1422 PyErr_SetString (PyExc_NotImplementedError,
1423 "Invalid operation on gdb.Value.");
1424 return NULL;
1425 }
1426
1427 return valpy_binop (VALPY_POW, self, other);
1428}
1429
1430static PyObject *
1431valpy_negative (PyObject *self)
1432{
888fe1e1 1433 PyObject *result = NULL;
7843261b 1434
a70b8144 1435 try
7843261b 1436 {
888fe1e1 1437 /* Perhaps overkill, but consistency has some virtue. */
eb115069 1438 scoped_value_mark free_values;
888fe1e1
TT
1439 struct value *val;
1440
7843261b 1441 val = value_neg (((value_object *) self)->value);
888fe1e1 1442 result = value_to_value_object (val);
7843261b 1443 }
230d2906 1444 catch (const gdb_exception &except)
492d29ea
PA
1445 {
1446 GDB_PY_HANDLE_EXCEPTION (except);
1447 }
7843261b 1448
888fe1e1 1449 return result;
7843261b
TJB
1450}
1451
1452static PyObject *
1453valpy_positive (PyObject *self)
1454{
4e7a5ef5 1455 return value_to_value_object (((value_object *) self)->value);
7843261b
TJB
1456}
1457
1458static PyObject *
1459valpy_absolute (PyObject *self)
1460{
22601c15 1461 struct value *value = ((value_object *) self)->value;
f287c1f3 1462 int isabs = 1;
d59b6f6c 1463
a70b8144 1464 try
f287c1f3 1465 {
eb115069 1466 scoped_value_mark free_values;
888fe1e1 1467
f287c1f3
PM
1468 if (value_less (value, value_zero (value_type (value), not_lval)))
1469 isabs = 0;
1470 }
230d2906 1471 catch (const gdb_exception &except)
492d29ea
PA
1472 {
1473 GDB_PY_HANDLE_EXCEPTION (except);
1474 }
f287c1f3
PM
1475
1476 if (isabs)
7843261b 1477 return valpy_positive (self);
f287c1f3
PM
1478 else
1479 return valpy_negative (self);
7843261b
TJB
1480}
1481
1482/* Implements boolean evaluation of gdb.Value. */
1483static int
1484valpy_nonzero (PyObject *self)
1485{
cc06b668 1486 struct gdb_exception except;
7843261b
TJB
1487 value_object *self_value = (value_object *) self;
1488 struct type *type;
f287c1f3 1489 int nonzero = 0; /* Appease GCC warning. */
7843261b 1490
a70b8144 1491 try
f287c1f3 1492 {
5d9c5995
PM
1493 type = check_typedef (value_type (self_value->value));
1494
f287c1f3
PM
1495 if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
1496 nonzero = !!value_as_long (self_value->value);
70100014
UW
1497 else if (is_floating_value (self_value->value))
1498 nonzero = !target_float_is_zero (value_contents (self_value->value),
1499 type);
f287c1f3
PM
1500 else
1501 /* All other values are True. */
1502 nonzero = 1;
1503 }
94aeb44b 1504 catch (gdb_exception &ex)
492d29ea 1505 {
94aeb44b 1506 except = std::move (ex);
492d29ea 1507 }
492d29ea 1508
f287c1f3
PM
1509 /* This is not documented in the Python documentation, but if this
1510 function fails, return -1 as slot_nb_nonzero does (the default
1511 Python nonzero function). */
1512 GDB_PY_SET_HANDLE_EXCEPTION (except);
1513
1514 return nonzero;
7843261b
TJB
1515}
1516
08c637de 1517/* Implements ~ for value objects. */
7843261b 1518static PyObject *
08c637de 1519valpy_invert (PyObject *self)
7843261b 1520{
08c637de 1521 struct value *val = NULL;
7843261b 1522
a70b8144 1523 try
7843261b 1524 {
08c637de
TJB
1525 val = value_complement (((value_object *) self)->value);
1526 }
230d2906 1527 catch (const gdb_exception &except)
492d29ea
PA
1528 {
1529 GDB_PY_HANDLE_EXCEPTION (except);
1530 }
7843261b 1531
08c637de
TJB
1532 return value_to_value_object (val);
1533}
7843261b 1534
08c637de
TJB
1535/* Implements left shift for value objects. */
1536static PyObject *
1537valpy_lsh (PyObject *self, PyObject *other)
1538{
1539 return valpy_binop (VALPY_LSH, self, other);
1540}
7843261b 1541
08c637de
TJB
1542/* Implements right shift for value objects. */
1543static PyObject *
1544valpy_rsh (PyObject *self, PyObject *other)
1545{
1546 return valpy_binop (VALPY_RSH, self, other);
1547}
7843261b 1548
08c637de
TJB
1549/* Implements bitwise and for value objects. */
1550static PyObject *
1551valpy_and (PyObject *self, PyObject *other)
1552{
1553 return valpy_binop (VALPY_BITAND, self, other);
1554}
7843261b 1555
08c637de
TJB
1556/* Implements bitwise or for value objects. */
1557static PyObject *
1558valpy_or (PyObject *self, PyObject *other)
1559{
1560 return valpy_binop (VALPY_BITOR, self, other);
1561}
1562
1563/* Implements bitwise xor for value objects. */
1564static PyObject *
1565valpy_xor (PyObject *self, PyObject *other)
1566{
1567 return valpy_binop (VALPY_BITXOR, self, other);
1568}
1569
9c6595ab
PA
1570/* Helper for valpy_richcompare. Implements comparison operations for
1571 value objects. Returns true/false on success. Returns -1 with a
1572 Python exception set if a Python error is detected. Throws a GDB
1573 exception on other errors (memory error, etc.). */
1574
1575static int
1576valpy_richcompare_throw (PyObject *self, PyObject *other, int op)
1577{
1578 int result;
1579 struct value *value_other;
1580 struct value *value_self;
9c6595ab 1581
eb115069
TT
1582 scoped_value_mark free_values;
1583
9c6595ab
PA
1584 value_other = convert_value_from_python (other);
1585 if (value_other == NULL)
1586 return -1;
1587
9c6595ab
PA
1588 value_self = ((value_object *) self)->value;
1589
1590 switch (op)
1591 {
1592 case Py_LT:
1593 result = value_less (value_self, value_other);
1594 break;
1595 case Py_LE:
1596 result = value_less (value_self, value_other)
1597 || value_equal (value_self, value_other);
1598 break;
1599 case Py_EQ:
1600 result = value_equal (value_self, value_other);
1601 break;
1602 case Py_NE:
1603 result = !value_equal (value_self, value_other);
1604 break;
1605 case Py_GT:
1606 result = value_less (value_other, value_self);
1607 break;
1608 case Py_GE:
1609 result = (value_less (value_other, value_self)
1610 || value_equal (value_self, value_other));
1611 break;
1612 default:
1613 /* Can't happen. */
1614 PyErr_SetString (PyExc_NotImplementedError,
1615 _("Invalid operation on gdb.Value."));
1616 result = -1;
1617 break;
1618 }
1619
9c6595ab
PA
1620 return result;
1621}
1622
1623
8dc78533
JK
1624/* Implements comparison operations for value objects. Returns NULL on error,
1625 with a python exception set. */
08c637de
TJB
1626static PyObject *
1627valpy_richcompare (PyObject *self, PyObject *other, int op)
1628{
1629 int result = 0;
08c637de
TJB
1630
1631 if (other == Py_None)
7843261b
TJB
1632 /* Comparing with None is special. From what I can tell, in Python
1633 None is smaller than anything else. */
1634 switch (op) {
1635 case Py_LT:
1636 case Py_LE:
1637 case Py_EQ:
1638 Py_RETURN_FALSE;
1639 case Py_NE:
1640 case Py_GT:
1641 case Py_GE:
1642 Py_RETURN_TRUE;
1643 default:
1644 /* Can't happen. */
1645 PyErr_SetString (PyExc_NotImplementedError,
044c0f87 1646 _("Invalid operation on gdb.Value."));
7843261b
TJB
1647 return NULL;
1648 }
7843261b 1649
a70b8144 1650 try
7843261b 1651 {
9c6595ab 1652 result = valpy_richcompare_throw (self, other, op);
7843261b 1653 }
230d2906 1654 catch (const gdb_exception &except)
492d29ea
PA
1655 {
1656 GDB_PY_HANDLE_EXCEPTION (except);
1657 }
7843261b 1658
f02779d8
TT
1659 /* In this case, the Python exception has already been set. */
1660 if (result < 0)
1661 return NULL;
1662
7843261b
TJB
1663 if (result == 1)
1664 Py_RETURN_TRUE;
1665
1666 Py_RETURN_FALSE;
1667}
1668
9a27f2c6 1669#ifndef IS_PY3K
08c637de
TJB
1670/* Implements conversion to int. */
1671static PyObject *
1672valpy_int (PyObject *self)
1673{
1674 struct value *value = ((value_object *) self)->value;
1675 struct type *type = value_type (value);
1676 LONGEST l = 0;
08c637de 1677
a70b8144 1678 try
08c637de 1679 {
fb4fa946
TT
1680 if (is_floating_value (value))
1681 {
1682 type = builtin_type_pylong;
1683 value = value_cast (type, value);
1684 }
1685
f5769a2c
TT
1686 if (!is_integral_type (type)
1687 && TYPE_CODE (type) != TYPE_CODE_PTR)
f287c1f3
PM
1688 error (_("Cannot convert value to int."));
1689
08c637de
TJB
1690 l = value_as_long (value);
1691 }
230d2906 1692 catch (const gdb_exception &except)
492d29ea
PA
1693 {
1694 GDB_PY_HANDLE_EXCEPTION (except);
1695 }
08c637de 1696
1c1e54f6 1697 if (TYPE_UNSIGNED (type))
12dfa12a 1698 return gdb_py_object_from_ulongest (l).release ();
1c1e54f6 1699 else
12dfa12a 1700 return gdb_py_object_from_longest (l).release ();
08c637de 1701}
9a27f2c6 1702#endif
08c637de
TJB
1703
1704/* Implements conversion to long. */
1705static PyObject *
1706valpy_long (PyObject *self)
1707{
1708 struct value *value = ((value_object *) self)->value;
1709 struct type *type = value_type (value);
1710 LONGEST l = 0;
08c637de 1711
a70b8144 1712 try
08c637de 1713 {
fb4fa946
TT
1714 if (is_floating_value (value))
1715 {
1716 type = builtin_type_pylong;
1717 value = value_cast (type, value);
1718 }
1719
f168693b 1720 type = check_typedef (type);
f287c1f3 1721
7c245c24
JB
1722 if (!is_integral_type (type)
1723 && TYPE_CODE (type) != TYPE_CODE_PTR)
f287c1f3
PM
1724 error (_("Cannot convert value to long."));
1725
08c637de
TJB
1726 l = value_as_long (value);
1727 }
230d2906 1728 catch (const gdb_exception &except)
492d29ea
PA
1729 {
1730 GDB_PY_HANDLE_EXCEPTION (except);
1731 }
08c637de 1732
33fa2c6e
DE
1733 if (TYPE_UNSIGNED (type))
1734 return gdb_py_long_from_ulongest (l);
1735 else
1736 return gdb_py_long_from_longest (l);
08c637de
TJB
1737}
1738
1739/* Implements conversion to float. */
1740static PyObject *
1741valpy_float (PyObject *self)
1742{
1743 struct value *value = ((value_object *) self)->value;
1744 struct type *type = value_type (value);
1745 double d = 0;
08c637de 1746
a70b8144 1747 try
08c637de 1748 {
f168693b 1749 type = check_typedef (type);
f287c1f3 1750
fb4fa946
TT
1751 if (TYPE_CODE (type) == TYPE_CODE_FLT && is_floating_value (value))
1752 d = target_float_to_host_double (value_contents (value), type);
1753 else if (TYPE_CODE (type) == TYPE_CODE_INT)
1754 {
1755 /* Note that valpy_long accepts TYPE_CODE_PTR and some
1756 others here here -- but casting a pointer or bool to a
1757 float seems wrong. */
1758 d = value_as_long (value);
1759 }
1760 else
f287c1f3 1761 error (_("Cannot convert value to float."));
08c637de 1762 }
230d2906 1763 catch (const gdb_exception &except)
492d29ea
PA
1764 {
1765 GDB_PY_HANDLE_EXCEPTION (except);
1766 }
08c637de
TJB
1767
1768 return PyFloat_FromDouble (d);
1769}
1770
7843261b
TJB
1771/* Returns an object for a value which is released from the all_values chain,
1772 so its lifetime is not bound to the execution of a command. */
1773PyObject *
1774value_to_value_object (struct value *val)
1775{
1776 value_object *val_obj;
1777
1778 val_obj = PyObject_New (value_object, &value_object_type);
1779 if (val_obj != NULL)
1780 {
22bc8444 1781 val_obj->value = release_value (val).release ();
c0c6f777 1782 val_obj->address = NULL;
2c74e833 1783 val_obj->type = NULL;
03f17ccf 1784 val_obj->dynamic_type = NULL;
4e7a5ef5 1785 note_value (val_obj);
7843261b
TJB
1786 }
1787
1788 return (PyObject *) val_obj;
1789}
1790
4e7a5ef5
TT
1791/* Returns a borrowed reference to the struct value corresponding to
1792 the given value object. */
a6bac58e
TT
1793struct value *
1794value_object_to_value (PyObject *self)
1795{
1796 value_object *real;
d59b6f6c 1797
a6bac58e
TT
1798 if (! PyObject_TypeCheck (self, &value_object_type))
1799 return NULL;
1800 real = (value_object *) self;
1801 return real->value;
1802}
1803
7843261b 1804/* Try to convert a Python value to a gdb value. If the value cannot
4e7a5ef5
TT
1805 be converted, set a Python exception and return NULL. Returns a
1806 reference to a new value on the all_values chain. */
7843261b
TJB
1807
1808struct value *
1809convert_value_from_python (PyObject *obj)
1810{
1811 struct value *value = NULL; /* -Wall */
08c637de 1812 int cmp;
7843261b 1813
08c637de 1814 gdb_assert (obj != NULL);
7843261b 1815
a70b8144 1816 try
7843261b 1817 {
256458bc 1818 if (PyBool_Check (obj))
08c637de
TJB
1819 {
1820 cmp = PyObject_IsTrue (obj);
1821 if (cmp >= 0)
1822 value = value_from_longest (builtin_type_pybool, cmp);
1823 }
06ab7b19
PM
1824 /* Make a long logic check first. In Python 3.x, internally,
1825 all integers are represented as longs. In Python 2.x, there
1826 is still a differentiation internally between a PyInt and a
1827 PyLong. Explicitly do this long check conversion first. In
1828 GDB, for Python 3.x, we #ifdef PyInt = PyLong. This check has
1829 to be done first to ensure we do not lose information in the
1830 conversion process. */
08c637de
TJB
1831 else if (PyLong_Check (obj))
1832 {
1833 LONGEST l = PyLong_AsLongLong (obj);
7843261b 1834
595939de
PM
1835 if (PyErr_Occurred ())
1836 {
1837 /* If the error was an overflow, we can try converting to
1838 ULONGEST instead. */
1839 if (PyErr_ExceptionMatches (PyExc_OverflowError))
1840 {
5c329e6a 1841 gdbpy_err_fetch fetched_error;
7780f186 1842 gdbpy_ref<> zero (PyInt_FromLong (0));
595939de
PM
1843
1844 /* Check whether obj is positive. */
53a0cca3 1845 if (PyObject_RichCompareBool (obj, zero.get (), Py_GT) > 0)
595939de
PM
1846 {
1847 ULONGEST ul;
1848
1849 ul = PyLong_AsUnsignedLongLong (obj);
1850 if (! PyErr_Occurred ())
1851 value = value_from_ulongest (builtin_type_upylong, ul);
1852 }
1853 else
5c329e6a
TT
1854 {
1855 /* There's nothing we can do. */
1856 fetched_error.restore ();
1857 }
595939de
PM
1858 }
1859 }
1860 else
08c637de
TJB
1861 value = value_from_longest (builtin_type_pylong, l);
1862 }
12c58cd4 1863#if PY_MAJOR_VERSION == 2
06ab7b19
PM
1864 else if (PyInt_Check (obj))
1865 {
1866 long l = PyInt_AsLong (obj);
1867
1868 if (! PyErr_Occurred ())
1869 value = value_from_longest (builtin_type_pyint, l);
1870 }
12c58cd4 1871#endif
08c637de
TJB
1872 else if (PyFloat_Check (obj))
1873 {
1874 double d = PyFloat_AsDouble (obj);
7843261b 1875
08c637de 1876 if (! PyErr_Occurred ())
7584bb30 1877 value = value_from_host_double (builtin_type_pyfloat, d);
08c637de
TJB
1878 }
1879 else if (gdbpy_is_string (obj))
1880 {
9b972014
TT
1881 gdb::unique_xmalloc_ptr<char> s
1882 = python_string_to_target_string (obj);
08c637de 1883 if (s != NULL)
9b972014
TT
1884 value = value_cstring (s.get (), strlen (s.get ()),
1885 builtin_type_pychar);
08c637de
TJB
1886 }
1887 else if (PyObject_TypeCheck (obj, &value_object_type))
cc924cad 1888 value = value_copy (((value_object *) obj)->value);
be759fcf
PM
1889 else if (gdbpy_is_lazy_string (obj))
1890 {
1891 PyObject *result;
d59b6f6c 1892
fb6a3ed3 1893 result = PyObject_CallMethodObjArgs (obj, gdbpy_value_cst, NULL);
be759fcf
PM
1894 value = value_copy (((value_object *) result)->value);
1895 }
08c637de 1896 else
9a27f2c6
PK
1897#ifdef IS_PY3K
1898 PyErr_Format (PyExc_TypeError,
1899 _("Could not convert Python object: %S."), obj);
1900#else
9a2b4c1b
MS
1901 PyErr_Format (PyExc_TypeError,
1902 _("Could not convert Python object: %s."),
08c637de 1903 PyString_AsString (PyObject_Str (obj)));
9a27f2c6 1904#endif
08c637de 1905 }
230d2906 1906 catch (const gdb_exception &except)
08c637de 1907 {
ec9c2750 1908 gdbpy_convert_exception (except);
08c637de
TJB
1909 return NULL;
1910 }
7843261b
TJB
1911
1912 return value;
1913}
1914
1915/* Returns value object in the ARGth position in GDB's history. */
1916PyObject *
08c637de 1917gdbpy_history (PyObject *self, PyObject *args)
7843261b
TJB
1918{
1919 int i;
1920 struct value *res_val = NULL; /* Initialize to appease gcc warning. */
7843261b
TJB
1921
1922 if (!PyArg_ParseTuple (args, "i", &i))
1923 return NULL;
1924
a70b8144 1925 try
7843261b
TJB
1926 {
1927 res_val = access_value_history (i);
1928 }
230d2906 1929 catch (const gdb_exception &except)
492d29ea
PA
1930 {
1931 GDB_PY_HANDLE_EXCEPTION (except);
1932 }
7843261b
TJB
1933
1934 return value_to_value_object (res_val);
1935}
1936
7729052b
TT
1937/* Return the value of a convenience variable. */
1938PyObject *
1939gdbpy_convenience_variable (PyObject *self, PyObject *args)
1940{
1941 const char *varname;
1942 struct value *res_val = NULL;
1943
1944 if (!PyArg_ParseTuple (args, "s", &varname))
1945 return NULL;
1946
a70b8144 1947 try
7729052b
TT
1948 {
1949 struct internalvar *var = lookup_only_internalvar (varname);
1950
1951 if (var != NULL)
1952 {
1953 res_val = value_of_internalvar (python_gdbarch, var);
1954 if (TYPE_CODE (value_type (res_val)) == TYPE_CODE_VOID)
1955 res_val = NULL;
1956 }
1957 }
230d2906 1958 catch (const gdb_exception &except)
7729052b
TT
1959 {
1960 GDB_PY_HANDLE_EXCEPTION (except);
1961 }
7729052b
TT
1962
1963 if (res_val == NULL)
1964 Py_RETURN_NONE;
1965
1966 return value_to_value_object (res_val);
1967}
1968
1969/* Set the value of a convenience variable. */
1970PyObject *
1971gdbpy_set_convenience_variable (PyObject *self, PyObject *args)
1972{
1973 const char *varname;
1974 PyObject *value_obj;
1975 struct value *value = NULL;
1976
1977 if (!PyArg_ParseTuple (args, "sO", &varname, &value_obj))
1978 return NULL;
1979
1980 /* None means to clear the variable. */
1981 if (value_obj != Py_None)
1982 {
1983 value = convert_value_from_python (value_obj);
1984 if (value == NULL)
1985 return NULL;
1986 }
1987
a70b8144 1988 try
7729052b
TT
1989 {
1990 if (value == NULL)
1991 {
1992 struct internalvar *var = lookup_only_internalvar (varname);
1993
1994 if (var != NULL)
1995 clear_internalvar (var);
1996 }
1997 else
1998 {
1999 struct internalvar *var = lookup_internalvar (varname);
2000
2001 set_internalvar (var, value);
2002 }
2003 }
230d2906 2004 catch (const gdb_exception &except)
7729052b
TT
2005 {
2006 GDB_PY_HANDLE_EXCEPTION (except);
2007 }
7729052b
TT
2008
2009 Py_RETURN_NONE;
2010}
2011
595939de
PM
2012/* Returns 1 in OBJ is a gdb.Value object, 0 otherwise. */
2013
2014int
2015gdbpy_is_value_object (PyObject *obj)
2016{
2017 return PyObject_TypeCheck (obj, &value_object_type);
2018}
2019
999633ed 2020int
7843261b
TJB
2021gdbpy_initialize_values (void)
2022{
7843261b 2023 if (PyType_Ready (&value_object_type) < 0)
999633ed 2024 return -1;
7843261b 2025
aa36459a
TT
2026 return gdb_pymodule_addobject (gdb_module, "Value",
2027 (PyObject *) &value_object_type);
7843261b
TJB
2028}
2029
2c74e833
TT
2030\f
2031
0d1f4ceb 2032static gdb_PyGetSetDef value_object_getset[] = {
c0c6f777
TJB
2033 { "address", valpy_get_address, NULL, "The address of the value.",
2034 NULL },
def2b000 2035 { "is_optimized_out", valpy_get_is_optimized_out, NULL,
9a2b4c1b
MS
2036 "Boolean telling whether the value is optimized "
2037 "out (i.e., not available).",
def2b000 2038 NULL },
2c74e833 2039 { "type", valpy_get_type, NULL, "Type of the value.", NULL },
03f17ccf
TT
2040 { "dynamic_type", valpy_get_dynamic_type, NULL,
2041 "Dynamic type of the value.", NULL },
913460fc
PK
2042 { "is_lazy", valpy_get_is_lazy, NULL,
2043 "Boolean telling whether the value is lazy (not fetched yet\n\
2044from the inferior). A lazy value is fetched when needed, or when\n\
2045the \"fetch_lazy()\" method is called.", NULL },
def2b000
TJB
2046 {NULL} /* Sentinel */
2047};
2048
f9176c46 2049static PyMethodDef value_object_methods[] = {
2c74e833 2050 { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
f9ffd4bb
TT
2051 { "dynamic_cast", valpy_dynamic_cast, METH_VARARGS,
2052 "dynamic_cast (gdb.Type) -> gdb.Value\n\
2053Cast the value to the supplied type, as if by the C++ dynamic_cast operator."
2054 },
2055 { "reinterpret_cast", valpy_reinterpret_cast, METH_VARARGS,
2056 "reinterpret_cast (gdb.Type) -> gdb.Value\n\
2057Cast the value to the supplied type, as if by the C++\n\
2058reinterpret_cast operator."
2059 },
f9176c46 2060 { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
7b282c5a
SCR
2061 { "referenced_value", valpy_referenced_value, METH_NOARGS,
2062 "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
3fcf899d 2063 { "reference_value", valpy_lvalue_reference_value, METH_NOARGS,
4c082a81 2064 "Return a value of type TYPE_CODE_REF referencing this value." },
3fcf899d
AV
2065 { "rvalue_reference_value", valpy_rvalue_reference_value, METH_NOARGS,
2066 "Return a value of type TYPE_CODE_RVALUE_REF referencing this value." },
4c082a81
SC
2067 { "const_value", valpy_const_value, METH_NOARGS,
2068 "Return a 'const' qualied version of the same value." },
9a2b4c1b
MS
2069 { "lazy_string", (PyCFunction) valpy_lazy_string,
2070 METH_VARARGS | METH_KEYWORDS,
be759fcf
PM
2071 "lazy_string ([encoding] [, length]) -> lazy_string\n\
2072Return a lazy string representation of the value." },
cc924cad 2073 { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
fbb8f299 2074 "string ([encoding] [, errors] [, length]) -> string\n\
cc924cad 2075Return Unicode string representation of the value." },
256458bc 2076 { "fetch_lazy", valpy_fetch_lazy, METH_NOARGS,
913460fc 2077 "Fetches the value from the inferior, if it was lazy." },
52093e1b
MB
2078 { "format_string", (PyCFunction) valpy_format_string,
2079 METH_VARARGS | METH_KEYWORDS,
2080 "format_string (...) -> string\n\
2081Return a string representation of the value using the specified\n\
2082formatting options" },
f9176c46
PA
2083 {NULL} /* Sentinel */
2084};
2085
2086static PyNumberMethods value_object_as_number = {
2087 valpy_add,
2088 valpy_subtract,
2089 valpy_multiply,
9a27f2c6 2090#ifndef IS_PY3K
f9176c46 2091 valpy_divide,
9a27f2c6 2092#endif
f9176c46
PA
2093 valpy_remainder,
2094 NULL, /* nb_divmod */
2095 valpy_power, /* nb_power */
2096 valpy_negative, /* nb_negative */
2097 valpy_positive, /* nb_positive */
2098 valpy_absolute, /* nb_absolute */
08c637de
TJB
2099 valpy_nonzero, /* nb_nonzero */
2100 valpy_invert, /* nb_invert */
2101 valpy_lsh, /* nb_lshift */
2102 valpy_rsh, /* nb_rshift */
2103 valpy_and, /* nb_and */
2104 valpy_xor, /* nb_xor */
2105 valpy_or, /* nb_or */
9a27f2c6
PK
2106#ifdef IS_PY3K
2107 valpy_long, /* nb_int */
2108 NULL, /* reserved */
2109#else
08c637de
TJB
2110 NULL, /* nb_coerce */
2111 valpy_int, /* nb_int */
2112 valpy_long, /* nb_long */
9a27f2c6 2113#endif
08c637de 2114 valpy_float, /* nb_float */
9a27f2c6 2115#ifndef IS_PY3K
08c637de 2116 NULL, /* nb_oct */
9a27f2c6
PK
2117 NULL, /* nb_hex */
2118#endif
2119 NULL, /* nb_inplace_add */
2120 NULL, /* nb_inplace_subtract */
2121 NULL, /* nb_inplace_multiply */
e2b7f516
TT
2122#ifndef IS_PY3K
2123 NULL, /* nb_inplace_divide */
2124#endif
9a27f2c6
PK
2125 NULL, /* nb_inplace_remainder */
2126 NULL, /* nb_inplace_power */
2127 NULL, /* nb_inplace_lshift */
2128 NULL, /* nb_inplace_rshift */
2129 NULL, /* nb_inplace_and */
2130 NULL, /* nb_inplace_xor */
2131 NULL, /* nb_inplace_or */
2132 NULL, /* nb_floor_divide */
ddae9462
TT
2133 valpy_divide, /* nb_true_divide */
2134 NULL, /* nb_inplace_floor_divide */
2135 NULL, /* nb_inplace_true_divide */
ddae9462 2136 valpy_long, /* nb_index */
f9176c46
PA
2137};
2138
2139static PyMappingMethods value_object_as_mapping = {
2140 valpy_length,
2141 valpy_getitem,
2142 valpy_setitem
2143};
2144
2145PyTypeObject value_object_type = {
9a27f2c6 2146 PyVarObject_HEAD_INIT (NULL, 0)
f9176c46
PA
2147 "gdb.Value", /*tp_name*/
2148 sizeof (value_object), /*tp_basicsize*/
2149 0, /*tp_itemsize*/
2150 valpy_dealloc, /*tp_dealloc*/
2151 0, /*tp_print*/
2152 0, /*tp_getattr*/
2153 0, /*tp_setattr*/
2154 0, /*tp_compare*/
2155 0, /*tp_repr*/
2156 &value_object_as_number, /*tp_as_number*/
2157 0, /*tp_as_sequence*/
2158 &value_object_as_mapping, /*tp_as_mapping*/
88d4aea7 2159 valpy_hash, /*tp_hash*/
5374244e 2160 valpy_call, /*tp_call*/
f9176c46
PA
2161 valpy_str, /*tp_str*/
2162 0, /*tp_getattro*/
2163 0, /*tp_setattro*/
2164 0, /*tp_as_buffer*/
9a2b4c1b
MS
2165 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES
2166 | Py_TPFLAGS_BASETYPE, /*tp_flags*/
f9176c46
PA
2167 "GDB value object", /* tp_doc */
2168 0, /* tp_traverse */
2169 0, /* tp_clear */
2170 valpy_richcompare, /* tp_richcompare */
2171 0, /* tp_weaklistoffset */
2172 0, /* tp_iter */
2173 0, /* tp_iternext */
08c637de
TJB
2174 value_object_methods, /* tp_methods */
2175 0, /* tp_members */
def2b000 2176 value_object_getset, /* tp_getset */
08c637de
TJB
2177 0, /* tp_base */
2178 0, /* tp_dict */
2179 0, /* tp_descr_get */
2180 0, /* tp_descr_set */
2181 0, /* tp_dictoffset */
2182 0, /* tp_init */
2183 0, /* tp_alloc */
2184 valpy_new /* tp_new */
f9176c46 2185};
This page took 1.203235 seconds and 4 git commands to generate.