From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32132 invoked by alias); 15 Oct 2002 03:09:31 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 32107 invoked from network); 15 Oct 2002 03:09:29 -0000 Received: from unknown (63.119.183.65) by sources.redhat.com with QMTP; 15 Oct 2002 03:09:29 -0000 Received: (qmail 11649 invoked from network); 15 Oct 2002 02:09:39 -0000 Received: from cpe-24-221-209-215.co.sprintbbd.net (HELO doc.com) (24.221.209.215) by external1 with SMTP; 15 Oct 2002 02:09:39 -0000 Message-ID: <3DAB86E8.2040704@doc.com> Date: Mon, 14 Oct 2002 20:09:00 -0000 From: Adam Fedor Organization: Digital Optics Corp. User-Agent: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.0.0) Gecko/20020610 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Jim Blandy CC: Michael Snyder , gdb-patches@sources.redhat.com Subject: Re: [PATCH] Objective-C language support. References: <3D889A97.90202@doc.com> <3DA37290.74A48BF4@redhat.com> Content-Type: multipart/mixed; boundary="------------060500090201080302010705" X-SW-Source: 2002-10/txt/msg00270.txt.bz2 This is a multi-part message in MIME format. --------------060500090201080302010705 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 928 Jim Blandy wrote: > The function stabsread_objc_colon should be static to stabsread.c, no? > If that's so, then it should be renamed to something like > `find_name_end', with a comment above the strchr ('[') != 0 case > explaining its relevance to Objective-C. Since this function gets > called on every symbol, it's not an Objective-C specific function; > only part of it is. > > The code needs a comment. Most of GDB's maintainers don't know > Objective-C, so it would be helpful just to say something like, > "Objective-C symbols can have names like -[foo:bar:baz]:skun Updated patch: 2002-10-14 Adam Fedor * stabsread.c (find_name_end): New function. (define_symbol): Use it. -- Adam Fedor, Digital Optics Corp. | I'm glad I hate spinach, because http://www.doc.com | if I didn't, I'd eat it, and you | know how I hate the stuff. --------------060500090201080302010705 Content-Type: text/plain; name="objc5.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="objc5.patch" Content-length: 2092 Index: stabsread.c =================================================================== RCS file: /cvs/src/src/gdb/stabsread.c,v retrieving revision 1.42 diff -u -p -r1.42 stabsread.c --- stabsread.c 11 Oct 2002 14:02:38 -0000 1.42 +++ stabsread.c 15 Oct 2002 03:06:03 -0000 @@ -169,6 +169,8 @@ static int read_cfront_member_functions (struct field_info *, char **, struct type *, struct objfile *); +static char *find_name_end (char *name); + /* end new functions added for cfront support */ static void @@ -1271,7 +1273,7 @@ define_symbol (CORE_ADDR valu, char *str struct objfile *objfile) { register struct symbol *sym; - char *p = (char *) strchr (string, ':'); + char *p = (char *) find_name_end (string); int deftype; int synonym = 0; register int i; @@ -2004,7 +2006,8 @@ define_symbol (CORE_ADDR valu, char *str a typedef for "foo". Unfortunately, cfront never makes the typedef when translating C++ into C. We make the typedef here so that "ptype foo" works as expected for cfront translated code. */ - else if (current_subfile->language == language_cplus) + else if ((current_subfile->language == language_cplus) + || (current_subfile->language == language_objc)) synonym = 1; SYMBOL_TYPE (sym) = read_type (&p, objfile); @@ -5613,6 +5616,32 @@ finish_global_stabs (struct objfile *obj patch_block_stabs (global_symbols, global_stabs, objfile); xfree (global_stabs); global_stabs = NULL; + } +} + +static char * +find_name_end (char *name) +{ + char *s = name; + /* Find the end of the name, deliminated by a ':', but don't match + ObjC symbols which look like -[Foo bar::]:bla. */ + if (s[0] == '-' || *s == '+') + { + /* Must be an ObjC method symbol. */ + if (s[1] != '[') + { + error ("invalid symbol name \"%s\"", name); + } + s = strchr (s, ']'); + if (s == NULL) + { + error ("invalid symbol name \"%s\"", name); + } + return strchr (s, ':'); + } + else + { + return strchr (s, ':'); } } --------------060500090201080302010705--