gdb: move go_language class declaration into header file
Move the go_language class into go-lang.h, this allows us to have member functions implemented directly in the different go-*.c files instead of having to trampoline out to global functions. There should be no user visible changes after this commit. gdb/ChangeLog: * go-exp.y (go_parse): Rename to... (go_language::parser): ...this. * go-lang.c (go_demangle): Rename to... (go_language::demangle_symbol): ...this. (go_language::expression_ops): Implementation moved here out of class declaration. (go_op_print_tab): Rename to... (go_language::op_print_tab): ...this, update comment. (class go_language): Declaration moved to go-lang.h. (go_language::language_arch_info): Implementation moved here out of class declaration. * go-lang.h (go_parse): Delete declaration. (go_demangle): Delete declaration. (go_print_type): Delete declaration. (go_value_print_inner): Delete declaration. (class go_language): Declaration moved here from go-lang.c. * go-typeprint.c (go_print_type): Rename to... (go_language::print_type): ...this. * go-valprint.c (go_value_print_inner): Rename to... (go_language::value_print_inner): ...this. * symtab.c (demangle_for_lookup): Call demangle_symbol method on the go_language object.
This commit is contained in:
parent
76ca72bc5b
commit
82fc57fd6b
7 changed files with 159 additions and 138 deletions
|
@ -56,34 +56,100 @@ enum go_type
|
|||
GO_TYPE_STRING
|
||||
};
|
||||
|
||||
/* Defined in go-exp.y. */
|
||||
|
||||
extern int go_parse (struct parser_state *);
|
||||
|
||||
/* Defined in go-lang.c. */
|
||||
|
||||
extern const char *go_main_name (void);
|
||||
|
||||
extern enum go_type go_classify_struct_type (struct type *type);
|
||||
|
||||
extern char *go_demangle (const char *mangled, int options);
|
||||
|
||||
extern char *go_symbol_package_name (const struct symbol *sym);
|
||||
|
||||
extern char *go_block_package_name (const struct block *block);
|
||||
|
||||
extern const struct builtin_go_type *builtin_go_type (struct gdbarch *);
|
||||
|
||||
/* Defined in go-typeprint.c. */
|
||||
/* Class representing the Go language. */
|
||||
|
||||
extern void go_print_type (struct type *type, const char *varstring,
|
||||
struct ui_file *stream, int show, int level,
|
||||
const struct type_print_options *flags);
|
||||
class go_language : public language_defn
|
||||
{
|
||||
public:
|
||||
go_language ()
|
||||
: language_defn (language_go)
|
||||
{ /* Nothing. */ }
|
||||
|
||||
/* Implement la_value_print_inner for Go. */
|
||||
/* See language.h. */
|
||||
|
||||
extern void go_value_print_inner (struct value *value,
|
||||
struct ui_file *stream, int recurse,
|
||||
const struct value_print_options *options);
|
||||
const char *name () const override
|
||||
{ return "go"; }
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
const char *natural_name () const override
|
||||
{ return "Go"; }
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
void language_arch_info (struct gdbarch *gdbarch,
|
||||
struct language_arch_info *lai) const override;
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
bool sniff_from_mangled_name (const char *mangled,
|
||||
char **demangled) const override
|
||||
{
|
||||
*demangled = demangle_symbol (mangled, 0);
|
||||
return *demangled != NULL;
|
||||
}
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
char *demangle_symbol (const char *mangled, int options) const override;
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
void print_type (struct type *type, const char *varstring,
|
||||
struct ui_file *stream, int show, int level,
|
||||
const struct type_print_options *flags) const override;
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
void value_print_inner
|
||||
(struct value *val, struct ui_file *stream, int recurse,
|
||||
const struct value_print_options *options) const override;
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
int parser (struct parser_state *ps) const override;
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
bool is_string_type_p (struct type *type) const override
|
||||
{
|
||||
type = check_typedef (type);
|
||||
return (type->code () == TYPE_CODE_STRUCT
|
||||
&& go_classify_struct_type (type) == GO_TYPE_STRING);
|
||||
}
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
bool store_sym_names_in_linkage_form_p () const override
|
||||
{ return true; }
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
const struct exp_descriptor *expression_ops () const override;
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
const struct op_print *opcode_print_table () const override
|
||||
{ return op_print_tab; }
|
||||
|
||||
private:
|
||||
|
||||
/* Table of opcode data for use by OPCODE_PRINT_TABLE member function. */
|
||||
|
||||
static const struct op_print op_print_tab[];
|
||||
|
||||
};
|
||||
|
||||
#endif /* !defined (GO_LANG_H) */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue