/* Go language support routines for GDB, the GNU debugger.
- Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ Copyright (C) 2012-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "go-lang.h"
#include "c-lang.h"
#include "parser-defs.h"
+#include "gdbarch.h"
#include <ctype.h>
sixg_string_p (struct type *type)
{
if (TYPE_NFIELDS (type) == 2
- && TYPE_TAG_NAME (type) != NULL
- && strcmp (TYPE_TAG_NAME (type), "string") == 0)
+ && TYPE_NAME (type) != NULL
+ && strcmp (TYPE_NAME (type), "string") == 0)
return 1;
return 0;
return GO_TYPE_NONE;
}
+/* Return true if TYPE is a string. */
+
+static bool
+go_is_string_type_p (struct type *type)
+{
+ type = check_typedef (type);
+ return (TYPE_CODE (type) == TYPE_CODE_STRUCT
+ && go_classify_struct_type (type) == GO_TYPE_STRING);
+}
+
/* Subroutine of unpack_mangled_go_symbol to simplify it.
Given "[foo.]bar.baz", store "bar" in *PACKAGEP and "baz" in *OBJECTP.
We stomp on the last '.' to nul-terminate "bar".
char *
go_symbol_package_name (const struct symbol *sym)
{
- const char *mangled_name = SYMBOL_LINKAGE_NAME (sym);
+ const char *mangled_name = sym->linkage_name ();
const char *package_name;
const char *object_name;
const char *method_type_package_name;
char *name_buf;
char *result;
- gdb_assert (SYMBOL_LANGUAGE (sym) == language_go);
+ gdb_assert (sym->language () == language_go);
name_buf = unpack_mangled_go_symbol (mangled_name,
&package_name, &object_name,
&method_type_package_name,
NULL,
&exp_descriptor_c,
go_parse,
- go_yyerror,
null_post_parser,
c_printchar, /* Print a character constant. */
c_printstr, /* Function to print string constant. */
go_print_type, /* Print a type using appropriate syntax. */
c_print_typedef, /* Print a typedef using appropriate
syntax. */
- go_val_print, /* Print a value using appropriate syntax. */
+ go_value_print_inner, /* la_value_print_inner */
c_value_print, /* Print a top-level value. */
default_read_var_value, /* la_read_var_value */
NULL, /* Language specific skip_trampoline. */
NULL, /* name_of_this */
+ false, /* la_store_sym_names_in_linkage_form_p */
basic_lookup_symbol_nonlocal,
basic_lookup_transparent_type,
go_demangle, /* Language specific symbol demangler. */
go_language_arch_info,
default_print_array_index,
default_pass_by_reference,
- c_get_string,
c_watch_location_expression,
- NULL, /* la_get_symbol_name_cmp */
+ NULL, /* la_get_symbol_name_matcher */
iterate_over_symbols,
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
- LANG_MAGIC
+ go_is_string_type_p,
+ "{...}" /* la_struct_too_deep_ellipsis */
};
static void *
builtin_go_type->builtin_float64
= arch_float_type (gdbarch, 64, "float64", floatformats_ieee_double);
builtin_go_type->builtin_complex64
- = arch_complex_type (gdbarch, "complex64",
- builtin_go_type->builtin_float32);
+ = init_complex_type ("complex64", builtin_go_type->builtin_float32);
builtin_go_type->builtin_complex128
- = arch_complex_type (gdbarch, "complex128",
- builtin_go_type->builtin_float64);
+ = init_complex_type ("complex128", builtin_go_type->builtin_float64);
return builtin_go_type;
}
return (const struct builtin_go_type *) gdbarch_data (gdbarch, go_type_data);
}
+void _initialize_go_language ();
void
-_initialize_go_language (void)
+_initialize_go_language ()
{
go_type_data = gdbarch_data_register_post_init (build_go_types);
}