From 702c27113693b383728d0b423f58389544a80614 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 23 Aug 2010 20:21:28 +0000 Subject: [PATCH] gdb PR python/11915: * python/py-type.c (typy_array): New function. (type_object_methods): Add "array". gdb/doc PR python/11915: * gdb.texinfo (Types In Python): Document array method. gdb/testsuite PR python/11915: * gdb.python/py-type.exp (test_fields): Add tests for array. --- gdb/ChangeLog | 6 +++++ gdb/doc/ChangeLog | 5 ++++ gdb/doc/gdb.texinfo | 9 +++++++ gdb/python/py-type.c | 51 ++++++++++++++++++++++++++++++++++++ gdb/testsuite/ChangeLog | 5 ++++ gdb/testsuite/gdb.python/py-type.exp | 5 ++++ 6 files changed, 81 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e74be97..9aaa486 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-08-23 Tom Tromey + + PR python/11915: + * python/py-type.c (typy_array): New function. + (type_object_methods): Add "array". + 2010-08-20 Pedro Alves * python/python.c: Include "serial.h". diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index f5ae128..82e73e5 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2010-08-23 Tom Tromey + + PR python/11915: + * gdb.texinfo (Types In Python): Document array method. + 2010-08-18 Thiago Jung Bauermann * gdb.texinfo (PowerPC Embedded): Mention support for the DVC register. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index f493d59..d1eba6f 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -20938,6 +20938,15 @@ but it can be @code{None} in some situations. @end table @end defmethod +@defmethod Type array @var{n1} @r{[}@var{n2}@r{]} +Return a new @code{gdb.Type} object which represents an array of this +type. If one argument is given, it is the inclusive upper bound of +the array; in this case the lower bound is zero. If two arguments are +given, the first argument is the lower bound of the array, and the +second argument is the upper bound of the array. An array's length +must not be negative, but the bounds can be. +@end defmethod + @defmethod Type const Return a new @code{gdb.Type} object which represents a @code{const}-qualified variant of this type. diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index 529f301..ea6c8e5 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -262,6 +262,54 @@ typy_strip_typedefs (PyObject *self, PyObject *args) return type_to_type_object (check_typedef (type)); } +/* Return an array type. */ + +static PyObject * +typy_array (PyObject *self, PyObject *args) +{ + int n1, n2; + PyObject *n2_obj = NULL; + struct type *array = NULL; + struct type *type = ((type_object *) self)->type; + volatile struct gdb_exception except; + + if (! PyArg_ParseTuple (args, "i|O", &n1, &n2_obj)) + return NULL; + + if (n2_obj) + { + if (!PyInt_Check (n2_obj)) + { + PyErr_SetString (PyExc_RuntimeError, + _("Array bound must be an integer")); + return NULL; + } + n2 = (int) PyInt_AsLong (n2_obj); + if (PyErr_Occurred ()) + return NULL; + } + else + { + n2 = n1; + n1 = 0; + } + + if (n2 < n1) + { + PyErr_SetString (PyExc_ValueError, + _("Array length must not be negative")); + return NULL; + } + + TRY_CATCH (except, RETURN_MASK_ALL) + { + array = lookup_array_range_type (type, n1, n2); + } + GDB_PY_HANDLE_EXCEPTION (except); + + return type_to_type_object (array); +} + /* Return a Type object which represents a pointer to SELF. */ static PyObject * typy_pointer (PyObject *self, PyObject *args) @@ -836,6 +884,9 @@ static PyGetSetDef type_object_getset[] = static PyMethodDef type_object_methods[] = { + { "array", typy_array, METH_VARARGS, + "array (N) -> Type\n\ +Return a type which represents an array of N objects of this type." }, { "const", typy_const, METH_NOARGS, "const () -> Type\n\ Return a const variant of this type." }, diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 90c8f7a..47fe8d1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-08-23 Tom Tromey + + PR python/11915: + * gdb.python/py-type.exp (test_fields): Add tests for array. + 2010-08-23 Keith Seitz * gdb.dwarf2/dw2-double-set-die-type.S: DIE 0x51f does not diff --git a/gdb/testsuite/gdb.python/py-type.exp b/gdb/testsuite/gdb.python/py-type.exp index 6e5bd0e..095711f 100644 --- a/gdb/testsuite/gdb.python/py-type.exp +++ b/gdb/testsuite/gdb.python/py-type.exp @@ -97,6 +97,11 @@ proc test_fields {lang} { gdb_test "python fields = ar.type.fields()" gdb_test "python print len(fields)" "1" "Check the number of fields" gdb_test "python print fields\[0\].type" "" "Check array field type" + + gdb_test "python print ar\[0\].cast(ar\[0\].type.array(1))" \ + ".1, 2." "cast to array with one argument" + gdb_test "python print ar\[0\].cast(ar\[0\].type.array(0, 1))" \ + ".1, 2." "cast to array with two arguments" } proc test_base_class {} { -- 2.7.4