return evaluate_subexp_standard (expect_type, exp, pos, noside);
}
\f
-/* la_watch_location_expression for C. */
-
-gdb::unique_xmalloc_ptr<char>
-c_watch_location_expression (struct type *type, CORE_ADDR addr)
-{
- type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
- std::string name = type_to_string (type);
- return gdb::unique_xmalloc_ptr<char>
- (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr)));
-}
-
/* See c-lang.h. */
bool
evaluate_subexp_c
};
-static const char *c_extensions[] =
-{
- ".c", NULL
-};
-
-/* Constant data that describes the C language. */
-
-extern const struct language_data c_language_data =
-{
- "c", /* Language name */
- "C",
- language_c,
- range_check_off,
- case_sensitive_on,
- array_row_major,
- macro_expansion_c,
- c_extensions,
- &exp_descriptor_c,
- c_parse,
- null_post_parser,
- c_printchar, /* Print a character constant */
- c_printstr, /* Function to print string constant */
- c_emit_char, /* Print a single char */
- c_print_typedef, /* Print a typedef using appropriate syntax */
- c_value_print_inner, /* la_value_print_inner */
- c_value_print, /* Print a top-level value */
- NULL, /* name_of_this */
- true, /* la_store_sym_names_in_linkage_form_p */
- basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
- NULL, /* Language specific
- class_name_from_physname */
- c_op_print_tab, /* expression operators for printing */
- 1, /* c-style arrays */
- 0, /* String lower bound */
- default_word_break_characters,
- default_collect_symbol_completion_matches,
- c_watch_location_expression,
- NULL, /* la_get_symbol_name_matcher */
- &c_varobj_ops,
- c_compute_program,
- c_is_string_type_p,
- "{...}" /* la_struct_too_deep_ellipsis */
-};
-
/* Class representing the C language. */
class c_language : public language_defn
{
public:
c_language ()
- : language_defn (language_c, c_language_data)
+ : language_defn (language_c)
{ /* Nothing. */ }
+ /* See language.h. */
+
+ const char *name () const override
+ { return "c"; }
+
+ /* See language.h. */
+
+ const char *natural_name () const override
+ { return "C"; }
+
+ /* See language.h. */
+
+ const std::vector<const char *> &filename_extensions () const override
+ {
+ static const std::vector<const char *> extensions = { ".c" };
+ return extensions;
+ }
+
/* See language.h. */
void language_arch_info (struct gdbarch *gdbarch,
struct language_arch_info *lai) const override
return c_get_compile_context ();
}
+ /* See language.h. */
+ std::string compute_program (compile_instance *inst,
+ const char *input,
+ struct gdbarch *gdbarch,
+ const struct block *expr_block,
+ CORE_ADDR expr_pc) const override
+ {
+ return c_compute_program (inst, input, gdbarch, expr_block, expr_pc);
+ }
+
/* See language.h. */
void print_type (struct type *type, const char *varstring,
{
c_print_type (type, varstring, stream, show, level, flags);
}
+
+ /* See language.h. */
+
+ bool store_sym_names_in_linkage_form_p () const override
+ { return true; }
+
+ /* See language.h. */
+
+ enum macro_expansion macro_expansion () const override
+ { return macro_expansion_c; }
+
+ /* See language.h. */
+
+ const struct exp_descriptor *expression_ops () const override
+ { return &exp_descriptor_c; }
+
+ /* See language.h. */
+
+ const struct op_print *opcode_print_table () const override
+ { return c_op_print_tab; }
};
/* Single instance of the C language class. */
nr_cplus_primitive_types
};
-static const char *cplus_extensions[] =
-{
- ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++", NULL
-};
-
-/* Constant data that describes the C++ language. */
-
-extern const struct language_data cplus_language_data =
-{
- "c++", /* Language name */
- "C++",
- language_cplus,
- range_check_off,
- case_sensitive_on,
- array_row_major,
- macro_expansion_c,
- cplus_extensions,
- &exp_descriptor_c,
- c_parse,
- null_post_parser,
- c_printchar, /* Print a character constant */
- c_printstr, /* Function to print string constant */
- c_emit_char, /* Print a single char */
- c_print_typedef, /* Print a typedef using appropriate syntax */
- c_value_print_inner, /* la_value_print_inner */
- c_value_print, /* Print a top-level value */
- "this", /* name_of_this */
- false, /* la_store_sym_names_in_linkage_form_p */
- cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
- cp_class_name_from_physname, /* Language specific
- class_name_from_physname */
- c_op_print_tab, /* expression operators for printing */
- 1, /* c-style arrays */
- 0, /* String lower bound */
- default_word_break_characters,
- default_collect_symbol_completion_matches,
- c_watch_location_expression,
- cp_get_symbol_name_matcher,
- &cplus_varobj_ops,
- cplus_compute_program,
- c_is_string_type_p,
- "{...}" /* la_struct_too_deep_ellipsis */
-};
-
/* A class for the C++ language. */
class cplus_language : public language_defn
{
public:
cplus_language ()
- : language_defn (language_cplus, cplus_language_data)
+ : language_defn (language_cplus)
{ /* Nothing. */ }
/* See language.h. */
+ const char *name () const override
+ { return "c++"; }
+
+ /* See language.h. */
+
+ const char *natural_name () const override
+ { return "C++"; }
+
+ /* See language.h. */
+
+ const std::vector<const char *> &filename_extensions () const override
+ {
+ static const std::vector<const char *> extensions
+ = { ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++" };
+ return extensions;
+ }
+
+ /* See language.h. */
+
struct language_pass_by_ref_info pass_by_reference_info
(struct type *type) const override
{
return cplus_get_compile_context ();
}
+ /* See language.h. */
+ std::string compute_program (compile_instance *inst,
+ const char *input,
+ struct gdbarch *gdbarch,
+ const struct block *expr_block,
+ CORE_ADDR expr_pc) const override
+ {
+ return cplus_compute_program (inst, input, gdbarch, expr_block, expr_pc);
+ }
+
/* See language.h. */
unsigned int search_name_hash (const char *name) const override
{
/* See language.h. */
- char *demangle (const char *mangled, int options) const override
+ char *demangle_symbol (const char *mangled, int options) const override
{
return gdb_demangle (mangled, options);
}
{
return cplus_skip_trampoline (fi, pc);
}
-};
-/* The single instance of the C++ language class. */
+ /* See language.h. */
-static cplus_language cplus_language_defn;
+ char *class_name_from_physname (const char *physname) const override
+ {
+ return cp_class_name_from_physname (physname);
+ }
-static const char *asm_extensions[] =
-{
- ".s", ".sx", ".S", NULL
-};
+ /* See language.h. */
-/* Constant data that describes the ASM language. */
+ struct block_symbol lookup_symbol_nonlocal
+ (const char *name, const struct block *block,
+ const domain_enum domain) const override
+ {
+ return cp_lookup_symbol_nonlocal (this, name, block, domain);
+ }
-extern const struct language_data asm_language_data =
-{
- "asm", /* Language name */
- "assembly",
- language_asm,
- range_check_off,
- case_sensitive_on,
- array_row_major,
- macro_expansion_c,
- asm_extensions,
- &exp_descriptor_c,
- c_parse,
- null_post_parser,
- c_printchar, /* Print a character constant */
- c_printstr, /* Function to print string constant */
- c_emit_char, /* Print a single char */
- c_print_typedef, /* Print a typedef using appropriate syntax */
- c_value_print_inner, /* la_value_print_inner */
- c_value_print, /* Print a top-level value */
- NULL, /* name_of_this */
- true, /* la_store_sym_names_in_linkage_form_p */
- basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
- NULL, /* Language specific
- class_name_from_physname */
- c_op_print_tab, /* expression operators for printing */
- 1, /* c-style arrays */
- 0, /* String lower bound */
- default_word_break_characters,
- default_collect_symbol_completion_matches,
- c_watch_location_expression,
- NULL, /* la_get_symbol_name_matcher */
- &default_varobj_ops,
- NULL,
- c_is_string_type_p,
- "{...}" /* la_struct_too_deep_ellipsis */
+ /* See language.h. */
+
+ const char *name_of_this () const override
+ { return "this"; }
+
+ /* See language.h. */
+
+ enum macro_expansion macro_expansion () const override
+ { return macro_expansion_c; }
+
+ /* See language.h. */
+
+ const struct lang_varobj_ops *varobj_ops () const override
+ { return &cplus_varobj_ops; }
+
+ /* See language.h. */
+
+ const struct exp_descriptor *expression_ops () const override
+ { return &exp_descriptor_c; }
+
+ /* See language.h. */
+
+ const struct op_print *opcode_print_table () const override
+ { return c_op_print_tab; }
+
+protected:
+
+ /* See language.h. */
+
+ symbol_name_matcher_ftype *get_symbol_name_matcher_inner
+ (const lookup_name_info &lookup_name) const override
+ {
+ return cp_get_symbol_name_matcher (lookup_name);
+ }
};
+/* The single instance of the C++ language class. */
+
+static cplus_language cplus_language_defn;
+
/* A class for the ASM language. */
class asm_language : public language_defn
{
public:
asm_language ()
- : language_defn (language_asm, asm_language_data)
+ : language_defn (language_asm)
{ /* Nothing. */ }
+ /* See language.h. */
+
+ const char *name () const override
+ { return "asm"; }
+
+ /* See language.h. */
+
+ const char *natural_name () const override
+ { return "Assembly"; }
+
+ /* See language.h. */
+
+ const std::vector<const char *> &filename_extensions () const override
+ {
+ static const std::vector<const char *> extensions
+ = { ".s", ".sx", ".S" };
+ return extensions;
+ }
+
/* See language.h.
FIXME: Should this have its own arch info method? */
{
c_print_type (type, varstring, stream, show, level, flags);
}
+
+ /* See language.h. */
+
+ bool store_sym_names_in_linkage_form_p () const override
+ { return true; }
+
+ /* See language.h. */
+
+ enum macro_expansion macro_expansion () const override
+ { return macro_expansion_c; }
+
+ /* See language.h. */
+
+ const struct exp_descriptor *expression_ops () const override
+ { return &exp_descriptor_c; }
+
+ /* See language.h. */
+
+ const struct op_print *opcode_print_table () const override
+ { return c_op_print_tab; }
};
/* The single instance of the ASM language class. */
static asm_language asm_language_defn;
-/* The following language_defn does not represent a real language.
- It just provides a minimal support a-la-C that should allow users
- to do some simple operations when debugging applications that use
+/* A class for the minimal language. This does not represent a real
+ language. It just provides a minimal support a-la-C that should allow
+ users to do some simple operations when debugging applications that use
a language currently not supported by GDB. */
-extern const struct language_data minimal_language_data =
-{
- "minimal", /* Language name */
- "Minimal",
- language_minimal,
- range_check_off,
- case_sensitive_on,
- array_row_major,
- macro_expansion_c,
- NULL,
- &exp_descriptor_c,
- c_parse,
- null_post_parser,
- c_printchar, /* Print a character constant */
- c_printstr, /* Function to print string constant */
- c_emit_char, /* Print a single char */
- c_print_typedef, /* Print a typedef using appropriate syntax */
- c_value_print_inner, /* la_value_print_inner */
- c_value_print, /* Print a top-level value */
- NULL, /* name_of_this */
- true, /* la_store_sym_names_in_linkage_form_p */
- basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
- NULL, /* Language specific
- class_name_from_physname */
- c_op_print_tab, /* expression operators for printing */
- 1, /* c-style arrays */
- 0, /* String lower bound */
- default_word_break_characters,
- default_collect_symbol_completion_matches,
- c_watch_location_expression,
- NULL, /* la_get_symbol_name_matcher */
- &default_varobj_ops,
- NULL,
- c_is_string_type_p,
- "{...}" /* la_struct_too_deep_ellipsis */
-};
-
-/* A class for the minimal language. */
-
class minimal_language : public language_defn
{
public:
minimal_language ()
- : language_defn (language_minimal, minimal_language_data)
+ : language_defn (language_minimal)
{ /* Nothing. */ }
+ /* See language.h. */
+
+ const char *name () const override
+ { return "minimal"; }
+
+ /* See language.h. */
+
+ const char *natural_name () const override
+ { return "Minimal"; }
+
/* See language.h. */
void language_arch_info (struct gdbarch *gdbarch,
struct language_arch_info *lai) const override
{
c_print_type (type, varstring, stream, show, level, flags);
}
+
+ /* See language.h. */
+
+ bool store_sym_names_in_linkage_form_p () const override
+ { return true; }
+
+ /* See language.h. */
+
+ enum macro_expansion macro_expansion () const override
+ { return macro_expansion_c; }
+
+ /* See language.h. */
+
+ const struct exp_descriptor *expression_ops () const override
+ { return &exp_descriptor_c; }
+
+ /* See language.h. */
+
+ const struct op_print *opcode_print_table () const override
+ { return c_op_print_tab; }
};
/* The single instance of the minimal language class. */