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
next prev parent 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