xref: /dragonfly/contrib/gdb-7/gdb/python/py-value.c (revision 28c26f7e)
1 /* Python interface to values.
2 
3    Copyright (C) 2008, 2009 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "gdb_assert.h"
22 #include "charset.h"
23 #include "value.h"
24 #include "exceptions.h"
25 #include "language.h"
26 #include "dfp.h"
27 #include "valprint.h"
28 
29 #ifdef HAVE_PYTHON
30 
31 #include "python-internal.h"
32 
33 /* Even though Python scalar types directly map to host types, we use
34    target types here to remain consistent with the the values system in
35    GDB (which uses target arithmetic).  */
36 
37 /* Python's integer type corresponds to C's long type.  */
38 #define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long
39 
40 /* Python's float type corresponds to C's double type.  */
41 #define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
42 
43 /* Python's long type corresponds to C's long long type.  */
44 #define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
45 
46 #define builtin_type_pybool \
47   language_bool_type (python_language, python_gdbarch)
48 
49 #define builtin_type_pychar \
50   language_string_char_type (python_language, python_gdbarch)
51 
52 typedef struct value_object {
53   PyObject_HEAD
54   struct value_object *next;
55   struct value_object *prev;
56   struct value *value;
57   PyObject *address;
58   PyObject *type;
59 } value_object;
60 
61 /* List of all values which are currently exposed to Python. It is
62    maintained so that when an objfile is discarded, preserve_values
63    can copy the values' types if needed.  */
64 /* This variable is unnecessarily initialized to NULL in order to
65    work around a linker bug on MacOS.  */
66 static value_object *values_in_python = NULL;
67 
68 /* Called by the Python interpreter when deallocating a value object.  */
69 static void
70 valpy_dealloc (PyObject *obj)
71 {
72   value_object *self = (value_object *) obj;
73 
74   /* Remove SELF from the global list.  */
75   if (self->prev)
76     self->prev->next = self->next;
77   else
78     {
79       gdb_assert (values_in_python == self);
80       values_in_python = self->next;
81     }
82   if (self->next)
83     self->next->prev = self->prev;
84 
85   value_free (self->value);
86 
87   if (self->address)
88     /* Use braces to appease gcc warning.  *sigh*  */
89     {
90       Py_DECREF (self->address);
91     }
92 
93   if (self->type)
94     {
95       Py_DECREF (self->type);
96     }
97 
98   self->ob_type->tp_free (self);
99 }
100 
101 /* Helper to push a Value object on the global list.  */
102 static void
103 note_value (value_object *value_obj)
104 {
105   value_obj->next = values_in_python;
106   if (value_obj->next)
107     value_obj->next->prev = value_obj;
108   value_obj->prev = NULL;
109   values_in_python = value_obj;
110 }
111 
112 /* Called when a new gdb.Value object needs to be allocated.  */
113 static PyObject *
114 valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
115 {
116   struct value *value = NULL;   /* Initialize to appease gcc warning.  */
117   value_object *value_obj;
118 
119   if (PyTuple_Size (args) != 1)
120     {
121       PyErr_SetString (PyExc_TypeError, _("Value object creation takes only "
122 					  "1 argument"));
123       return NULL;
124     }
125 
126   value_obj = (value_object *) subtype->tp_alloc (subtype, 1);
127   if (value_obj == NULL)
128     {
129       PyErr_SetString (PyExc_MemoryError, _("Could not allocate memory to "
130 					    "create Value object."));
131       return NULL;
132     }
133 
134   value = convert_value_from_python (PyTuple_GetItem (args, 0));
135   if (value == NULL)
136     {
137       subtype->tp_free (value_obj);
138       return NULL;
139     }
140 
141   value_obj->value = value;
142   value_incref (value);
143   value_obj->address = NULL;
144   value_obj->type = NULL;
145   note_value (value_obj);
146 
147   return (PyObject *) value_obj;
148 }
149 
150 /* Iterate over all the Value objects, calling preserve_one_value on
151    each.  */
152 void
153 preserve_python_values (struct objfile *objfile, htab_t copied_types)
154 {
155   value_object *iter;
156 
157   for (iter = values_in_python; iter; iter = iter->next)
158     preserve_one_value (iter->value, objfile, copied_types);
159 }
160 
161 /* Given a value of a pointer type, apply the C unary * operator to it.  */
162 static PyObject *
163 valpy_dereference (PyObject *self, PyObject *args)
164 {
165   struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
166   volatile struct gdb_exception except;
167 
168   TRY_CATCH (except, RETURN_MASK_ALL)
169     {
170       res_val = value_ind (((value_object *) self)->value);
171     }
172   GDB_PY_HANDLE_EXCEPTION (except);
173 
174   return value_to_value_object (res_val);
175 }
176 
177 /* Return "&value".  */
178 static PyObject *
179 valpy_get_address (PyObject *self, void *closure)
180 {
181   struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
182   value_object *val_obj = (value_object *) self;
183   volatile struct gdb_exception except;
184 
185   if (!val_obj->address)
186     {
187       TRY_CATCH (except, RETURN_MASK_ALL)
188 	{
189 	  res_val = value_addr (val_obj->value);
190 	}
191       if (except.reason < 0)
192 	{
193 	  val_obj->address = Py_None;
194 	  Py_INCREF (Py_None);
195 	}
196       else
197 	val_obj->address = value_to_value_object (res_val);
198     }
199 
200   Py_INCREF (val_obj->address);
201 
202   return val_obj->address;
203 }
204 
205 /* Return type of the value.  */
206 static PyObject *
207 valpy_get_type (PyObject *self, void *closure)
208 {
209   value_object *obj = (value_object *) self;
210   if (!obj->type)
211     {
212       obj->type = type_to_type_object (value_type (obj->value));
213       if (!obj->type)
214 	{
215 	  obj->type = Py_None;
216 	  Py_INCREF (obj->type);
217 	}
218     }
219   Py_INCREF (obj->type);
220   return obj->type;
221 }
222 
223 /* Implementation of gdb.Value.string ([encoding] [, errors]
224    [, length]) -> string.  Return Unicode string with value contents.
225    If ENCODING is not given, the string is assumed to be encoded in
226    the target's charset.  If LENGTH is provided, only fetch string to
227    the length provided.  */
228 
229 static PyObject *
230 valpy_string (PyObject *self, PyObject *args, PyObject *kw)
231 {
232   int length = -1, ret = 0;
233   gdb_byte *buffer;
234   struct value *value = ((value_object *) self)->value;
235   volatile struct gdb_exception except;
236   PyObject *unicode;
237   const char *encoding = NULL;
238   const char *errors = NULL;
239   const char *user_encoding = NULL;
240   const char *la_encoding = NULL;
241   static char *keywords[] = { "encoding", "errors", "length", NULL };
242 
243   if (!PyArg_ParseTupleAndKeywords (args, kw, "|ssi", keywords,
244 				    &user_encoding, &errors, &length))
245     return NULL;
246 
247   TRY_CATCH (except, RETURN_MASK_ALL)
248     {
249       LA_GET_STRING (value, &buffer, &length, &la_encoding);
250     }
251   GDB_PY_HANDLE_EXCEPTION (except);
252 
253   encoding = (user_encoding && *user_encoding) ? user_encoding : la_encoding;
254   unicode = PyUnicode_Decode (buffer, length, encoding, errors);
255   xfree (buffer);
256 
257   return unicode;
258 }
259 
260 /* Cast a value to a given type.  */
261 static PyObject *
262 valpy_cast (PyObject *self, PyObject *args)
263 {
264   PyObject *type_obj;
265   struct type *type;
266   struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
267   volatile struct gdb_exception except;
268 
269   if (! PyArg_ParseTuple (args, "O", &type_obj))
270     return NULL;
271 
272   type = type_object_to_type (type_obj);
273   if (! type)
274     {
275       PyErr_SetString (PyExc_RuntimeError, "argument must be a Type");
276       return NULL;
277     }
278 
279   TRY_CATCH (except, RETURN_MASK_ALL)
280     {
281       res_val = value_cast (type, ((value_object *) self)->value);
282     }
283   GDB_PY_HANDLE_EXCEPTION (except);
284 
285   return value_to_value_object (res_val);
286 }
287 
288 static Py_ssize_t
289 valpy_length (PyObject *self)
290 {
291   /* We don't support getting the number of elements in a struct / class.  */
292   PyErr_SetString (PyExc_NotImplementedError,
293 		   "Invalid operation on gdb.Value.");
294   return -1;
295 }
296 
297 /* Given string name of an element inside structure, return its value
298    object.  */
299 static PyObject *
300 valpy_getitem (PyObject *self, PyObject *key)
301 {
302   value_object *self_value = (value_object *) self;
303   char *field = NULL;
304   struct value *res_val = NULL;
305   volatile struct gdb_exception except;
306 
307   if (gdbpy_is_string (key))
308     {
309       field = python_string_to_host_string (key);
310       if (field == NULL)
311 	return NULL;
312     }
313 
314   TRY_CATCH (except, RETURN_MASK_ALL)
315     {
316       struct value *tmp = self_value->value;
317 
318       if (field)
319 	res_val = value_struct_elt (&tmp, NULL, field, 0, NULL);
320       else
321 	{
322 	  /* Assume we are attempting an array access, and let the
323 	     value code throw an exception if the index has an invalid
324 	     type.  */
325 	  struct value *idx = convert_value_from_python (key);
326 	  if (idx != NULL)
327 	    {
328 	      /* Check the value's type is something that can be accessed via
329 		 a subscript.  */
330 	      struct type *type;
331 	      tmp = coerce_ref (tmp);
332 	      type = check_typedef (value_type (tmp));
333 	      if (TYPE_CODE (type) != TYPE_CODE_ARRAY
334 		  && TYPE_CODE (type) != TYPE_CODE_PTR)
335 		  error( _("Cannot subscript requested type"));
336 	      else
337 		res_val = value_subscript (tmp, value_as_long (idx));
338 	    }
339 	}
340     }
341 
342   xfree (field);
343   GDB_PY_HANDLE_EXCEPTION (except);
344 
345   return res_val ? value_to_value_object (res_val) : NULL;
346 }
347 
348 static int
349 valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
350 {
351   PyErr_Format (PyExc_NotImplementedError,
352 		_("Setting of struct elements is not currently supported."));
353   return -1;
354 }
355 
356 /* Called by the Python interpreter to obtain string representation
357    of the object.  */
358 static PyObject *
359 valpy_str (PyObject *self)
360 {
361   char *s = NULL;
362   struct ui_file *stb;
363   struct cleanup *old_chain;
364   PyObject *result;
365   struct value_print_options opts;
366   volatile struct gdb_exception except;
367 
368   get_user_print_options (&opts);
369   opts.deref_ref = 0;
370 
371   stb = mem_fileopen ();
372   old_chain = make_cleanup_ui_file_delete (stb);
373 
374   TRY_CATCH (except, RETURN_MASK_ALL)
375     {
376       common_val_print (((value_object *) self)->value, stb, 0,
377 			&opts, python_language);
378       s = ui_file_xstrdup (stb, NULL);
379     }
380   GDB_PY_HANDLE_EXCEPTION (except);
381 
382   do_cleanups (old_chain);
383 
384   result = PyUnicode_Decode (s, strlen (s), host_charset (), NULL);
385   xfree (s);
386 
387   return result;
388 }
389 
390 /* Implements gdb.Value.is_optimized_out.  */
391 static PyObject *
392 valpy_get_is_optimized_out (PyObject *self, void *closure)
393 {
394   struct value *value = ((value_object *) self)->value;
395 
396   if (value_optimized_out (value))
397     Py_RETURN_TRUE;
398 
399   Py_RETURN_FALSE;
400 }
401 
402 enum valpy_opcode
403 {
404   VALPY_ADD,
405   VALPY_SUB,
406   VALPY_MUL,
407   VALPY_DIV,
408   VALPY_REM,
409   VALPY_POW,
410   VALPY_LSH,
411   VALPY_RSH,
412   VALPY_BITAND,
413   VALPY_BITOR,
414   VALPY_BITXOR
415 };
416 
417 /* If TYPE is a reference, return the target; otherwise return TYPE.  */
418 #define STRIP_REFERENCE(TYPE) \
419   ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
420 
421 /* Returns a value object which is the result of applying the operation
422    specified by OPCODE to the given arguments.  */
423 static PyObject *
424 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
425 {
426   struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
427   volatile struct gdb_exception except;
428 
429   TRY_CATCH (except, RETURN_MASK_ALL)
430     {
431       struct value *arg1, *arg2;
432 
433       /* If the gdb.Value object is the second operand, then it will be passed
434 	 to us as the OTHER argument, and SELF will be an entirely different
435 	 kind of object, altogether.  Because of this, we can't assume self is
436 	 a gdb.Value object and need to convert it from python as well.  */
437       arg1 = convert_value_from_python (self);
438       if (arg1 == NULL)
439 	break;
440 
441       arg2 = convert_value_from_python (other);
442       if (arg2 == NULL)
443 	break;
444 
445       switch (opcode)
446 	{
447 	case VALPY_ADD:
448 	  {
449 	    struct type *ltype = value_type (arg1);
450 	    struct type *rtype = value_type (arg2);
451 
452 	    CHECK_TYPEDEF (ltype);
453 	    ltype = STRIP_REFERENCE (ltype);
454 	    CHECK_TYPEDEF (rtype);
455 	    rtype = STRIP_REFERENCE (rtype);
456 
457 	    if (TYPE_CODE (ltype) == TYPE_CODE_PTR
458 		&& is_integral_type (rtype))
459 	      res_val = value_ptradd (arg1, value_as_long (arg2));
460 	    else if (TYPE_CODE (rtype) == TYPE_CODE_PTR
461 		     && is_integral_type (ltype))
462 	      res_val = value_ptradd (arg2, value_as_long (arg1));
463 	    else
464 	      res_val = value_binop (arg1, arg2, BINOP_ADD);
465 	  }
466 	  break;
467 	case VALPY_SUB:
468 	  {
469 	    struct type *ltype = value_type (arg1);
470 	    struct type *rtype = value_type (arg2);
471 
472 	    CHECK_TYPEDEF (ltype);
473 	    ltype = STRIP_REFERENCE (ltype);
474 	    CHECK_TYPEDEF (rtype);
475 	    rtype = STRIP_REFERENCE (rtype);
476 
477 	    if (TYPE_CODE (ltype) == TYPE_CODE_PTR
478 		&& TYPE_CODE (rtype) == TYPE_CODE_PTR)
479 	      /* A ptrdiff_t for the target would be preferable here.  */
480 	      res_val = value_from_longest (builtin_type_pyint,
481 					    value_ptrdiff (arg1, arg2));
482 	    else if (TYPE_CODE (ltype) == TYPE_CODE_PTR
483 		     && is_integral_type (rtype))
484 	      res_val = value_ptradd (arg1, - value_as_long (arg2));
485 	    else
486 	      res_val = value_binop (arg1, arg2, BINOP_SUB);
487 	  }
488 	  break;
489 	case VALPY_MUL:
490 	  res_val = value_binop (arg1, arg2, BINOP_MUL);
491 	  break;
492 	case VALPY_DIV:
493 	  res_val = value_binop (arg1, arg2, BINOP_DIV);
494 	  break;
495 	case VALPY_REM:
496 	  res_val = value_binop (arg1, arg2, BINOP_REM);
497 	  break;
498 	case VALPY_POW:
499 	  res_val = value_binop (arg1, arg2, BINOP_EXP);
500 	  break;
501 	case VALPY_LSH:
502 	  res_val = value_binop (arg1, arg2, BINOP_LSH);
503 	  break;
504 	case VALPY_RSH:
505 	  res_val = value_binop (arg1, arg2, BINOP_RSH);
506 	  break;
507 	case VALPY_BITAND:
508 	  res_val = value_binop (arg1, arg2, BINOP_BITWISE_AND);
509 	  break;
510 	case VALPY_BITOR:
511 	  res_val = value_binop (arg1, arg2, BINOP_BITWISE_IOR);
512 	  break;
513 	case VALPY_BITXOR:
514 	  res_val = value_binop (arg1, arg2, BINOP_BITWISE_XOR);
515 	  break;
516 	}
517     }
518   GDB_PY_HANDLE_EXCEPTION (except);
519 
520   return res_val ? value_to_value_object (res_val) : NULL;
521 }
522 
523 static PyObject *
524 valpy_add (PyObject *self, PyObject *other)
525 {
526   return valpy_binop (VALPY_ADD, self, other);
527 }
528 
529 static PyObject *
530 valpy_subtract (PyObject *self, PyObject *other)
531 {
532   return valpy_binop (VALPY_SUB, self, other);
533 }
534 
535 static PyObject *
536 valpy_multiply (PyObject *self, PyObject *other)
537 {
538   return valpy_binop (VALPY_MUL, self, other);
539 }
540 
541 static PyObject *
542 valpy_divide (PyObject *self, PyObject *other)
543 {
544   return valpy_binop (VALPY_DIV, self, other);
545 }
546 
547 static PyObject *
548 valpy_remainder (PyObject *self, PyObject *other)
549 {
550   return valpy_binop (VALPY_REM, self, other);
551 }
552 
553 static PyObject *
554 valpy_power (PyObject *self, PyObject *other, PyObject *unused)
555 {
556   /* We don't support the ternary form of pow.  I don't know how to express
557      that, so let's just throw NotImplementedError to at least do something
558      about it.  */
559   if (unused != Py_None)
560     {
561       PyErr_SetString (PyExc_NotImplementedError,
562 		       "Invalid operation on gdb.Value.");
563       return NULL;
564     }
565 
566   return valpy_binop (VALPY_POW, self, other);
567 }
568 
569 static PyObject *
570 valpy_negative (PyObject *self)
571 {
572   struct value *val = NULL;
573   volatile struct gdb_exception except;
574 
575   TRY_CATCH (except, RETURN_MASK_ALL)
576     {
577       val = value_neg (((value_object *) self)->value);
578     }
579   GDB_PY_HANDLE_EXCEPTION (except);
580 
581   return value_to_value_object (val);
582 }
583 
584 static PyObject *
585 valpy_positive (PyObject *self)
586 {
587   return value_to_value_object (((value_object *) self)->value);
588 }
589 
590 static PyObject *
591 valpy_absolute (PyObject *self)
592 {
593   struct value *value = ((value_object *) self)->value;
594   if (value_less (value, value_zero (value_type (value), not_lval)))
595     return valpy_negative (self);
596   else
597     return valpy_positive (self);
598 }
599 
600 /* Implements boolean evaluation of gdb.Value.  */
601 static int
602 valpy_nonzero (PyObject *self)
603 {
604   value_object *self_value = (value_object *) self;
605   struct type *type;
606 
607   type = check_typedef (value_type (self_value->value));
608 
609   if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
610     return !!value_as_long (self_value->value);
611   else if (TYPE_CODE (type) == TYPE_CODE_FLT)
612     return value_as_double (self_value->value) != 0;
613   else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
614     return !decimal_is_zero (value_contents (self_value->value),
615 			     TYPE_LENGTH (type),
616 			     gdbarch_byte_order (get_type_arch (type)));
617   else
618     {
619       PyErr_SetString (PyExc_TypeError, _("Attempted truth testing on invalid "
620 					  "gdb.Value type."));
621       return 0;
622     }
623 }
624 
625 /* Implements ~ for value objects.  */
626 static PyObject *
627 valpy_invert (PyObject *self)
628 {
629   struct value *val = NULL;
630   volatile struct gdb_exception except;
631 
632   TRY_CATCH (except, RETURN_MASK_ALL)
633     {
634       val = value_complement (((value_object *) self)->value);
635     }
636   GDB_PY_HANDLE_EXCEPTION (except);
637 
638   return value_to_value_object (val);
639 }
640 
641 /* Implements left shift for value objects.  */
642 static PyObject *
643 valpy_lsh (PyObject *self, PyObject *other)
644 {
645   return valpy_binop (VALPY_LSH, self, other);
646 }
647 
648 /* Implements right shift for value objects.  */
649 static PyObject *
650 valpy_rsh (PyObject *self, PyObject *other)
651 {
652   return valpy_binop (VALPY_RSH, self, other);
653 }
654 
655 /* Implements bitwise and for value objects.  */
656 static PyObject *
657 valpy_and (PyObject *self, PyObject *other)
658 {
659   return valpy_binop (VALPY_BITAND, self, other);
660 }
661 
662 /* Implements bitwise or for value objects.  */
663 static PyObject *
664 valpy_or (PyObject *self, PyObject *other)
665 {
666   return valpy_binop (VALPY_BITOR, self, other);
667 }
668 
669 /* Implements bitwise xor for value objects.  */
670 static PyObject *
671 valpy_xor (PyObject *self, PyObject *other)
672 {
673   return valpy_binop (VALPY_BITXOR, self, other);
674 }
675 
676 /* Implements comparison operations for value objects.  */
677 static PyObject *
678 valpy_richcompare (PyObject *self, PyObject *other, int op)
679 {
680   int result = 0;
681   struct value *value_other;
682   volatile struct gdb_exception except;
683 
684   if (other == Py_None)
685     /* Comparing with None is special.  From what I can tell, in Python
686        None is smaller than anything else.  */
687     switch (op) {
688       case Py_LT:
689       case Py_LE:
690       case Py_EQ:
691 	Py_RETURN_FALSE;
692       case Py_NE:
693       case Py_GT:
694       case Py_GE:
695 	Py_RETURN_TRUE;
696       default:
697 	/* Can't happen.  */
698 	PyErr_SetString (PyExc_NotImplementedError,
699 			 "Invalid operation on gdb.Value.");
700 	return NULL;
701     }
702 
703   TRY_CATCH (except, RETURN_MASK_ALL)
704     {
705       value_other = convert_value_from_python (other);
706       if (value_other == NULL)
707 	{
708 	  result = -1;
709 	  break;
710 	}
711 
712       switch (op) {
713         case Py_LT:
714 	  result = value_less (((value_object *) self)->value, value_other);
715 	  break;
716 	case Py_LE:
717 	  result = value_less (((value_object *) self)->value, value_other)
718 	    || value_equal (((value_object *) self)->value, value_other);
719 	  break;
720 	case Py_EQ:
721 	  result = value_equal (((value_object *) self)->value, value_other);
722 	  break;
723 	case Py_NE:
724 	  result = !value_equal (((value_object *) self)->value, value_other);
725 	  break;
726         case Py_GT:
727 	  result = value_less (value_other, ((value_object *) self)->value);
728 	  break;
729 	case Py_GE:
730 	  result = value_less (value_other, ((value_object *) self)->value)
731 	    || value_equal (((value_object *) self)->value, value_other);
732 	  break;
733 	default:
734 	  /* Can't happen.  */
735 	  PyErr_SetString (PyExc_NotImplementedError,
736 			   "Invalid operation on gdb.Value.");
737 	  result = -1;
738 	  break;
739       }
740     }
741   GDB_PY_HANDLE_EXCEPTION (except);
742 
743   /* In this case, the Python exception has already been set.  */
744   if (result < 0)
745     return NULL;
746 
747   if (result == 1)
748     Py_RETURN_TRUE;
749 
750   Py_RETURN_FALSE;
751 }
752 
753 /* Helper function to determine if a type is "int-like".  */
754 static int
755 is_intlike (struct type *type, int ptr_ok)
756 {
757   CHECK_TYPEDEF (type);
758   return (TYPE_CODE (type) == TYPE_CODE_INT
759 	  || TYPE_CODE (type) == TYPE_CODE_ENUM
760 	  || TYPE_CODE (type) == TYPE_CODE_BOOL
761 	  || TYPE_CODE (type) == TYPE_CODE_CHAR
762 	  || (ptr_ok && TYPE_CODE (type) == TYPE_CODE_PTR));
763 }
764 
765 /* Implements conversion to int.  */
766 static PyObject *
767 valpy_int (PyObject *self)
768 {
769   struct value *value = ((value_object *) self)->value;
770   struct type *type = value_type (value);
771   LONGEST l = 0;
772   volatile struct gdb_exception except;
773 
774   CHECK_TYPEDEF (type);
775   if (!is_intlike (type, 0))
776     {
777       PyErr_SetString (PyExc_RuntimeError, "cannot convert value to int");
778       return NULL;
779     }
780 
781   TRY_CATCH (except, RETURN_MASK_ALL)
782     {
783       l = value_as_long (value);
784     }
785   GDB_PY_HANDLE_EXCEPTION (except);
786 
787 #ifdef HAVE_LONG_LONG		/* Defined by Python.  */
788   /* If we have 'long long', and the value overflows a 'long', use a
789      Python Long; otherwise use a Python Int.  */
790   if (sizeof (l) > sizeof (long) && (l > PyInt_GetMax ()
791 				     || l < (- (LONGEST) PyInt_GetMax ()) - 1))
792     return PyLong_FromLongLong (l);
793 #endif
794   return PyInt_FromLong (l);
795 }
796 
797 /* Implements conversion to long.  */
798 static PyObject *
799 valpy_long (PyObject *self)
800 {
801   struct value *value = ((value_object *) self)->value;
802   struct type *type = value_type (value);
803   LONGEST l = 0;
804   volatile struct gdb_exception except;
805 
806   if (!is_intlike (type, 1))
807     {
808       PyErr_SetString (PyExc_RuntimeError, "cannot convert value to long");
809       return NULL;
810     }
811 
812   TRY_CATCH (except, RETURN_MASK_ALL)
813     {
814       l = value_as_long (value);
815     }
816   GDB_PY_HANDLE_EXCEPTION (except);
817 
818 #ifdef HAVE_LONG_LONG		/* Defined by Python.  */
819   return PyLong_FromLongLong (l);
820 #else
821   return PyLong_FromLong (l);
822 #endif
823 }
824 
825 /* Implements conversion to float.  */
826 static PyObject *
827 valpy_float (PyObject *self)
828 {
829   struct value *value = ((value_object *) self)->value;
830   struct type *type = value_type (value);
831   double d = 0;
832   volatile struct gdb_exception except;
833 
834   CHECK_TYPEDEF (type);
835   if (TYPE_CODE (type) != TYPE_CODE_FLT)
836     {
837       PyErr_SetString (PyExc_RuntimeError, "cannot convert value to float");
838       return NULL;
839     }
840 
841   TRY_CATCH (except, RETURN_MASK_ALL)
842     {
843       d = value_as_double (value);
844     }
845   GDB_PY_HANDLE_EXCEPTION (except);
846 
847   return PyFloat_FromDouble (d);
848 }
849 
850 /* Returns an object for a value which is released from the all_values chain,
851    so its lifetime is not bound to the execution of a command.  */
852 PyObject *
853 value_to_value_object (struct value *val)
854 {
855   value_object *val_obj;
856 
857   val_obj = PyObject_New (value_object, &value_object_type);
858   if (val_obj != NULL)
859     {
860       val_obj->value = val;
861       value_incref (val);
862       val_obj->address = NULL;
863       val_obj->type = NULL;
864       note_value (val_obj);
865     }
866 
867   return (PyObject *) val_obj;
868 }
869 
870 /* Returns a borrowed reference to the struct value corresponding to
871    the given value object.  */
872 struct value *
873 value_object_to_value (PyObject *self)
874 {
875   value_object *real;
876   if (! PyObject_TypeCheck (self, &value_object_type))
877     return NULL;
878   real = (value_object *) self;
879   return real->value;
880 }
881 
882 /* Try to convert a Python value to a gdb value.  If the value cannot
883    be converted, set a Python exception and return NULL.  Returns a
884    reference to a new value on the all_values chain.  */
885 
886 struct value *
887 convert_value_from_python (PyObject *obj)
888 {
889   struct value *value = NULL; /* -Wall */
890   PyObject *target_str, *unicode_str;
891   struct cleanup *old;
892   volatile struct gdb_exception except;
893   int cmp;
894 
895   gdb_assert (obj != NULL);
896 
897   TRY_CATCH (except, RETURN_MASK_ALL)
898     {
899       if (PyBool_Check (obj))
900 	{
901 	  cmp = PyObject_IsTrue (obj);
902 	  if (cmp >= 0)
903 	    value = value_from_longest (builtin_type_pybool, cmp);
904 	}
905       else if (PyInt_Check (obj))
906 	{
907 	  long l = PyInt_AsLong (obj);
908 
909 	  if (! PyErr_Occurred ())
910 	    value = value_from_longest (builtin_type_pyint, l);
911 	}
912       else if (PyLong_Check (obj))
913 	{
914 	  LONGEST l = PyLong_AsLongLong (obj);
915 
916 	  if (! PyErr_Occurred ())
917 	    value = value_from_longest (builtin_type_pylong, l);
918 	}
919       else if (PyFloat_Check (obj))
920 	{
921 	  double d = PyFloat_AsDouble (obj);
922 
923 	  if (! PyErr_Occurred ())
924 	    value = value_from_double (builtin_type_pyfloat, d);
925 	}
926       else if (gdbpy_is_string (obj))
927 	{
928 	  char *s;
929 
930 	  s = python_string_to_target_string (obj);
931 	  if (s != NULL)
932 	    {
933 	      old = make_cleanup (xfree, s);
934 	      value = value_cstring (s, strlen (s), builtin_type_pychar);
935 	      do_cleanups (old);
936 	    }
937 	}
938       else if (PyObject_TypeCheck (obj, &value_object_type))
939 	value = value_copy (((value_object *) obj)->value);
940       else
941 	PyErr_Format (PyExc_TypeError, _("Could not convert Python object: %s"),
942 		      PyString_AsString (PyObject_Str (obj)));
943     }
944   if (except.reason < 0)
945     {
946       PyErr_Format (except.reason == RETURN_QUIT
947 		    ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
948 		    "%s", except.message);
949       return NULL;
950     }
951 
952   return value;
953 }
954 
955 /* Returns value object in the ARGth position in GDB's history.  */
956 PyObject *
957 gdbpy_history (PyObject *self, PyObject *args)
958 {
959   int i;
960   struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
961   volatile struct gdb_exception except;
962 
963   if (!PyArg_ParseTuple (args, "i", &i))
964     return NULL;
965 
966   TRY_CATCH (except, RETURN_MASK_ALL)
967     {
968       res_val = access_value_history (i);
969     }
970   GDB_PY_HANDLE_EXCEPTION (except);
971 
972   return value_to_value_object (res_val);
973 }
974 
975 void
976 gdbpy_initialize_values (void)
977 {
978   if (PyType_Ready (&value_object_type) < 0)
979     return;
980 
981   Py_INCREF (&value_object_type);
982   PyModule_AddObject (gdb_module, "Value", (PyObject *) &value_object_type);
983 
984   values_in_python = NULL;
985 }
986 
987 
988 
989 static PyGetSetDef value_object_getset[] = {
990   { "address", valpy_get_address, NULL, "The address of the value.",
991     NULL },
992   { "is_optimized_out", valpy_get_is_optimized_out, NULL,
993     "Boolean telling whether the value is optimized out (i.e., not available).",
994     NULL },
995   { "type", valpy_get_type, NULL, "Type of the value.", NULL },
996   {NULL}  /* Sentinel */
997 };
998 
999 static PyMethodDef value_object_methods[] = {
1000   { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
1001   { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
1002   { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
1003     "string ([encoding] [, errors] [, length]) -> string\n\
1004 Return Unicode string representation of the value." },
1005   {NULL}  /* Sentinel */
1006 };
1007 
1008 static PyNumberMethods value_object_as_number = {
1009   valpy_add,
1010   valpy_subtract,
1011   valpy_multiply,
1012   valpy_divide,
1013   valpy_remainder,
1014   NULL,			      /* nb_divmod */
1015   valpy_power,		      /* nb_power */
1016   valpy_negative,	      /* nb_negative */
1017   valpy_positive,	      /* nb_positive */
1018   valpy_absolute,	      /* nb_absolute */
1019   valpy_nonzero,	      /* nb_nonzero */
1020   valpy_invert,		      /* nb_invert */
1021   valpy_lsh,		      /* nb_lshift */
1022   valpy_rsh,		      /* nb_rshift */
1023   valpy_and,		      /* nb_and */
1024   valpy_xor,		      /* nb_xor */
1025   valpy_or,		      /* nb_or */
1026   NULL,			      /* nb_coerce */
1027   valpy_int,		      /* nb_int */
1028   valpy_long,		      /* nb_long */
1029   valpy_float,		      /* nb_float */
1030   NULL,			      /* nb_oct */
1031   NULL			      /* nb_hex */
1032 };
1033 
1034 static PyMappingMethods value_object_as_mapping = {
1035   valpy_length,
1036   valpy_getitem,
1037   valpy_setitem
1038 };
1039 
1040 PyTypeObject value_object_type = {
1041   PyObject_HEAD_INIT (NULL)
1042   0,				  /*ob_size*/
1043   "gdb.Value",			  /*tp_name*/
1044   sizeof (value_object),	  /*tp_basicsize*/
1045   0,				  /*tp_itemsize*/
1046   valpy_dealloc,		  /*tp_dealloc*/
1047   0,				  /*tp_print*/
1048   0,				  /*tp_getattr*/
1049   0,				  /*tp_setattr*/
1050   0,				  /*tp_compare*/
1051   0,				  /*tp_repr*/
1052   &value_object_as_number,	  /*tp_as_number*/
1053   0,				  /*tp_as_sequence*/
1054   &value_object_as_mapping,	  /*tp_as_mapping*/
1055   0,				  /*tp_hash */
1056   0,				  /*tp_call*/
1057   valpy_str,			  /*tp_str*/
1058   0,				  /*tp_getattro*/
1059   0,				  /*tp_setattro*/
1060   0,				  /*tp_as_buffer*/
1061   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES,	/*tp_flags*/
1062   "GDB value object",		  /* tp_doc */
1063   0,				  /* tp_traverse */
1064   0,				  /* tp_clear */
1065   valpy_richcompare,		  /* tp_richcompare */
1066   0,				  /* tp_weaklistoffset */
1067   0,				  /* tp_iter */
1068   0,				  /* tp_iternext */
1069   value_object_methods,		  /* tp_methods */
1070   0,				  /* tp_members */
1071   value_object_getset,		  /* tp_getset */
1072   0,				  /* tp_base */
1073   0,				  /* tp_dict */
1074   0,				  /* tp_descr_get */
1075   0,				  /* tp_descr_set */
1076   0,				  /* tp_dictoffset */
1077   0,				  /* tp_init */
1078   0,				  /* tp_alloc */
1079   valpy_new			  /* tp_new */
1080 };
1081 
1082 #else
1083 
1084 void
1085 preserve_python_values (struct objfile *objfile, htab_t copied_types)
1086 {
1087   /* Nothing.  */
1088 }
1089 
1090 #endif /* HAVE_PYTHON */
1091