X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Flanguage.h;h=34f569227beb3e45ee149d626aca34723eca8273;hb=b5ec771e60c1a0863e51eb491c85c674097e9e13;hp=d6f932ea8197a52d6cf70d298de4bcadc39ae620;hpb=8b302db80cb07f5f3264b50e1b51fdb8ecb29183;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/language.h b/gdb/language.h index d6f932ea81..34f569227b 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -1,6 +1,6 @@ /* Source-language-related definitions for GDB. - Copyright (C) 1991-2016 Free Software Foundation, Inc. + Copyright (C) 1991-2017 Free Software Foundation, Inc. Contributed by the Department of Computer Science at the State University of New York at Buffalo. @@ -24,6 +24,7 @@ #define LANGUAGE_H 1 #include "symtab.h" +#include "common/function-view.h" /* Forward decls for prototypes. */ struct value; @@ -125,16 +126,6 @@ struct language_arch_info struct type *bool_type_default; }; -/* A pointer to a function expected to return nonzero if - SYMBOL_SEARCH_NAME matches the given LOOKUP_NAME. - - SYMBOL_SEARCH_NAME should be a symbol's "search" name. - LOOKUP_NAME should be the name of an entity after it has been - transformed for lookup. */ - -typedef int (*symbol_name_cmp_ftype) (const char *symbol_search_name, - const char *lookup_name); - /* Structure tying together assorted information about a language. */ struct language_defn @@ -182,7 +173,7 @@ struct language_defn /* Parser error function. */ - void (*la_error) (char *); + void (*la_error) (const char *); /* Given an expression *EXPP created by prefixifying the result of la_parser, perform any remaining processing necessary to complete @@ -219,9 +210,6 @@ struct language_defn TYPE is the type of the sub-object to be printed. - CONTENTS holds the bits of the value. This holds the entire - enclosing object. - EMBEDDED_OFFSET is the offset into the outermost object of the sub-object represented by TYPE. This is the object which this call should print. Note that the enclosing type is not @@ -237,10 +225,9 @@ struct language_defn printing. */ void (*la_val_print) (struct type *type, - const gdb_byte *contents, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options); /* Print a top-level value using syntax appropriate for this language. */ @@ -274,7 +261,7 @@ struct language_defn /* If this is non-NULL, specifies the name that of the implicit local variable that refers to the current object instance. */ - char *la_name_of_this; + const char *la_name_of_this; /* This is a function that lookup_symbol will call when it gets to the part of symbol lookup where C looks up static and global @@ -324,16 +311,20 @@ struct language_defn char string_lower_bound; /* The list of characters forming word boundaries. */ - char *(*la_word_break_characters) (void); + const char *(*la_word_break_characters) (void); - /* Should return a vector of all symbols which are possible + /* Add to the completion tracker all symbols which are possible completions for TEXT. WORD is the entire command on which the completion is being made. If CODE is TYPE_CODE_UNDEF, then all symbols should be examined; otherwise, only STRUCT_DOMAIN symbols whose type has a code of CODE should be matched. */ - VEC (char_ptr) *(*la_make_symbol_completion_list) (const char *text, - const char *word, - enum type_code code); + void (*la_collect_symbol_completion_matches) + (completion_tracker &tracker, + complete_symbol_mode mode, + symbol_name_match_type match_type, + const char *text, + const char *word, + enum type_code code); /* The per-architecture (OS/ABI) language information. */ void (*la_language_arch_info) (struct gdbarch *, @@ -361,13 +352,24 @@ struct language_defn void (*la_get_string) (struct value *value, gdb_byte **buffer, int *length, struct type **chartype, const char **charset); - /* Return a pointer to the function that should be used to match - a symbol name against LOOKUP_NAME. This is mostly for languages - such as Ada where the matching algorithm depends on LOOKUP_NAME. - - This field may be NULL, in which case strcmp_iw will be used - to perform the matching. */ - symbol_name_cmp_ftype (*la_get_symbol_name_cmp) (const char *lookup_name); + /* Return an expression that can be used for a location + watchpoint. TYPE is a pointer type that points to the memory + to watch, and ADDR is the address of the watched memory. */ + gdb::unique_xmalloc_ptr (*la_watch_location_expression) + (struct type *type, CORE_ADDR addr); + + /* Return a pointer to the function that should be used to match a + symbol name against LOOKUP_NAME, according to this language's + rules. The matching algorithm depends on LOOKUP_NAME. For + example, on Ada, the matching algorithm depends on the symbol + name (wild/full/verbatim matching), and on whether we're doing + a normal lookup or a completion match lookup. + + This field may be NULL, in which case + default_symbol_name_matcher is used to perform the + matching. */ + symbol_name_matcher_ftype *(*la_get_symbol_name_matcher) + (const lookup_name_info &); /* Find all symbols in the current program space matching NAME in DOMAIN, according to this language's rules. @@ -376,18 +378,21 @@ struct language_defn The caller is responsible for iterating up through superblocks if desired. - For each one, call CALLBACK with the symbol and the DATA - argument. If CALLBACK returns zero, the iteration ends at that - point. + For each one, call CALLBACK with the symbol. If CALLBACK + returns false, the iteration ends at that point. This field may not be NULL. If the language does not need any special processing here, 'iterate_over_symbols' should be used as the definition. */ - void (*la_iterate_over_symbols) (const struct block *block, - const char *name, - domain_enum domain, - symbol_found_callback_ftype *callback, - void *data); + void (*la_iterate_over_symbols) + (const struct block *block, const lookup_name_info &name, + domain_enum domain, + gdb::function_view callback); + + /* Hash the given symbol search name. Use + default_search_name_hash if no special treatment is + required. */ + unsigned int (*la_search_name_hash) (const char *name); /* Various operations on varobj. */ const struct lang_varobj_ops *la_varobj_ops; @@ -406,8 +411,8 @@ struct language_defn If 'la_get_gcc_context' is not defined, then this method is ignored. - This takes the user-supplied text and returns a newly malloc'd - bit of code to compile. The caller owns the result. + This takes the user-supplied text and returns a new bit of code + to compile. INST is the compiler instance being used. INPUT is the user's input text. @@ -416,11 +421,11 @@ struct language_defn parsed. EXPR_PC is the PC at which the expression is being parsed. */ - char *(*la_compute_program) (struct compile_instance *inst, - const char *input, - struct gdbarch *gdbarch, - const struct block *expr_block, - CORE_ADDR expr_pc); + std::string (*la_compute_program) (struct compile_instance *inst, + const char *input, + struct gdbarch *gdbarch, + const struct block *expr_block, + CORE_ADDR expr_pc); /* Add fields above this point, so the magic number is always last. */ /* Magic number for compat checking. */ @@ -515,9 +520,6 @@ extern enum language set_language (enum language); #define LA_PRINT_TYPEDEF(type,new_symbol,stream) \ (current_language->la_print_typedef(type,new_symbol,stream)) -#define LA_VAL_PRINT(type,valaddr,offset,addr,stream,val,recurse,options) \ - (current_language->la_val_print(type,valaddr,offset,addr,stream, \ - val,recurse,options)) #define LA_VALUE_PRINT(val,stream,options) \ (current_language->la_value_print(val,stream,options)) @@ -534,9 +536,8 @@ extern enum language set_language (enum language); #define LA_PRINT_ARRAY_INDEX(index_value, stream, options) \ (current_language->la_print_array_index(index_value, stream, options)) -#define LA_ITERATE_OVER_SYMBOLS(BLOCK, NAME, DOMAIN, CALLBACK, DATA) \ - (current_language->la_iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK, \ - DATA)) +#define LA_ITERATE_OVER_SYMBOLS(BLOCK, NAME, DOMAIN, CALLBACK) \ + (current_language->la_iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK)) /* Test a character to decide whether it can be printed in literal form or needs to be printed in another representation. For example, @@ -563,16 +564,12 @@ extern int value_true (struct value *); /* Misc: The string representing a particular enum language. */ -extern enum language language_enum (char *str); +extern enum language language_enum (const char *str); extern const struct language_defn *language_def (enum language); extern const char *language_str (enum language); -/* Add a language to the set known by GDB (at initialization time). */ - -extern void add_language (const struct language_defn *); - /* Check for a language-specific trampoline. */ extern CORE_ADDR skip_language_trampoline (struct frame_info *, CORE_ADDR pc); @@ -593,7 +590,7 @@ extern char *language_class_name_from_physname (const struct language_defn *, const char *physname); /* Splitting strings into words. */ -extern char *default_word_break_characters (void); +extern const char *default_word_break_characters (void); /* Print the index of an array element using the C99 syntax. */ extern void default_print_array_index (struct value *index_value, @@ -616,7 +613,72 @@ void default_print_typedef (struct type *type, struct symbol *new_symbol, void default_get_string (struct value *value, gdb_byte **buffer, int *length, struct type **char_type, const char **charset); +/* Default name hashing function. */ + +/* Produce an unsigned hash value from SEARCH_NAME that is consistent + with strcmp_iw, strcmp, and, at least on Ada symbols, wild_match. + That is, two identifiers equivalent according to any of those three + comparison operators hash to the same value. */ +extern unsigned int default_search_name_hash (const char *search_name); + void c_get_string (struct value *value, gdb_byte **buffer, int *length, struct type **char_type, const char **charset); +/* The default implementation of la_symbol_name_matcher. Matches with + strncmp_iw. */ +extern bool default_symbol_name_matcher + (const char *symbol_search_name, + const lookup_name_info &lookup_name, + completion_match *match); + +/* Get LANG's symbol_name_matcher method for LOOKUP_NAME. Returns + default_symbol_name_matcher if not set. */ +symbol_name_matcher_ftype *language_get_symbol_name_matcher + (const language_defn *lang, const lookup_name_info &lookup_name); + +/* The languages supported by GDB. */ + +extern const struct language_defn auto_language_defn; +extern const struct language_defn unknown_language_defn; +extern const struct language_defn minimal_language_defn; + +extern const struct language_defn ada_language_defn; +extern const struct language_defn asm_language_defn; +extern const struct language_defn c_language_defn; +extern const struct language_defn cplus_language_defn; +extern const struct language_defn d_language_defn; +extern const struct language_defn f_language_defn; +extern const struct language_defn go_language_defn; +extern const struct language_defn m2_language_defn; +extern const struct language_defn objc_language_defn; +extern const struct language_defn opencl_language_defn; +extern const struct language_defn pascal_language_defn; +extern const struct language_defn rust_language_defn; + +/* Save the current language and restore it upon destruction. */ + +class scoped_restore_current_language +{ +public: + + explicit scoped_restore_current_language () + : m_lang (current_language->la_language) + { + } + + ~scoped_restore_current_language () + { + set_language (m_lang); + } + + scoped_restore_current_language (const scoped_restore_current_language &) + = delete; + scoped_restore_current_language &operator= + (const scoped_restore_current_language &) = delete; + +private: + + enum language m_lang; +}; + #endif /* defined (LANGUAGE_H) */