From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11870 invoked by alias); 7 Nov 2008 00:28:12 -0000 Mailing-List: contact archer-commits-help@sourceware.org; run by ezmlm Sender: Precedence: bulk List-Post: List-Help: List-Subscribe: Received: (qmail 11772 invoked by uid 9766); 7 Nov 2008 00:28:11 -0000 Date: Fri, 07 Nov 2008 00:28:00 -0000 Message-ID: <20081107002811.11752.qmail@sourceware.org> From: ppluzhnikov@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] archer-tromey-python: 2008-11-06 Paul Pluzhnikov X-Git-Refname: refs/heads/archer-tromey-python X-Git-Reftype: branch X-Git-Oldrev: 3c4a12486daf891d58920ad7f97ab6f78b40c11e X-Git-Newrev: aac1baf0b0f00a2c3580248d7532018be33b53d4 X-SW-Source: 2008-q4/txt/msg00077.txt.bz2 List-Id: The branch, archer-tromey-python has been updated via aac1baf0b0f00a2c3580248d7532018be33b53d4 (commit) from 3c4a12486daf891d58920ad7f97ab6f78b40c11e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit aac1baf0b0f00a2c3580248d7532018be33b53d4 Author: Paul Pluzhnikov Date: Thu Nov 6 16:27:39 2008 -0800 2008-11-06 Paul Pluzhnikov * python/python-type.c (typy_lookup_type): New fn. Handle const and volatile qualified types, pointers and references. * python/python-type.c (typy_template_argument): Call it. ----------------------------------------------------------------------- Summary of changes: gdb/ChangeLog | 6 ++++ gdb/python/python-type.c | 70 +++++++++++++++++++++++++++++----------------- 2 files changed, 50 insertions(+), 26 deletions(-) First 500 lines of diff: diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8e34945..013f3a7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2008-11-06 Paul Pluzhnikov + + * python/python-type.c (typy_lookup_type): New fn. + Handle const and volatile qualified types, pointers and references. + * python/python-type.c (typy_template_argument): Call it. + 2008-11-06 Tom Tromey * python/python-type.c (pyty_type_object) : New field. diff --git a/gdb/python/python-type.c b/gdb/python/python-type.c index 1d27714..5162986 100644 --- a/gdb/python/python-type.c +++ b/gdb/python/python-type.c @@ -128,6 +128,48 @@ typy_lookup_typename (char *type_name, struct block *block) return type; } +static struct type * +typy_lookup_type (struct demangle_component *demangled, + struct block *block) +{ + struct type *type; + char *type_name; + + if (demangled->type == DEMANGLE_COMPONENT_POINTER + || demangled->type == DEMANGLE_COMPONENT_REFERENCE + || demangled->type == DEMANGLE_COMPONENT_CONST + || demangled->type == DEMANGLE_COMPONENT_VOLATILE) + { + type = typy_lookup_type (demangled->u.s_binary.left, block); + if (! type) + return NULL; + } + switch (demangled->type) + { + case DEMANGLE_COMPONENT_REFERENCE: + return lookup_reference_type (type); + case DEMANGLE_COMPONENT_POINTER: + return lookup_pointer_type (type); + case DEMANGLE_COMPONENT_CONST: + return make_cv_type (1, 0, type, NULL); + case DEMANGLE_COMPONENT_VOLATILE: + return make_cv_type (0, 1, type, NULL); + } + + type_name = cp_comp_to_string (demangled, 10); + type = typy_lookup_typename (type_name, block); + if (! type) + { + PyErr_Format (PyExc_RuntimeError, "no such type named %s", + type_name); + xfree (type_name); + return NULL; + } + xfree (type_name); + + return type; +} + static PyObject * typy_template_argument (PyObject *self, PyObject *args) { @@ -135,7 +177,6 @@ typy_template_argument (PyObject *self, PyObject *args) struct type *type = ((type_object *) self)->type; struct demangle_component *demangled; const char *err; - char *type_name; struct type *argtype; struct block *block = NULL; PyObject *block_obj = NULL; @@ -196,32 +237,9 @@ typy_template_argument (PyObject *self, PyObject *args) return NULL; } - /* Count pointers and apply later, because lookup_typename does not - understand '*'. FIXME: should handle references as well. Really - we should have a generic cp_comp_to_type. */ - demangled = demangled->u.s_binary.left; - n_pointers = 0; - while (demangled->type == DEMANGLE_COMPONENT_POINTER) - { - ++n_pointers; - demangled = demangled->u.s_binary.left; - } - - /* FIXME: if argument is a value, we should DTRT. */ - type_name = cp_comp_to_string (demangled, 10); - - argtype = typy_lookup_typename (type_name, block); + argtype = typy_lookup_type (demangled->u.s_binary.left, block); if (! argtype) - { - PyErr_Format (PyExc_RuntimeError, "no such type named %s", - type_name); - xfree (type_name); - return NULL; - } - xfree (type_name); - - while (n_pointers--) - argtype = lookup_pointer_type (argtype); + return NULL; return type_to_type_object (argtype); } hooks/post-receive -- Repository for Project Archer.