Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Elena Zannoni <ezannoni@redhat.com>
To: Adam Fedor <fedor@doc.com>
Cc: GDB Patches <gdb-patches@sources.redhat.com>
Subject: Re: [PING/RFA]: Search for Objc Symbols
Date: Fri, 09 May 2003 17:03:00 -0000	[thread overview]
Message-ID: <16059.57494.905714.554627@localhost.redhat.com> (raw)
In-Reply-To: <3EA9FF5A.2040209@doc.com>


Adam Fedor writes:
 > I forgot about this one:
 > 
 > http://sources.redhat.com/ml/gdb-patches/2003-01/msg00441.html
 > 
 > It doesn't apprear that this was ever formally approved. I've attached 
 > the patch again since there have been some minor changes since then in 
 > order to keep up with the times...
 > 
 > 


see below...

 > 2003-04-25  Adam Fedor  <fedor@gnu.org>
 > 
 > 	* symtab.c (make_symbol_completion_list): Look for ObjC
 > 	symbols.
 > 	* Makefile.in (symtab.o): Update dependencies.
 > 
 > Index: Makefile.in
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/Makefile.in,v
 > retrieving revision 1.367
 > diff -u -p -r1.367 Makefile.in
 > --- Makefile.in	26 Apr 2003 01:57:28 -0000	1.367
 > +++ Makefile.in	26 Apr 2003 03:12:16 -0000
 > @@ -2275,7 +2275,7 @@ symtab.o: symtab.c $(defs_h) $(symtab_h)
 >  	$(gdbcmd_h) $(call_cmds_h) $(gdb_regex_h) $(expression_h) \
 >  	$(language_h) $(demangle_h) $(inferior_h) $(linespec_h) \
 >  	$(filenames_h) $(gdb_obstack_h) $(gdb_string_h) $(gdb_stat_h) \
 > -	$(cp_abi_h) $(source_h) $(block_h)
 > +	$(cp_abi_h) $(source_h) $(block_h) $(objc_lang_h)
 >  target.o: target.c $(defs_h) $(gdb_string_h) $(target_h) $(gdbcmd_h) \
 >  	$(symtab_h) $(inferior_h) $(bfd_h) $(symfile_h) $(objfiles_h) \
 >  	$(gdb_wait_h) $(dcache_h) $(regcache_h)
 > Index: symtab.c
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/symtab.c,v
 > retrieving revision 1.101
 > diff -u -p -r1.101 symtab.c
 > --- symtab.c	14 Apr 2003 19:56:32 -0000	1.101
 > +++ symtab.c	26 Apr 2003 03:12:21 -0000
 > @@ -40,6 +40,7 @@
 >  #include "linespec.h"
 >  #include "source.h"
 >  #include "filenames.h"		/* for FILENAME_CMP */
 > +#include "objc-lang.h"
 >  
 >  #include "hashtab.h"
 >  
 > @@ -3527,10 +3541,69 @@ make_symbol_completion_list (char *text,
 >       anything that isn't a text symbol (everything else will be
 >       handled by the psymtab code above).  */
 >  
 > +  /* ObjC: In case we are completing on a selector, look thru the msymbols
 > +     again and feed all the selectors into the mill.  */
 > +
 >    ALL_MSYMBOLS (objfile, msymbol)
 >    {
 > +    static char *tmp = NULL;
 > +    static unsigned int tmplen = 0;
 > +    
 > +    char *method, *category, *selector;
 > +    char *tmp2 = NULL;
 > +    
 >      QUIT;
 > -    COMPLETION_LIST_ADD_SYMBOL (msymbol, sym_text, sym_text_len, text, word);
 > +    
 > +    method = SYMBOL_DEMANGLED_NAME (msymbol);
 > +    if (method == NULL)
 > +      method = SYMBOL_LINKAGE_NAME (msymbol);
 > +    if (method == NULL)
 > +      continue;
 > +
 > +    /* Add the minimal symbol no matter what.  */
 > +    completion_list_add_name (method, sym_text, sym_text_len, text, word);
 > +

this should not be needed, I think, i.e. the former macro invocation
should still be ok.

 > +    /* Is it a method?  */
 > +    if ((method[0] != '-') && (method[0] != '+'))
 > +      continue;
 > +    if (sym_text[0] == '[')
 > +      /* Complete on shortened method method.  */
 > +      completion_list_add_name (method + 1, sym_text, sym_text_len, text, word);
 > +    
 > +    while ((strlen (method) + 1) >= tmplen)
 > +      {
 > +	if (tmplen == 0)
 > +	  tmplen = 1024;
 > +	else
 > +	  tmplen *= 2;
 > +	tmp = xrealloc (tmp, tmplen);
 > +      }
 > +    selector = strchr (method, ' ');
 > +    if (selector != NULL)
 > +      selector++;
 > +    
 > +    category = strchr (method, '(');
 > +    
 > +    if ((category != NULL) && (selector != NULL))
 > +      {
 > +	memcpy (tmp, method, (category - method));
 > +	tmp[category - method] = ' ';
 > +	memcpy (tmp + (category - method) + 1, selector, strlen (selector) + 1);
 > +	completion_list_add_name (tmp, sym_text, sym_text_len, text, word);
 > +	if (sym_text[0] == '[')
 > +	  completion_list_add_name (tmp + 1, sym_text, sym_text_len, text, word);
 > +      }
 > +    
 > +    if (selector != NULL)
 > +      {
 > +	/* Complete on selector only.  */
 > +	strcpy (tmp, selector);
 > +	tmp2 = strchr (tmp, ']');
 > +	if (tmp2 != NULL)
 > +	  *tmp2 = '\0';
 > +	
 > +	completion_list_add_name (tmp, sym_text, sym_text_len, text, word);
 > +      }

Now that I look at this again, I think the code you are adding above could
be easily split up into an objc specific function. Could you do that?

 >    }
 >  
 >    /* Search upwards from currently selected frame (so that we can
 > @@ -3548,6 +3621,7 @@ make_symbol_completion_list (char *text,
 >  
 >        ALL_BLOCK_SYMBOLS (b, i, sym)
 >  	{
 > +	  QUIT;
 >  	  COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
 >  	  if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
 >  	    {


There is no changelog entry for this one below.

 > @@ -3653,15 +3727,45 @@ make_file_symbol_completion_list (char *
 >        }
 >      else
 >        {
 > -	/* It is not a quoted string.  Break it based on the characters
 > -	   which are in symbols.  */
 > -	while (p > text)
 > -	  {
 > -	    if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
 > -	      --p;
 > -	    else
 > -	      break;
 > -	  }
 > +        /* It is not a quoted string.  Break it based on the characters
 > +           which are in symbols.  */
 > +        for (; p > text; --p)
 > +          {
 > +            if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
 > +              continue;
 > +            else
 > +              {
 > +                if ((current_language->la_language == language_objc))
 > +		  {
 > +                  if (p[-1] == ':')     /* might be part of a method name */
 > +                    continue;
 > +                  else if (p[-1] == '[' && (p[-2] == '-' || p[-2] == '+'))
 > +                    p -= 2;             /* beginning of a method name */
 > +                  else if (p[-1] == ' ' || p[-1] == '(' || p[-1] == ')')
 > +                    {                   /* might be part of a method name */
 > +                      char *t = p;
 > +
 > +                      /* Seeing a ' ' or a '(' is not conclusive evidence
 > +                         that we are in the middle of a method name.  However,
 > +                         finding "-[" or "+[" should be pretty un-ambiguous.
 > +                         Unfortunately we have to find it now to decide.  */
 > +
 > +                      while (t > text)
 > +                        if (isalnum (t[-1]) || t[-1] == '_' ||
 > +                            t[-1] == ' '    || t[-1] == ':' ||
 > +                            t[-1] == '('    || t[-1] == ')')
 > +                          --t;
 > +                        else
 > +                          break;
 > +
 > +                      if (t[-1] == '[' && (t[-2] == '-' || t[-2] == '+'))
 > +                        p = t - 2;      /* method name detected */
 > +                      /* else we leave with p unchanged */
 > +                    }
 > +		  }
 > +                break;
 > +              }
 > +          }

Same here, could this be made into an objc specific function?

 >  	sym_text = p;
 >        }
 >    }


elena


  reply	other threads:[~2003-05-09 17:03 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-27  1:13 Adam Fedor
2003-05-09 17:03 ` Elena Zannoni [this message]
2003-05-11  3:31   ` Adam Fedor
2003-05-11 18:15     ` David Carlton
2003-05-12 18:57     ` Elena Zannoni
2003-05-12 21:02 Adam Fedor
     [not found] ` <3EC45470.9000704@redhat.com>
2003-05-16  4:16   ` Daniel Jacobowitz

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=16059.57494.905714.554627@localhost.redhat.com \
    --to=ezannoni@redhat.com \
    --cc=fedor@doc.com \
    --cc=gdb-patches@sources.redhat.com \
    /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: link
Be 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