X-Git-Url: https://repo.jachan.dev/binutils.git/blobdiff_plain/cc73bb8c7a49a308ae56e27a88fcb173ced0f1a5..8e069a981cbb9b33ccfbdd82ad7da5ce8b0c35b2:/gdb/language.h diff --git a/gdb/language.h b/gdb/language.h index 9306a82a20..3156f27b8c 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -1,7 +1,7 @@ /* Source-language-related definitions for GDB. - Copyright (C) 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2003, 2004, - 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1991-1995, 1998-2000, 2003-2004, 2007-2012 Free + Software Foundation, Inc. Contributed by the Department of Computer Science at the State University of New York at Buffalo. @@ -24,7 +24,7 @@ #if !defined (LANGUAGE_H) #define LANGUAGE_H 1 -/* Forward decls for prototypes */ +/* Forward decls for prototypes. */ struct value; struct objfile; struct frame_info; @@ -32,7 +32,7 @@ struct expression; struct ui_file; struct value_print_options; -#define MAX_FORTRAN_DIMS 7 /* Maximum number of F77 array dims */ +#define MAX_FORTRAN_DIMS 7 /* Maximum number of F77 array dims. */ /* range_mode == range_mode_auto: range_check set automatically to default of language. @@ -56,8 +56,8 @@ extern enum range_check range_check; /* type_mode == - type_mode_auto: type_check set automatically to default of language - type_mode_manual: type_check set manually by user. */ + type_mode_auto: type_check set automatically to default of language. + type_mode_manual: type_check set manually by user. */ extern enum type_mode { @@ -77,7 +77,7 @@ extern enum type_check type_check; /* case_mode == - case_mode_auto: case_sensitivity set upon selection of scope + case_mode_auto: case_sensitivity set upon selection of scope. case_mode_manual: case_sensitivity set only by user. */ extern enum case_mode @@ -87,8 +87,8 @@ extern enum case_mode case_mode; /* array_ordering == - array_row_major: Arrays are in row major order - array_column_major: Arrays are in column major order.*/ + array_row_major: Arrays are in row major order. + array_column_major: Arrays are in column major order. */ extern enum array_ordering { @@ -98,8 +98,8 @@ array_ordering; /* case_sensitivity == - case_sensitive_on: Case sensitivity in name matching is used - case_sensitive_off: Case sensitivity in name matching is not used */ + case_sensitive_on: Case sensitivity in name matching is used. + case_sensitive_off: Case sensitivity in name matching is not used. */ extern enum case_sensitivity { @@ -109,8 +109,8 @@ case_sensitivity; /* macro_expansion == - macro_expansion_no: No macro expansion is available - macro_expansion_c: C-like macro expansion is available */ + macro_expansion_no: No macro expansion is available. + macro_expansion_c: C-like macro expansion is available. */ enum macro_expansion { @@ -127,7 +127,7 @@ struct language_arch_info expressions, regardless of whether the program being debugged actually defines such a type. */ struct type **primitive_type_vector; - /* Type of elements of strings. */ + /* Type of elements of strings. */ struct type *string_char_type; /* Symbol name of type to use as boolean type, if defined. */ @@ -136,45 +136,55 @@ 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 { - /* Name of the language */ + /* Name of the language. */ char *la_name; - /* its symtab language-enum (defs.h) */ + /* its symtab language-enum (defs.h). */ enum language la_language; - /* Default range checking */ + /* Default range checking. */ enum range_check la_range_check; - /* Default type checking */ + /* Default type checking. */ enum type_check la_type_check; - /* Default case sensitivity */ + /* Default case sensitivity. */ enum case_sensitivity la_case_sensitivity; - /* Multi-dimensional array ordering */ + /* Multi-dimensional array ordering. */ enum array_ordering la_array_ordering; /* Style of macro expansion, if any, supported by this language. */ enum macro_expansion la_macro_expansion; /* Definitions related to expression printing, prefixifying, and - dumping */ + dumping. */ const struct exp_descriptor *la_exp_desc; - /* Parser function. */ + /* Parser function. */ int (*la_parser) (void); - /* Parser error function */ + /* Parser error function. */ void (*la_error) (char *); @@ -186,7 +196,8 @@ struct language_defn void (*la_post_parser) (struct expression ** expp, int void_context_p); - void (*la_printchar) (int ch, struct type *chtype, struct ui_file * stream); + void (*la_printchar) (int ch, struct type *chtype, + struct ui_file * stream); void (*la_printstr) (struct ui_file * stream, struct type *elttype, const gdb_byte *string, unsigned int length, @@ -196,9 +207,9 @@ struct language_defn void (*la_emitchar) (int ch, struct type *chtype, struct ui_file * stream, int quoter); - /* Print a type using syntax appropriate for this language. */ + /* Print a type using syntax appropriate for this language. */ - void (*la_print_type) (struct type *, char *, struct ui_file *, int, + void (*la_print_type) (struct type *, const char *, struct ui_file *, int, int); /* Print a typedef using syntax appropriate for this language. @@ -233,12 +244,13 @@ struct language_defn const gdb_byte *contents, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, + const struct value *val, const struct value_print_options *options); - /* Print a top-level value using syntax appropriate for this language. */ + /* Print a top-level value using syntax appropriate for this language. */ - int (*la_value_print) (struct value *, struct ui_file *, - const struct value_print_options *); + void (*la_value_print) (struct value *, struct ui_file *, + const struct value_print_options *); /* PC is possibly an unknown languages trampoline. If that PC falls in a trampoline belonging to this language, @@ -270,16 +282,16 @@ struct language_defn /* Return class name of a mangled method name or NULL. */ char *(*la_class_name_from_physname) (const char *physname); - /* Table for printing expressions */ + /* Table for printing expressions. */ const struct op_print *la_op_print_tab; /* Zero if the language has first-class arrays. True if there are no - array values, and array objects decay to pointers, as in C. */ + array values, and array objects decay to pointers, as in C. */ char c_style_arrays; - /* Index to use for extracting the first element of a string. */ + /* Index to use for extracting the first element of a string. */ char string_lower_bound; /* The list of characters forming word boundaries. */ @@ -316,8 +328,36 @@ struct language_defn void (*la_get_string) (struct value *value, gdb_byte **buffer, int *length, struct type **chartype, const char **charset); - /* Add fields above this point, so the magic number is always last. */ - /* Magic number for compat checking */ + /* 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); + + /* Find all symbols in the current program space matching NAME in + DOMAIN, according to this language's rules. + + The search starts with BLOCK. This function iterates upward + through blocks. When the outermost block has been finished, + the function returns. + + For each one, call CALLBACK with the symbol and the DATA + argument. If CALLBACK returns zero, 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); + + /* Add fields above this point, so the magic number is always last. */ + /* Magic number for compat checking. */ long la_magic; @@ -373,14 +413,14 @@ struct type *language_lookup_primitive_type_by_name (const struct language_defn /* These macros define the behaviour of the expression evaluator. */ -/* Should we strictly type check expressions? */ +/* Should we strictly type check expressions? */ #define STRICT_TYPE (type_check != type_check_off) -/* Should we range check values against the domain of their type? */ +/* Should we range check values against the domain of their type? */ #define RANGE_CHECK (range_check != range_check_off) -/* "cast" really means conversion */ -/* FIXME -- should be a setting in language_defn */ +/* "cast" really means conversion. */ +/* FIXME -- should be a setting in language_defn. */ #define CAST_IS_CONVERSION(LANG) ((LANG)->la_language == language_c || \ (LANG)->la_language == language_cplus || \ (LANG)->la_language == language_objc) @@ -393,7 +433,7 @@ extern enum language set_language (enum language); /* This page contains functions that return things that are specific to languages. Each of these functions is based on the current setting of working_lang, which the user sets - with the "set language" command. */ + with the "set language" command. */ #define LA_PRINT_TYPE(type,varstring,stream,show,level) \ (current_language->la_print_type(type,varstring,stream,show,level)) @@ -401,15 +441,15 @@ 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,recurse,options) \ +#define LA_VAL_PRINT(type,valaddr,offset,addr,stream,val,recurse,options) \ (current_language->la_val_print(type,valaddr,offset,addr,stream, \ - recurse,options)) + val,recurse,options)) #define LA_VALUE_PRINT(val,stream,options) \ (current_language->la_value_print(val,stream,options)) #define LA_PRINT_CHAR(ch, type, stream) \ (current_language->la_printchar(ch, type, stream)) -#define LA_PRINT_STRING(stream, elttype, string, length, encoding, force_ellipses,options) \ +#define LA_PRINT_STRING(stream, elttype, string, length, encoding, force_ellipses, options) \ (current_language->la_printstr(stream, elttype, string, length, \ encoding, force_ellipses,options)) #define LA_EMIT_CHAR(ch, type, stream, quoter) \ @@ -417,14 +457,18 @@ extern enum language set_language (enum language); #define LA_GET_STRING(value, buffer, length, chartype, encoding) \ (current_language->la_get_string(value, buffer, length, chartype, encoding)) -#define LA_PRINT_ARRAY_INDEX(index_value, stream, optins) \ +#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)) + /* Test a character to decide whether it can be printed in literal form or needs to be printed in another representation. For example, in C the literal form of the character with octal value 141 is 'a' and the "other representation" is '\141'. The "other representation" - is program language dependent. */ + is program language dependent. */ #define PRINT_LITERAL_FORM(c) \ ((c) >= 0x20 \ @@ -433,28 +477,10 @@ extern enum language set_language (enum language); /* Type predicates */ -extern int simple_type (struct type *); - -extern int ordered_type (struct type *); - -extern int same_type (struct type *, struct type *); - -extern int integral_type (struct type *); - -extern int numeric_type (struct type *); - -extern int character_type (struct type *); - -extern int boolean_type (struct type *); - -extern int float_type (struct type *); - extern int pointer_type (struct type *); -extern int structured_type (struct type *); - -/* Checks Binary and Unary operations for semantic type correctness */ -/* FIXME: Does not appear to be used */ +/* Checks Binary and Unary operations for semantic type correctness. */ +/* FIXME: Does not appear to be used. */ #define unop_type_check(v,o) binop_type_check((v),NULL,(o)) extern void binop_type_check (struct value *, struct value *, int); @@ -483,7 +509,7 @@ extern void add_language (const struct language_defn *); extern enum language get_frame_language (void); /* In stack.c */ -/* Check for a language-specific trampoline. */ +/* Check for a language-specific trampoline. */ extern CORE_ADDR skip_language_trampoline (struct frame_info *, CORE_ADDR pc);