* ada-lang.c: #include "vec.h".
(struct string_vector, new_string_vector, string_vector_append): Delete. (char_ptr): New typedef. (DEF_VEC_P (char_ptr)): New VEC type. (symbol_completion_add): Update profile to take the new VEC type instead of the old string_vector structure. Update code accordingly. (ada_make_symbol_completion_list): Use the new VEC type instead of the old string_vector structure, and update the code accordingly. * Makefile.in (ada-lang.o): Add dependency on vec.h.
This commit is contained in:
parent
ea696b7b78
commit
2ba95b9b76
3 changed files with 43 additions and 59 deletions
|
@ -1,3 +1,16 @@
|
||||||
|
2007-02-07 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
* ada-lang.c: #include "vec.h".
|
||||||
|
(struct string_vector, new_string_vector, string_vector_append):
|
||||||
|
Delete.
|
||||||
|
(char_ptr): New typedef.
|
||||||
|
(DEF_VEC_P (char_ptr)): New VEC type.
|
||||||
|
(symbol_completion_add): Update profile to take the new VEC type
|
||||||
|
instead of the old string_vector structure. Update code accordingly.
|
||||||
|
(ada_make_symbol_completion_list): Use the new VEC type instead of
|
||||||
|
the old string_vector structure, and update the code accordingly.
|
||||||
|
* Makefile.in (ada-lang.o): Add dependency on vec.h.
|
||||||
|
|
||||||
2008-02-06 Pierre Muller <muller@ics.u-strasbg.fr>
|
2008-02-06 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||||
|
|
||||||
* p-exp.y: Set current_type in missing places.
|
* p-exp.y: Set current_type in missing places.
|
||||||
|
|
|
@ -1800,7 +1800,7 @@ ada-lang.o: ada-lang.c $(defs_h) $(gdb_string_h) $(demangle_h) \
|
||||||
$(gdbcore_h) $(hashtab_h) $(gdb_obstack_h) $(ada_lang_h) \
|
$(gdbcore_h) $(hashtab_h) $(gdb_obstack_h) $(ada_lang_h) \
|
||||||
$(completer_h) $(gdb_stat_h) $(ui_out_h) $(block_h) $(infcall_h) \
|
$(completer_h) $(gdb_stat_h) $(ui_out_h) $(block_h) $(infcall_h) \
|
||||||
$(dictionary_h) $(exceptions_h) $(annotate_h) $(valprint_h) \
|
$(dictionary_h) $(exceptions_h) $(annotate_h) $(valprint_h) \
|
||||||
$(source_h) $(observer_h)
|
$(source_h) $(observer_h) $(vec_h)
|
||||||
ada-typeprint.o: ada-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) \
|
ada-typeprint.o: ada-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) \
|
||||||
$(symtab_h) $(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) \
|
$(symtab_h) $(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) \
|
||||||
$(target_h) $(command_h) $(gdbcmd_h) $(language_h) $(demangle_h) \
|
$(target_h) $(command_h) $(gdbcmd_h) $(language_h) $(demangle_h) \
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
#include "valprint.h"
|
#include "valprint.h"
|
||||||
#include "source.h"
|
#include "source.h"
|
||||||
#include "observer.h"
|
#include "observer.h"
|
||||||
|
#include "vec.h"
|
||||||
|
|
||||||
#ifndef ADA_RETAIN_DOTS
|
#ifndef ADA_RETAIN_DOTS
|
||||||
#define ADA_RETAIN_DOTS 0
|
#define ADA_RETAIN_DOTS 0
|
||||||
|
@ -68,25 +69,6 @@
|
||||||
#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
|
#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* A structure that contains a vector of strings.
|
|
||||||
The main purpose of this type is to group the vector and its
|
|
||||||
associated parameters in one structure. This makes it easier
|
|
||||||
to handle and pass around.
|
|
||||||
|
|
||||||
brobecker/2008-02-04: GDB does provide a generic VEC which should be
|
|
||||||
preferable. But we are using the string_vector structure in the context
|
|
||||||
of symbol completion, and the current infrastructure is such that it's
|
|
||||||
more convenient to use the string vector for now. It would become
|
|
||||||
advantageous to switch to VECs if the rest of the completion-related
|
|
||||||
code switches to VECs as well. */
|
|
||||||
|
|
||||||
struct string_vector
|
|
||||||
{
|
|
||||||
char **array; /* The vector itself. */
|
|
||||||
int index; /* Index of the next available element in the array. */
|
|
||||||
size_t size; /* The number of entries allocated in the array. */
|
|
||||||
};
|
|
||||||
|
|
||||||
static void extract_string (CORE_ADDR addr, char *buf);
|
static void extract_string (CORE_ADDR addr, char *buf);
|
||||||
|
|
||||||
static void modify_general_field (char *, LONGEST, int, int);
|
static void modify_general_field (char *, LONGEST, int, int);
|
||||||
|
@ -334,34 +316,6 @@ static struct obstack symbol_list_obstack;
|
||||||
|
|
||||||
/* Utilities */
|
/* Utilities */
|
||||||
|
|
||||||
/* Create a new empty string_vector struct with an initial size of
|
|
||||||
INITIAL_SIZE. */
|
|
||||||
|
|
||||||
static struct string_vector
|
|
||||||
new_string_vector (int initial_size)
|
|
||||||
{
|
|
||||||
struct string_vector result;
|
|
||||||
|
|
||||||
result.array = (char **) xmalloc ((initial_size + 1) * sizeof (char *));
|
|
||||||
result.index = 0;
|
|
||||||
result.size = initial_size;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add STR at the end of the given string vector SV. If SV is already
|
|
||||||
full, its size is automatically increased (doubled). */
|
|
||||||
|
|
||||||
static void
|
|
||||||
string_vector_append (struct string_vector *sv, char *str)
|
|
||||||
{
|
|
||||||
if (sv->index >= sv->size)
|
|
||||||
GROW_VECT (sv->array, sv->size, sv->size * 2);
|
|
||||||
|
|
||||||
sv->array[sv->index] = str;
|
|
||||||
sv->index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Given DECODED_NAME a string holding a symbol name in its
|
/* Given DECODED_NAME a string holding a symbol name in its
|
||||||
decoded form (ie using the Ada dotted notation), returns
|
decoded form (ie using the Ada dotted notation), returns
|
||||||
its unqualified name. */
|
its unqualified name. */
|
||||||
|
@ -5506,6 +5460,9 @@ symbol_completion_match (const char *sym_name,
|
||||||
return sym_name;
|
return sym_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef char *char_ptr;
|
||||||
|
DEF_VEC_P (char_ptr);
|
||||||
|
|
||||||
/* A companion function to ada_make_symbol_completion_list().
|
/* A companion function to ada_make_symbol_completion_list().
|
||||||
Check if SYM_NAME represents a symbol which name would be suitable
|
Check if SYM_NAME represents a symbol which name would be suitable
|
||||||
to complete TEXT (TEXT_LEN is the length of TEXT), in which case
|
to complete TEXT (TEXT_LEN is the length of TEXT), in which case
|
||||||
|
@ -5522,7 +5479,7 @@ symbol_completion_match (const char *sym_name,
|
||||||
encoded). */
|
encoded). */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
symbol_completion_add (struct string_vector *sv,
|
symbol_completion_add (VEC(char_ptr) *sv,
|
||||||
const char *sym_name,
|
const char *sym_name,
|
||||||
const char *text, int text_len,
|
const char *text, int text_len,
|
||||||
const char *orig_text, const char *word,
|
const char *orig_text, const char *word,
|
||||||
|
@ -5558,7 +5515,7 @@ symbol_completion_add (struct string_vector *sv,
|
||||||
strcat (completion, match);
|
strcat (completion, match);
|
||||||
}
|
}
|
||||||
|
|
||||||
string_vector_append (sv, completion);
|
VEC_safe_push (char_ptr, sv, completion);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return a list of possible symbol names completing TEXT0. The list
|
/* Return a list of possible symbol names completing TEXT0. The list
|
||||||
|
@ -5572,7 +5529,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
|
||||||
int text_len;
|
int text_len;
|
||||||
int wild_match;
|
int wild_match;
|
||||||
int encoded;
|
int encoded;
|
||||||
struct string_vector result = new_string_vector (128);
|
VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct symtab *s;
|
struct symtab *s;
|
||||||
struct partial_symtab *ps;
|
struct partial_symtab *ps;
|
||||||
|
@ -5621,7 +5578,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
|
||||||
+ ps->n_global_syms); psym++)
|
+ ps->n_global_syms); psym++)
|
||||||
{
|
{
|
||||||
QUIT;
|
QUIT;
|
||||||
symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (*psym),
|
symbol_completion_add (completions, SYMBOL_LINKAGE_NAME (*psym),
|
||||||
text, text_len, text0, word,
|
text, text_len, text0, word,
|
||||||
wild_match, encoded);
|
wild_match, encoded);
|
||||||
}
|
}
|
||||||
|
@ -5631,7 +5588,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
|
||||||
+ ps->n_static_syms); psym++)
|
+ ps->n_static_syms); psym++)
|
||||||
{
|
{
|
||||||
QUIT;
|
QUIT;
|
||||||
symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (*psym),
|
symbol_completion_add (completions, SYMBOL_LINKAGE_NAME (*psym),
|
||||||
text, text_len, text0, word,
|
text, text_len, text0, word,
|
||||||
wild_match, encoded);
|
wild_match, encoded);
|
||||||
}
|
}
|
||||||
|
@ -5645,7 +5602,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
|
||||||
ALL_MSYMBOLS (objfile, msymbol)
|
ALL_MSYMBOLS (objfile, msymbol)
|
||||||
{
|
{
|
||||||
QUIT;
|
QUIT;
|
||||||
symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (msymbol),
|
symbol_completion_add (completions, SYMBOL_LINKAGE_NAME (msymbol),
|
||||||
text, text_len, text0, word, wild_match, encoded);
|
text, text_len, text0, word, wild_match, encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5659,7 +5616,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
|
||||||
|
|
||||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||||
{
|
{
|
||||||
symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
|
symbol_completion_add (completions, SYMBOL_LINKAGE_NAME (sym),
|
||||||
text, text_len, text0, word,
|
text, text_len, text0, word,
|
||||||
wild_match, encoded);
|
wild_match, encoded);
|
||||||
}
|
}
|
||||||
|
@ -5674,7 +5631,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
|
||||||
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
|
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
|
||||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||||
{
|
{
|
||||||
symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
|
symbol_completion_add (completions, SYMBOL_LINKAGE_NAME (sym),
|
||||||
text, text_len, text0, word,
|
text, text_len, text0, word,
|
||||||
wild_match, encoded);
|
wild_match, encoded);
|
||||||
}
|
}
|
||||||
|
@ -5689,16 +5646,30 @@ ada_make_symbol_completion_list (char *text0, char *word)
|
||||||
continue;
|
continue;
|
||||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||||
{
|
{
|
||||||
symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
|
symbol_completion_add (completions, SYMBOL_LINKAGE_NAME (sym),
|
||||||
text, text_len, text0, word,
|
text, text_len, text0, word,
|
||||||
wild_match, encoded);
|
wild_match, encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append the closing NULL entry. */
|
/* Append the closing NULL entry. */
|
||||||
string_vector_append (&result, NULL);
|
VEC_safe_push (char_ptr, completions, NULL);
|
||||||
|
|
||||||
return (result.array);
|
/* Make a copy of the COMPLETIONS VEC before we free it, and then
|
||||||
|
return the copy. It's unfortunate that we have to make a copy
|
||||||
|
of an array that we're about to destroy, but there is nothing much
|
||||||
|
we can do about it. Fortunately, it's typically not a very large
|
||||||
|
array. */
|
||||||
|
{
|
||||||
|
const size_t completions_size =
|
||||||
|
VEC_length (char_ptr, completions) * sizeof (char *);
|
||||||
|
char **result = malloc (completions_size);
|
||||||
|
|
||||||
|
memcpy (result, VEC_address (char_ptr, completions), completions_size);
|
||||||
|
|
||||||
|
VEC_free (char_ptr, completions);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Field Access */
|
/* Field Access */
|
||||||
|
|
Loading…
Reference in a new issue