X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Flanguage.h;h=b344a4a2ca6acb3f3c2ae939a4c946f6430cbe2c;hb=441af85bd9c68dbc0c2a1dbe23bf07c6cb3c3f5d;hp=5fc175703a072a84bd427e5fe9443e5d02c11d81;hpb=2a61252965c91540133bece7deb92eb22e3cf929;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/language.h b/gdb/language.h index 5fc175703a..b344a4a2ca 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -1,6 +1,6 @@ /* Source-language-related definitions for GDB. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Contributed by the Department of Computer Science at the State University of New York at Buffalo. @@ -24,7 +24,7 @@ #define LANGUAGE_H 1 #include "symtab.h" -#include "common/function-view.h" +#include "gdbsupport/function-view.h" #include "expression.h" /* Forward decls for prototypes. */ @@ -38,6 +38,7 @@ struct lang_varobj_ops; struct parser_state; class compile_instance; struct completion_match_for_lcd; +class innermost_block_tracker; #define MAX_FORTRAN_DIMS 7 /* Maximum number of F77 array dims. */ @@ -127,6 +128,47 @@ struct language_arch_info struct type *bool_type_default; }; +/* In a language (particularly C++) a function argument of an aggregate + type (i.e. class/struct/union) may be implicitly passed by reference + even though it is declared a call-by-value argument in the source. + The struct below puts together necessary information for GDB to be + able to detect and carry out pass-by-reference semantics for a + particular type. This type is referred as T in the inlined comments + below. + + The default values of the fields are chosen to give correct semantics + for primitive types and for simple aggregate types, such as + + class T { + int x; + }; */ + +struct language_pass_by_ref_info +{ + /* True if an argument of type T can be passed to a function by value + (i.e. not through an implicit reference). False, otherwise. */ + bool trivially_copyable = true; + + /* True if a copy of a value of type T can be initialized by + memcpy'ing the value bit-by-bit. False, otherwise. + E.g. If T has a user-defined copy ctor, this should be false. */ + bool trivially_copy_constructible = true; + + /* True if a value of type T can be destructed simply by reclaiming + the memory area occupied by the value. False, otherwise. + E.g. If T has a user-defined destructor, this should be false. */ + bool trivially_destructible = true; + + /* True if it is allowed to create a copy of a value of type T. + False, otherwise. + E.g. If T has a deleted copy ctor, this should be false. */ + bool copy_constructible = true; + + /* True if a value of type T can be destructed. False, otherwise. + E.g. If T has a deleted destructor, this should be false. */ + bool destructible = true; +}; + /* Structure tying together assorted information about a language. */ struct language_defn @@ -181,7 +223,7 @@ struct language_defn for completion, not evaluation. */ void (*la_post_parser) (expression_up *expp, int void_context_p, - int completing); + int completing, innermost_block_tracker *tracker); void (*la_printchar) (int ch, struct type *chtype, struct ui_file * stream); @@ -355,24 +397,10 @@ struct language_defn struct ui_file *stream, const struct value_print_options *options); - /* Return non-zero if TYPE should be passed (and returned) by - reference at the language level. */ - int (*la_pass_by_reference) (struct type *type); - - /* Obtain a string from the inferior, storing it in a newly allocated - buffer in BUFFER, which should be freed by the caller. If the - in- and out-parameter *LENGTH is specified at -1, the string is - read until a null character of the appropriate width is found - - otherwise the string is read to the length of characters specified. - On completion, *LENGTH will hold the size of the string in characters. - If a *LENGTH of -1 was specified it will count only actual - characters, excluding any eventual terminating null character. - Otherwise *LENGTH will include all characters - including any nulls. - CHARSET will hold the encoding used in the string. */ - void (*la_get_string) (struct value *value, - gdb::unique_xmalloc_ptr *buffer, - int *length, struct type **chartype, - const char **charset); + /* Return information about whether TYPE should be passed + (and returned) by reference at the language level. */ + struct language_pass_by_ref_info (*la_pass_by_reference) + (struct type *type); /* Return an expression that can be used for a location watchpoint. TYPE is a pointer type that points to the memory @@ -406,7 +434,7 @@ struct language_defn 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) + bool (*la_iterate_over_symbols) (const struct block *block, const lookup_name_info &name, domain_enum domain, gdb::function_view callback); @@ -449,15 +477,16 @@ struct language_defn 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. */ + /* Return true if TYPE is a string type. */ + bool (*la_is_string_type_p) (struct type *type); - long la_magic; + /* This string is used by the 'set print max-depth' setting. When GDB + replaces a struct or union (during value printing) that is "too + deep" this string is displayed instead. */ + const char *la_struct_too_deep_ellipsis; }; -#define LANG_MAGIC 910823L - /* Pointer to the language_defn for our current language. This pointer always points to *some* valid struct; it can be used without checking it for validity. @@ -481,6 +510,11 @@ extern const struct language_defn *current_language; extern const struct language_defn *expected_language; +/* Warning issued when current_language and the language of the current + frame do not match. */ + +extern const char lang_frame_mismatch_warn[]; + /* language_mode == language_mode_auto: current_language automatically set upon selection of scope (e.g. stack frame) @@ -552,8 +586,6 @@ extern enum language set_language (enum language); encoding, force_ellipses,options)) #define LA_EMIT_CHAR(ch, type, stream, quoter) \ (current_language->la_emitchar(ch, type, stream, quoter)) -#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, options) \ (current_language->la_print_array_index(index_value, stream, options)) @@ -576,6 +608,10 @@ extern enum language set_language (enum language); extern int pointer_type (struct type *); +/* Return true if TYPE is a string type, otherwise return false. This + default implementation only detects TYPE_CODE_STRING. */ +extern bool default_is_string_type_p (struct type *type); + /* Error messages */ extern void range_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2); @@ -619,24 +655,19 @@ extern void default_print_array_index (struct value *index_value, struct ui_file *stream, const struct value_print_options *options); -/* Return non-zero if TYPE should be passed (and returned) by - reference at the language level. */ -int language_pass_by_reference (struct type *type); +/* Return information about whether TYPE should be passed + (and returned) by reference at the language level. */ +struct language_pass_by_ref_info language_pass_by_reference (struct type *type); -/* Return zero; by default, types are passed by value at the language - level. The target ABI may pass or return some structs by reference - independent of this. */ -int default_pass_by_reference (struct type *type); +/* Return a default struct that provides pass-by-reference information + about the given TYPE. Languages should update the default values + as appropriate. */ +struct language_pass_by_ref_info default_pass_by_reference (struct type *type); /* The default implementation of la_print_typedef. */ void default_print_typedef (struct type *type, struct symbol *new_symbol, struct ui_file *stream); -void default_get_string (struct value *value, - gdb::unique_xmalloc_ptr *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 @@ -726,7 +757,7 @@ public: { m_lang = current_language->la_language; m_switched = true; - set_language (SYMBOL_LANGUAGE (sym)); + set_language (sym->language ()); } else {