public inbox for archer-commits@sourceware.org help / color / mirror / Atom feed
From: ppluzhnikov@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] archer-tromey-python: 2008-11-06 Paul Pluzhnikov <ppluzhnikov@google.com> Date: Fri, 07 Nov 2008 00:28:00 -0000 [thread overview] Message-ID: <20081107002811.11752.qmail@sourceware.org> (raw) 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 <ppluzhnikov@google.com> Date: Thu Nov 6 16:27:39 2008 -0800 2008-11-06 Paul Pluzhnikov <ppluzhnikov@google.com> * 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 <ppluzhnikov@google.com> + + * 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 <tromey@redhat.com> * python/python-type.c (pyty_type_object) <owned>: 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.
next reply other threads:[~2008-11-07 0:28 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-11-07 0:28 ppluzhnikov [this message] 2008-11-07 18:05 ppluzhnikov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20081107002811.11752.qmail@sourceware.org \ --to=ppluzhnikov@sourceware.org \ --cc=archer-commits@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).