From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17527 invoked by alias); 4 Jan 2003 02:53:04 -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 17520 invoked from network); 4 Jan 2003 02:53:03 -0000 Received: from unknown (63.119.183.65) by 209.249.29.67 with QMTP; 4 Jan 2003 02:53:03 -0000 Received: (qmail 28020 invoked from network); 4 Jan 2003 02:51:04 -0000 Received: from cpe-24-221-209-215.co.sprintbbd.net (HELO doc.com) (24.221.209.215) by external1 with SMTP; 4 Jan 2003 02:51:04 -0000 Message-ID: <3E164C7B.2070003@doc.com> Date: Sat, 04 Jan 2003 02:53:00 -0000 From: Adam Fedor User-Agent: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.1) Gecko/20020905 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Michael Snyder CC: GDB Patches Subject: Re: [RFA] Add ObjC recognition to linespec.c [5/5] References: <3E161D25.7070106@doc.com> <3E1639BC.42723FC6@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2003-01/txt/msg00138.txt.bz2 Michael Snyder wrote: > Adam Fedor wrote: > >>I know that linespec has been changing a lot lately, and I'm not sure if >>it's finished changing yet. So this is my attempt to insert ObjC >>handling into linespec. Actually Klee Dienes really did most of these >>changes, and I probably bastardized those as well... >> >> ------------------------------------------------------------------------------- >>2003-01-03 Adam Fedor >> >> * linespec.c (decode_objc): New function to decode ObjC calls >> (decode_line_1): Check for ObjC calls (using decode_objc) >> >>Index: linespec.c >>=================================================================== >>RCS file: /cvs/src/src/gdb/linespec.c,v >>retrieving revision 1.32 >>diff -u -p -r1.32 linespec.c >>--- linespec.c 19 Dec 2002 18:56:14 -0000 1.32 >>+++ linespec.c 3 Jan 2003 22:56:54 -0000 >>@@ -37,6 +37,11 @@ >> >> extern char *operator_chars (char *, char **); >> >>+/* From objc-lang.h. Included here to avoid conflict with other prototypes */ >>+extern char *find_imps (struct symtab *symtab, struct block *block, >>+ char *method, struct symbol **syms, unsigned int *nsym, >>+ unsigned int *ndebug); >>+ > > > I presume this will go away when you can include objc-lang.h. > I couldn't include objc-lang.h because linespec.c defines a function 'find_methods' which objc-lang also defines. But actually I just realized I could just take it out of objc-lang.h, since it's not used anywhere else other than objc-lang.c > >> /* Prototypes for local functions */ >> >> static void initialize_defaults (struct symtab **default_symtab, >>@@ -48,6 +53,12 @@ static struct symtabs_and_lines decode_i >> >> static char *locate_first_half (char **argptr, int *is_quote_enclosed); >> >>+static struct symtabs_and_lines decode_objc (char **argptr, >>+ int funfirstline, >>+ struct symtab *file_symtab, >>+ char ***canonical, >>+ char *saved_arg); >>+ > > > I like this -- presumably it keeps a lot of the new code > out of poor old decrepit decode_line_1. > > >> static struct symtabs_and_lines decode_compound (char **argptr, >> int funfirstline, >> char ***canonical, >>@@ -568,6 +579,7 @@ decode_line_1 (char **argptr, int funfir >> int is_quoted; >> /* Is part of *ARGPTR is enclosed in double quotes? */ >> int is_quote_enclosed; >>+ int is_objc_method = 0; >> char *saved_arg = *argptr; >> >> init_sal (&val); /* initialize to zeroes */ >>@@ -596,6 +608,24 @@ decode_line_1 (char **argptr, int funfir >> >> p = locate_first_half (argptr, &is_quote_enclosed); >> >>+ /* Check if this is an Objective-C method. */ >>+ if (*p && (p[0] == ':') && (strchr ("+-", p[1]) != NULL) >>+ && (p[2] == '[')) >>+ { >>+ is_objc_method = 1; >>+ paren_pointer = NULL; /* Probably just a category name. Ignore it */ >>+ } >>+ >>+ /* Is it an Objective-C selector? */ >>+ >>+ { >>+ struct symtabs_and_lines values; >>+ values = decode_objc (argptr, funfirstline, NULL, >>+ canonical, saved_arg); >>+ if (values.sals != NULL) >>+ return values; >>+ } > > > Was this meant to be an if? It seems to be a naked block. > I'd feel better if there was an if around it, eg. is there > a simple way to test for a selector name? Do I remember > that they begin with a unique prefix such as '@'? > > No. Because the user can do things like 'break init' or 'break isAnImage', and this will determine that these are really Objective-C methods and not regular C functions. It's really just a way to keep the variable local to where it is really used. >>+ >> /* Does it look like there actually were two parts? */ >> >> if ((p[0] == ':' || p[0] == '.') && paren_pointer == NULL) >>@@ -669,13 +699,21 @@ decode_line_1 (char **argptr, int funfir >> Find the next token (everything up to end or next whitespace). */ >> >> if (**argptr == '$') /* May be a convenience variable */ >>- p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1)); /* One or two $ chars possible */ >>+ { >>+ /* One or two $ chars possible */ >>+ p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1)); >>+ } >> else if (is_quoted) >> { >> p = skip_quoted (*argptr); >> if (p[-1] != '\'') >> error ("Unmatched single quote."); >> } >>+ else if (is_objc_method) >>+ { >>+ /* allow word separators in method names for Obj-C */ >>+ p = skip_quoted_chars (*argptr, NULL, ""); >>+ } > > > OK, except didn't we decide that "skip_quoted_chars" needs a > better name? One that identifies it with objc? > We made it more generic. It's now just like skip_quoted, except that you can pass the character sets that are to be used (in fact, skip_quoted is now defined in terms of skip_quoted_chars).