gdb/d-lang.c - gdb
Global variables defined
Data types defined
Functions defined
Source code
- #include "defs.h"
- #include "symtab.h"
- #include "language.h"
- #include "varobj.h"
- #include "d-lang.h"
- #include "c-lang.h"
- #include "demangle.h"
- #include "cp-support.h"
- static const char D_MAIN[] = "D main";
- const char *
- d_main_name (void)
- {
- struct bound_minimal_symbol msym;
- msym = lookup_minimal_symbol (D_MAIN, NULL, NULL);
- if (msym.minsym != NULL)
- return D_MAIN;
-
- return NULL;
- }
- char *
- d_demangle (const char *symbol, int options)
- {
- return gdb_demangle (symbol, options | DMGL_DLANG);
- }
- static const struct op_print d_op_print_tab[] =
- {
- {",", BINOP_COMMA, PREC_COMMA, 0},
- {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
- {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
- {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
- {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
- {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
- {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
- {"==", BINOP_EQUAL, PREC_ORDER, 0},
- {"!=", BINOP_NOTEQUAL, PREC_ORDER, 0},
- {"<=", BINOP_LEQ, PREC_ORDER, 0},
- {">=", BINOP_GEQ, PREC_ORDER, 0},
- {">", BINOP_GTR, PREC_ORDER, 0},
- {"<", BINOP_LESS, PREC_ORDER, 0},
- {">>", BINOP_RSH, PREC_SHIFT, 0},
- {"<<", BINOP_LSH, PREC_SHIFT, 0},
- {"+", BINOP_ADD, PREC_ADD, 0},
- {"-", BINOP_SUB, PREC_ADD, 0},
- {"~", BINOP_CONCAT, PREC_ADD, 0},
- {"*", BINOP_MUL, PREC_MUL, 0},
- {"/", BINOP_DIV, PREC_MUL, 0},
- {"%", BINOP_REM, PREC_MUL, 0},
- {"^^", BINOP_EXP, PREC_REPEAT, 0},
- {"@", BINOP_REPEAT, PREC_REPEAT, 0},
- {"-", UNOP_NEG, PREC_PREFIX, 0},
- {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
- {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
- {"*", UNOP_IND, PREC_PREFIX, 0},
- {"&", UNOP_ADDR, PREC_PREFIX, 0},
- {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
- {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
- {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
- {NULL, 0, 0, 0}
- };
- enum d_primitive_types {
- d_primitive_type_void,
- d_primitive_type_bool,
- d_primitive_type_byte,
- d_primitive_type_ubyte,
- d_primitive_type_short,
- d_primitive_type_ushort,
- d_primitive_type_int,
- d_primitive_type_uint,
- d_primitive_type_long,
- d_primitive_type_ulong,
- d_primitive_type_cent,
- d_primitive_type_ucent,
- d_primitive_type_float,
- d_primitive_type_double,
- d_primitive_type_real,
- d_primitive_type_ifloat,
- d_primitive_type_idouble,
- d_primitive_type_ireal,
- d_primitive_type_cfloat,
- d_primitive_type_cdouble,
- d_primitive_type_creal,
- d_primitive_type_char,
- d_primitive_type_wchar,
- d_primitive_type_dchar,
- nr_d_primitive_types
- };
- static void
- d_language_arch_info (struct gdbarch *gdbarch,
- struct language_arch_info *lai)
- {
- const struct builtin_d_type *builtin = builtin_d_type (gdbarch);
- lai->string_char_type = builtin->builtin_char;
- lai->primitive_type_vector
- = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_d_primitive_types + 1,
- struct type *);
- lai->primitive_type_vector [d_primitive_type_void]
- = builtin->builtin_void;
- lai->primitive_type_vector [d_primitive_type_bool]
- = builtin->builtin_bool;
- lai->primitive_type_vector [d_primitive_type_byte]
- = builtin->builtin_byte;
- lai->primitive_type_vector [d_primitive_type_ubyte]
- = builtin->builtin_ubyte;
- lai->primitive_type_vector [d_primitive_type_short]
- = builtin->builtin_short;
- lai->primitive_type_vector [d_primitive_type_ushort]
- = builtin->builtin_ushort;
- lai->primitive_type_vector [d_primitive_type_int]
- = builtin->builtin_int;
- lai->primitive_type_vector [d_primitive_type_uint]
- = builtin->builtin_uint;
- lai->primitive_type_vector [d_primitive_type_long]
- = builtin->builtin_long;
- lai->primitive_type_vector [d_primitive_type_ulong]
- = builtin->builtin_ulong;
- lai->primitive_type_vector [d_primitive_type_cent]
- = builtin->builtin_cent;
- lai->primitive_type_vector [d_primitive_type_ucent]
- = builtin->builtin_ucent;
- lai->primitive_type_vector [d_primitive_type_float]
- = builtin->builtin_float;
- lai->primitive_type_vector [d_primitive_type_double]
- = builtin->builtin_double;
- lai->primitive_type_vector [d_primitive_type_real]
- = builtin->builtin_real;
- lai->primitive_type_vector [d_primitive_type_ifloat]
- = builtin->builtin_ifloat;
- lai->primitive_type_vector [d_primitive_type_idouble]
- = builtin->builtin_idouble;
- lai->primitive_type_vector [d_primitive_type_ireal]
- = builtin->builtin_ireal;
- lai->primitive_type_vector [d_primitive_type_cfloat]
- = builtin->builtin_cfloat;
- lai->primitive_type_vector [d_primitive_type_cdouble]
- = builtin->builtin_cdouble;
- lai->primitive_type_vector [d_primitive_type_creal]
- = builtin->builtin_creal;
- lai->primitive_type_vector [d_primitive_type_char]
- = builtin->builtin_char;
- lai->primitive_type_vector [d_primitive_type_wchar]
- = builtin->builtin_wchar;
- lai->primitive_type_vector [d_primitive_type_dchar]
- = builtin->builtin_dchar;
- lai->bool_type_symbol = "bool";
- lai->bool_type_default = builtin->builtin_bool;
- }
- static const struct language_defn d_language_defn =
- {
- "d",
- "D",
- language_d,
- range_check_off,
- case_sensitive_on,
- array_row_major,
- macro_expansion_no,
- &exp_descriptor_c,
- d_parse,
- d_error,
- null_post_parser,
- c_printchar,
- c_printstr,
- c_emit_char,
- c_print_type,
- c_print_typedef,
- d_val_print,
- c_value_print,
- default_read_var_value,
- NULL,
- "this",
- basic_lookup_symbol_nonlocal,
- basic_lookup_transparent_type,
- d_demangle,
- NULL,
- d_op_print_tab,
- 1,
- 0,
- default_word_break_characters,
- default_make_symbol_completion_list,
- d_language_arch_info,
- default_print_array_index,
- default_pass_by_reference,
- c_get_string,
- NULL,
- iterate_over_symbols,
- &default_varobj_ops,
- NULL,
- NULL,
- LANG_MAGIC
- };
- static void *
- build_d_types (struct gdbarch *gdbarch)
- {
- struct builtin_d_type *builtin_d_type
- = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_d_type);
-
- builtin_d_type->builtin_void
- = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
- builtin_d_type->builtin_bool
- = arch_boolean_type (gdbarch, 8, 1, "bool");
- builtin_d_type->builtin_byte
- = arch_integer_type (gdbarch, 8, 0, "byte");
- builtin_d_type->builtin_ubyte
- = arch_integer_type (gdbarch, 8, 1, "ubyte");
- builtin_d_type->builtin_short
- = arch_integer_type (gdbarch, 16, 0, "short");
- builtin_d_type->builtin_ushort
- = arch_integer_type (gdbarch, 16, 1, "ushort");
- builtin_d_type->builtin_int
- = arch_integer_type (gdbarch, 32, 0, "int");
- builtin_d_type->builtin_uint
- = arch_integer_type (gdbarch, 32, 1, "uint");
- builtin_d_type->builtin_long
- = arch_integer_type (gdbarch, 64, 0, "long");
- builtin_d_type->builtin_ulong
- = arch_integer_type (gdbarch, 64, 1, "ulong");
- builtin_d_type->builtin_cent
- = arch_integer_type (gdbarch, 128, 0, "cent");
- builtin_d_type->builtin_ucent
- = arch_integer_type (gdbarch, 128, 1, "ucent");
- builtin_d_type->builtin_float
- = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
- "float", NULL);
- builtin_d_type->builtin_double
- = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
- "double", NULL);
- builtin_d_type->builtin_real
- = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
- "real", NULL);
- TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_byte)
- |= TYPE_INSTANCE_FLAG_NOTTEXT;
- TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_ubyte)
- |= TYPE_INSTANCE_FLAG_NOTTEXT;
-
- builtin_d_type->builtin_ifloat
- = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
- "ifloat", NULL);
- builtin_d_type->builtin_idouble
- = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
- "idouble", NULL);
- builtin_d_type->builtin_ireal
- = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
- "ireal", NULL);
- builtin_d_type->builtin_cfloat
- = arch_complex_type (gdbarch, "cfloat",
- builtin_d_type->builtin_float);
- builtin_d_type->builtin_cdouble
- = arch_complex_type (gdbarch, "cdouble",
- builtin_d_type->builtin_double);
- builtin_d_type->builtin_creal
- = arch_complex_type (gdbarch, "creal",
- builtin_d_type->builtin_real);
-
- builtin_d_type->builtin_char
- = arch_character_type (gdbarch, 8, 1, "char");
- builtin_d_type->builtin_wchar
- = arch_character_type (gdbarch, 16, 1, "wchar");
- builtin_d_type->builtin_dchar
- = arch_character_type (gdbarch, 32, 1, "dchar");
- return builtin_d_type;
- }
- static struct gdbarch_data *d_type_data;
- const struct builtin_d_type *
- builtin_d_type (struct gdbarch *gdbarch)
- {
- return gdbarch_data (gdbarch, d_type_data);
- }
- extern initialize_file_ftype _initialize_d_language;
- void
- _initialize_d_language (void)
- {
- d_type_data = gdbarch_data_register_post_init (build_d_types);
- add_language (&d_language_defn);
- }