GDB (xrefs)
/tmp/gdb-7.10/gdb/d-lang.c
Go to the documentation of this file.
1 /* D language support routines for GDB, the GNU debugger.
2 
3  Copyright (C) 2005-2015 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
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.
11 
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.
16 
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/>. */
19 
20 #include "defs.h"
21 #include "symtab.h"
22 #include "language.h"
23 #include "varobj.h"
24 #include "d-lang.h"
25 #include "c-lang.h"
26 #include "demangle.h"
27 #include "cp-support.h"
28 
29 /* The name of the symbol to use to get the name of the main subprogram. */
30 static const char D_MAIN[] = "D main";
31 
32 /* Function returning the special symbol name used by D for the main
33  procedure in the main program if it is found in minimal symbol list.
34  This function tries to find minimal symbols so that it finds them even
35  if the program was compiled without debugging information. */
36 
37 const char *
39 {
40  struct bound_minimal_symbol msym;
41 
42  msym = lookup_minimal_symbol (D_MAIN, NULL, NULL);
43  if (msym.minsym != NULL)
44  return D_MAIN;
45 
46  /* No known entry procedure found, the main program is probably not D. */
47  return NULL;
48 }
49 
50 /* Implements the la_demangle language_defn routine for language D. */
51 
52 char *
53 d_demangle (const char *symbol, int options)
54 {
55  return gdb_demangle (symbol, options | DMGL_DLANG);
56 }
57 
58 /* Table mapping opcodes into strings for printing operators
59  and precedences of the operators. */
60 static const struct op_print d_op_print_tab[] =
61 {
62  {",", BINOP_COMMA, PREC_COMMA, 0},
63  {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
64  {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
65  {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
66  {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
67  {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
68  {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
69  {"==", BINOP_EQUAL, PREC_ORDER, 0},
70  {"!=", BINOP_NOTEQUAL, PREC_ORDER, 0},
71  {"<=", BINOP_LEQ, PREC_ORDER, 0},
72  {">=", BINOP_GEQ, PREC_ORDER, 0},
73  {">", BINOP_GTR, PREC_ORDER, 0},
74  {"<", BINOP_LESS, PREC_ORDER, 0},
75  {">>", BINOP_RSH, PREC_SHIFT, 0},
76  {"<<", BINOP_LSH, PREC_SHIFT, 0},
77  {"+", BINOP_ADD, PREC_ADD, 0},
78  {"-", BINOP_SUB, PREC_ADD, 0},
79  {"~", BINOP_CONCAT, PREC_ADD, 0},
80  {"*", BINOP_MUL, PREC_MUL, 0},
81  {"/", BINOP_DIV, PREC_MUL, 0},
82  {"%", BINOP_REM, PREC_MUL, 0},
83  {"^^", BINOP_EXP, PREC_REPEAT, 0},
84  {"@", BINOP_REPEAT, PREC_REPEAT, 0},
85  {"-", UNOP_NEG, PREC_PREFIX, 0},
86  {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
87  {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
88  {"*", UNOP_IND, PREC_PREFIX, 0},
89  {"&", UNOP_ADDR, PREC_PREFIX, 0},
90  {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
91  {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
92  {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
93  {NULL, 0, 0, 0}
94 };
95 
96 /* Mapping of all D basic data types into the language vector. */
97 
109  d_primitive_type_cent, /* Signed 128 bit integer. */
110  d_primitive_type_ucent, /* Unsigned 128 bit integer. */
114  d_primitive_type_ifloat, /* Imaginary float types. */
117  d_primitive_type_cfloat, /* Complex number of two float values. */
120  d_primitive_type_char, /* Unsigned character types. */
124 };
125 
126 /* Implements the la_language_arch_info language_defn routine
127  for language D. */
128 
129 static void
131  struct language_arch_info *lai)
132 {
133  const struct builtin_d_type *builtin = builtin_d_type (gdbarch);
134 
135  lai->string_char_type = builtin->builtin_char;
138  struct type *);
139 
141  = builtin->builtin_void;
143  = builtin->builtin_bool;
145  = builtin->builtin_byte;
147  = builtin->builtin_ubyte;
149  = builtin->builtin_short;
151  = builtin->builtin_ushort;
153  = builtin->builtin_int;
155  = builtin->builtin_uint;
157  = builtin->builtin_long;
159  = builtin->builtin_ulong;
161  = builtin->builtin_cent;
163  = builtin->builtin_ucent;
165  = builtin->builtin_float;
167  = builtin->builtin_double;
169  = builtin->builtin_real;
171  = builtin->builtin_ifloat;
173  = builtin->builtin_idouble;
175  = builtin->builtin_ireal;
177  = builtin->builtin_cfloat;
179  = builtin->builtin_cdouble;
181  = builtin->builtin_creal;
183  = builtin->builtin_char;
185  = builtin->builtin_wchar;
187  = builtin->builtin_dchar;
188 
189  lai->bool_type_symbol = "bool";
190  lai->bool_type_default = builtin->builtin_bool;
191 }
192 
193 static const struct language_defn d_language_defn =
194 {
195  "d",
196  "D",
197  language_d,
203  d_parse,
204  d_error,
206  c_printchar, /* Print a character constant. */
207  c_printstr, /* Function to print string constant. */
208  c_emit_char, /* Print a single char. */
209  c_print_type, /* Print a type using appropriate syntax. */
210  c_print_typedef, /* Print a typedef using appropriate
211  syntax. */
212  d_val_print, /* Print a value using appropriate syntax. */
213  c_value_print, /* Print a top-level value. */
214  default_read_var_value, /* la_read_var_value */
215  NULL, /* Language specific skip_trampoline. */
216  "this",
219  d_demangle, /* Language specific symbol demangler. */
220  NULL, /* Language specific
221  class_name_from_physname. */
222  d_op_print_tab, /* Expression operators for printing. */
223  1, /* C-style arrays. */
224  0, /* String lower bound. */
226  default_make_symbol_completion_list,
230  c_get_string,
231  NULL, /* la_get_symbol_name_cmp */
234  NULL,
235  NULL,
236  LANG_MAGIC
237 };
238 
239 /* Build all D language types for the specified architecture. */
240 
241 static void *
243 {
245  = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_d_type);
246 
247  /* Basic types. */
248  builtin_d_type->builtin_void
249  = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
250  builtin_d_type->builtin_bool
251  = arch_boolean_type (gdbarch, 8, 1, "bool");
252  builtin_d_type->builtin_byte
253  = arch_integer_type (gdbarch, 8, 0, "byte");
254  builtin_d_type->builtin_ubyte
255  = arch_integer_type (gdbarch, 8, 1, "ubyte");
256  builtin_d_type->builtin_short
257  = arch_integer_type (gdbarch, 16, 0, "short");
258  builtin_d_type->builtin_ushort
259  = arch_integer_type (gdbarch, 16, 1, "ushort");
260  builtin_d_type->builtin_int
261  = arch_integer_type (gdbarch, 32, 0, "int");
262  builtin_d_type->builtin_uint
263  = arch_integer_type (gdbarch, 32, 1, "uint");
264  builtin_d_type->builtin_long
265  = arch_integer_type (gdbarch, 64, 0, "long");
266  builtin_d_type->builtin_ulong
267  = arch_integer_type (gdbarch, 64, 1, "ulong");
268  builtin_d_type->builtin_cent
269  = arch_integer_type (gdbarch, 128, 0, "cent");
270  builtin_d_type->builtin_ucent
271  = arch_integer_type (gdbarch, 128, 1, "ucent");
272  builtin_d_type->builtin_float
273  = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
274  "float", NULL);
275  builtin_d_type->builtin_double
276  = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
277  "double", NULL);
278  builtin_d_type->builtin_real
279  = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
280  "real", NULL);
281 
282  TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_byte)
284  TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_ubyte)
286 
287  /* Imaginary and complex types. */
288  builtin_d_type->builtin_ifloat
289  = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
290  "ifloat", NULL);
291  builtin_d_type->builtin_idouble
292  = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
293  "idouble", NULL);
294  builtin_d_type->builtin_ireal
295  = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
296  "ireal", NULL);
297  builtin_d_type->builtin_cfloat
298  = arch_complex_type (gdbarch, "cfloat",
299  builtin_d_type->builtin_float);
300  builtin_d_type->builtin_cdouble
301  = arch_complex_type (gdbarch, "cdouble",
302  builtin_d_type->builtin_double);
303  builtin_d_type->builtin_creal
304  = arch_complex_type (gdbarch, "creal",
305  builtin_d_type->builtin_real);
306 
307  /* Character types. */
308  builtin_d_type->builtin_char
309  = arch_character_type (gdbarch, 8, 1, "char");
310  builtin_d_type->builtin_wchar
311  = arch_character_type (gdbarch, 16, 1, "wchar");
312  builtin_d_type->builtin_dchar
313  = arch_character_type (gdbarch, 32, 1, "dchar");
314 
315  return builtin_d_type;
316 }
317 
318 static struct gdbarch_data *d_type_data;
319 
320 /* Return the D type table for the specified architecture. */
321 
322 const struct builtin_d_type *
324 {
325  return gdbarch_data (gdbarch, d_type_data);
326 }
327 
328 /* Provide a prototype to silence -Wmissing-prototypes. */
330 
331 void
333 {
335 
336  add_language (&d_language_defn);
337 }
void d_val_print(struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, const struct value *val, const struct value_print_options *options)
Definition: d-valprint.c:76
static struct gdbarch_data * d_type_data
Definition: d-lang.c:318
struct type * builtin_dchar
Definition: d-lang.h:54
struct type * arch_boolean_type(struct gdbarch *gdbarch, int bit, int unsigned_p, char *name)
Definition: gdbtypes.c:4588
#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE)
Definition: gdbarch.h:1614
void d_error(char *)
struct type * arch_float_type(struct gdbarch *gdbarch, int bit, char *name, const struct floatformat **floatformats)
Definition: gdbtypes.c:4606
struct type * arch_complex_type(struct gdbarch *gdbarch, char *name, struct type *target_type)
Definition: gdbtypes.c:4628
void * gdbarch_data(struct gdbarch *gdbarch, struct gdbarch_data *data)
Definition: gdbarch.c:4845
struct type * builtin_ucent
Definition: d-lang.h:42
struct type * builtin_char
Definition: d-lang.h:52
struct value * default_read_var_value(struct symbol *var, struct frame_info *frame)
Definition: findvar.c:416
struct type * builtin_int
Definition: d-lang.h:37
struct type * builtin_cfloat
Definition: d-lang.h:49
struct type * builtin_uint
Definition: d-lang.h:38
struct type * string_char_type
Definition: language.h:120
struct type * builtin_ushort
Definition: d-lang.h:36
void add_language(const struct language_defn *lang)
Definition: language.c:518
void c_get_string(struct value *value, gdb_byte **buffer, int *length, struct type **char_type, const char **charset)
Definition: c-lang.c:239
#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE)
Definition: gdbarch.h:1615
struct type * arch_character_type(struct gdbarch *gdbarch, int bit, int unsigned_p, char *name)
Definition: gdbtypes.c:4571
char * gdb_demangle(const char *name, int options)
Definition: cp-support.c:1529
#define TYPE_INSTANCE_FLAGS(thistype)
Definition: gdbtypes.h:1225
char * default_word_break_characters(void)
Definition: language.c:669
struct type * builtin_void
Definition: d-lang.h:31
const struct exp_descriptor exp_descriptor_c
Definition: c-lang.c:818
struct type * builtin_ireal
Definition: d-lang.h:48
struct type * bool_type_default
Definition: language.h:125
void null_post_parser(struct expression **exp, int void_context_p)
Definition: parse.c:1358
void initialize_file_ftype(void)
Definition: defs.h:281
void c_emit_char(int c, struct type *type, struct ui_file *stream, int quoter)
Definition: c-lang.c:146
const char * bool_type_symbol
Definition: language.h:123
int default_pass_by_reference(struct type *type)
Definition: language.c:659
struct type * basic_lookup_transparent_type(const char *name)
Definition: symtab.c:2851
Definition: gdbtypes.h:749
int d_parse(struct parser_state *par_state)
Definition: d-exp.c:3368
static const char D_MAIN[]
Definition: d-lang.c:30
int gdbarch_double_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1624
void iterate_over_symbols(const struct block *block, const char *name, const domain_enum domain, symbol_found_callback_ftype *callback, void *data)
Definition: symtab.c:2912
struct type * builtin_byte
Definition: d-lang.h:33
void default_print_array_index(struct value *index_value, struct ui_file *stream, const struct value_print_options *options)
Definition: language.c:677
struct type * builtin_short
Definition: d-lang.h:35
struct type * arch_integer_type(struct gdbarch *gdbarch, int bit, int unsigned_p, char *name)
Definition: gdbtypes.c:4552
static void d_language_arch_info(struct gdbarch *gdbarch, struct language_arch_info *lai)
Definition: d-lang.c:130
initialize_file_ftype _initialize_d_language
void c_print_typedef(struct type *, struct symbol *, struct ui_file *)
Definition: c-typeprint.c:143
void c_printstr(struct ui_file *stream, struct type *type, const gdb_byte *string, unsigned int length, const char *user_encoding, int force_ellipses, const struct value_print_options *options)
Definition: c-lang.c:189
struct type * builtin_long
Definition: d-lang.h:39
struct type * builtin_cent
Definition: d-lang.h:41
d_primitive_types
Definition: d-lang.c:98
struct type * builtin_ulong
Definition: d-lang.h:40
struct type * builtin_ifloat
Definition: d-lang.h:46
struct type * builtin_double
Definition: d-lang.h:44
struct type * builtin_float
Definition: d-lang.h:43
#define default_varobj_ops
Definition: varobj.h:233
char * d_demangle(const char *symbol, int options)
Definition: d-lang.c:53
void c_print_type(struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *)
Definition: c-typeprint.c:80
int gdbarch_float_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1591
struct type * builtin_creal
Definition: d-lang.h:51
struct type * builtin_real
Definition: d-lang.h:45
static const struct op_print d_op_print_tab[]
Definition: d-lang.c:60
const char * d_main_name(void)
Definition: d-lang.c:38
struct symbol * basic_lookup_symbol_nonlocal(const struct language_defn *langdef, const char *name, const struct block *block, const domain_enum domain)
Definition: symtab.c:2481
void c_printchar(int c, struct type *type, struct ui_file *stream)
Definition: c-lang.c:156
Definition: symtab.h:703
static void * build_d_types(struct gdbarch *gdbarch)
Definition: d-lang.c:242
struct type * builtin_idouble
Definition: d-lang.h:47
struct type * arch_type(struct gdbarch *gdbarch, enum type_code code, int length, char *name)
Definition: gdbtypes.c:4532
#define LANG_MAGIC
Definition: language.h:402
struct type * builtin_ubyte
Definition: d-lang.h:34
int gdbarch_long_double_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1657
struct type ** primitive_type_vector
Definition: language.h:113
struct bound_minimal_symbol lookup_minimal_symbol(const char *name, const char *sfile, struct objfile *objf)
Definition: minsyms.c:163
void c_value_print(struct value *, struct ui_file *, const struct value_print_options *)
Definition: c-valprint.c:459
struct gdbarch_data * gdbarch_data_register_post_init(gdbarch_data_post_init_ftype *post_init)
Definition: gdbarch.c:4812
struct type * builtin_bool
Definition: d-lang.h:32
struct type * builtin_wchar
Definition: d-lang.h:53
struct type * builtin_cdouble
Definition: d-lang.h:50
const struct builtin_d_type * builtin_d_type(struct gdbarch *gdbarch)
Definition: d-lang.c:323