gdb/
authorThiago Jung Bauermann <bauerman@br.ibm.com>
Thu, 26 Mar 2009 20:58:11 +0000 (20:58 +0000)
committerThiago Jung Bauermann <bauerman@br.ibm.com>
Thu, 26 Mar 2009 20:58:11 +0000 (20:58 +0000)
Add gdb.Value.is_optimized_out attribute.
* python/python-value.c (valpy_get_is_optimized_out): New
function.
(value_object_getset): New variable.
(value_object_type): Initialize tp_getset element.

gdb/doc/
* gdb.texinfo (Values From Inferior): Document is_optimized_out
attribute.

gdb/testsuite/
* gdb.python/python-value.exp (test_value_in_inferior): Test
gdb.Value.is_optimized_out attribute.

gdb/ChangeLog
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/python/python-value.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/python-value.exp

index fd87425469b3220e3929a121d859511cb749e482..055cc9697a98b3e5eae1ce2d39240893541500cb 100644 (file)
@@ -1,3 +1,11 @@
+2009-03-26  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+       Add gdb.Value.is_optimized_out attribute.
+       * python/python-value.c (valpy_get_is_optimized_out): New
+       function.
+       (value_object_getset): New variable.
+       (value_object_type): Initialize tp_getset element.
+
 2009-03-26  Joel Brobecker  <brobecker@adacore.com>
 
        Recognize missing DW_AT_location as <value optimized out>.
index 2c4b291a5b37b5af2f93887190c3186f22c08426..beca8460823de41ef9d11d2a1efa9e2d525e5c19 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-26  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+       * gdb.texinfo (Values From Inferior): Document is_optimized_out
+       attribute.
+
 2009-03-25  Pedro Alves  <pedro@codesourcery.com>
 
        * observer.texi (thread_exit): Add "silent" parameter.
index 134919d723645b1373caa4323c38a4434f4461dd..8db567964f26bb51af9b39b7c98351953bbe0f0a 100644 (file)
@@ -18325,13 +18325,23 @@ bar = some_val['foo']
 
 Again, @code{bar} will also be a @code{gdb.Value} object.
 
-For pointer data types, @code{gdb.Value} provides a method for
-dereferencing the pointer to obtain the object it points to.
+The following attribute is provided:
 
+@table @code
+@cindex optimized out value in Python
+@defmethod Value is_optimized_out
+This read-only boolean attribute is true if the compiler optimized out
+this value, thus it is not available for fetching from the inferior.
+@end defmethod
+@end table
+
+The following methods are provided:
+
+@table @code
 @defmethod Value dereference
-This method returns a new @code{gdb.Value} object whose contents is
-the object pointed to by the pointer.  For example, if @code{foo} is
-a C pointer to an @code{int}, declared in your C program as
+For pointer data types, this method returns a new @code{gdb.Value} object
+whose contents is the object pointed to by the pointer.  For example, if
+@code{foo} is a C pointer to an @code{int}, declared in your C program as
 
 @smallexample
 int *foo;
@@ -18375,6 +18385,7 @@ will be used, if the current language is able to supply one.
 The optional @var{errors} argument is the same as the corresponding
 argument to Python's @code{string.decode} method.
 @end defmethod
+@end table
 
 @node Commands In Python
 @subsubsection Commands In Python
index cbc481fa9826e8736bc494d8895c622b63265a64..bf07dc43d1901c4e0f7bcbfb2eac8ecf663b5a8d 100644 (file)
@@ -272,6 +272,18 @@ valpy_str (PyObject *self)
   return result;
 }
 
+/* Implements gdb.Value.is_optimized_out.  */
+static PyObject *
+valpy_get_is_optimized_out (PyObject *self, void *closure)
+{
+  struct value *value = ((value_object *) self)->value;
+
+  if (value_optimized_out (value))
+    Py_RETURN_TRUE;
+
+  Py_RETURN_FALSE;
+}
+
 enum valpy_opcode
 {
   VALPY_ADD,
@@ -825,6 +837,13 @@ gdbpy_initialize_values (void)
   values_in_python = NULL;
 }
 
+static PyGetSetDef value_object_getset[] = {
+  { "is_optimized_out", valpy_get_is_optimized_out, NULL,
+    "Boolean telling whether the value is optimized out (i.e., not available).",
+    NULL },
+  {NULL}  /* Sentinel */
+};
+
 static PyMethodDef value_object_methods[] = {
   { "address", valpy_address, METH_NOARGS, "Return the address of the value." },
   { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
@@ -897,7 +916,7 @@ PyTypeObject value_object_type = {
   0,                             /* tp_iternext */
   value_object_methods,                  /* tp_methods */
   0,                             /* tp_members */
-  0,                             /* tp_getset */
+  value_object_getset,           /* tp_getset */
   0,                             /* tp_base */
   0,                             /* tp_dict */
   0,                             /* tp_descr_get */
index 7f68b9212dbf9a46ab46225bab9d4e4a3f921948..599ba76fd716b26754bac402208e431d128fed03 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-26  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+       * gdb.python/python-value.exp (test_value_in_inferior): Test
+       gdb.Value.is_optimized_out attribute.
+
 2009-03-26  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * gdb.dwarf2/dw2-noloc-main.c: New file.
index 8f5e0ab53fd8dfa69d9d7838e9519673b37d196f..2d1ece6cec7b50b8f455d89e99547a2cfcf2598f 100644 (file)
@@ -225,6 +225,9 @@ proc test_value_in_inferior {} {
 
   # Check that the dereferenced value is sane
   gdb_test "python print arg0" "0x.*$testfile\"" "verify dereferenced value"
+
+  # Smoke-test is_optimized_out attribute
+  gdb_test "python print 'result =', arg0.is_optimized_out" "= False" "Test is_optimized_out attribute"
 }