1 /* Go language support definitions for GDB, the GNU debugger.
3 Copyright (C) 2012-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #if !defined (GO_LANG_H)
23 struct type_print_options
;
32 struct builtin_go_type
34 struct type
*builtin_void
= nullptr;
35 struct type
*builtin_char
= nullptr;
36 struct type
*builtin_bool
= nullptr;
37 struct type
*builtin_int
= nullptr;
38 struct type
*builtin_uint
= nullptr;
39 struct type
*builtin_uintptr
= nullptr;
40 struct type
*builtin_int8
= nullptr;
41 struct type
*builtin_int16
= nullptr;
42 struct type
*builtin_int32
= nullptr;
43 struct type
*builtin_int64
= nullptr;
44 struct type
*builtin_uint8
= nullptr;
45 struct type
*builtin_uint16
= nullptr;
46 struct type
*builtin_uint32
= nullptr;
47 struct type
*builtin_uint64
= nullptr;
48 struct type
*builtin_float32
= nullptr;
49 struct type
*builtin_float64
= nullptr;
50 struct type
*builtin_complex64
= nullptr;
51 struct type
*builtin_complex128
= nullptr;
56 GO_TYPE_NONE
, /* Not a Go object. */
60 /* Defined in go-lang.c. */
62 extern const char *go_main_name (void);
64 extern enum go_type
go_classify_struct_type (struct type
*type
);
66 /* Given a symbol, return its package or nullptr if unknown. */
67 extern gdb::unique_xmalloc_ptr
<char> go_symbol_package_name
68 (const struct symbol
*sym
);
70 /* Return the package that BLOCK is in, or nullptr if there isn't
72 extern gdb::unique_xmalloc_ptr
<char> go_block_package_name
73 (const struct block
*block
);
75 extern const struct builtin_go_type
*builtin_go_type (struct gdbarch
*);
77 /* Class representing the Go language. */
79 class go_language
: public language_defn
83 : language_defn (language_go
)
88 const char *name () const override
93 const char *natural_name () const override
98 void language_arch_info (struct gdbarch
*gdbarch
,
99 struct language_arch_info
*lai
) const override
;
101 /* See language.h. */
103 bool sniff_from_mangled_name
104 (const char *mangled
, gdb::unique_xmalloc_ptr
<char> *demangled
)
107 *demangled
= demangle_symbol (mangled
, 0);
108 return *demangled
!= NULL
;
111 /* See language.h. */
113 gdb::unique_xmalloc_ptr
<char> demangle_symbol (const char *mangled
,
114 int options
) const override
;
116 /* See language.h. */
118 void print_type (struct type
*type
, const char *varstring
,
119 struct ui_file
*stream
, int show
, int level
,
120 const struct type_print_options
*flags
) const override
;
122 /* See language.h. */
124 void value_print_inner
125 (struct value
*val
, struct ui_file
*stream
, int recurse
,
126 const struct value_print_options
*options
) const override
;
128 /* See language.h. */
130 int parser (struct parser_state
*ps
) const override
;
132 /* See language.h. */
134 bool is_string_type_p (struct type
*type
) const override
136 type
= check_typedef (type
);
137 return (type
->code () == TYPE_CODE_STRUCT
138 && go_classify_struct_type (type
) == GO_TYPE_STRING
);
141 /* See language.h. */
143 bool store_sym_names_in_linkage_form_p () const override
147 #endif /* !defined (GO_LANG_H) */