gdb: fix vfork with multiple threads
[deliverable/binutils-gdb.git] / gdb / d-lang.c
index ff2bdf0fe2e5d911f8fcd39436770cf6a9b3d94f..6c9b730cf41bd558d6c02a88c526ab60eff8aa22 100644 (file)
@@ -1,6 +1,6 @@
 /* D language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,6 +26,7 @@
 #include "demangle.h"
 #include "cp-support.h"
 #include "gdbarch.h"
+#include "parser-defs.h"
 
 /* The name of the symbol to use to get the name of the main subprogram.  */
 static const char D_MAIN[] = "D main";
@@ -56,104 +57,13 @@ d_demangle (const char *symbol, int options)
   return gdb_demangle (symbol, options | DMGL_DLANG);
 }
 
-/* Table mapping opcodes into strings for printing operators
-   and precedences of the operators.  */
-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, OP_NULL, PREC_PREFIX, 0}
-};
-
-/* Mapping of all D basic data types into the language vector.  */
-
-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,    /* Signed 128 bit integer.  */
-  d_primitive_type_ucent,   /* Unsigned 128 bit integer.  */
-  d_primitive_type_float,
-  d_primitive_type_double,
-  d_primitive_type_real,
-  d_primitive_type_ifloat,  /* Imaginary float types.  */
-  d_primitive_type_idouble,
-  d_primitive_type_ireal,
-  d_primitive_type_cfloat,  /* Complex number of two float values.  */
-  d_primitive_type_cdouble,
-  d_primitive_type_creal,
-  d_primitive_type_char,    /* Unsigned character types.  */
-  d_primitive_type_wchar,
-  d_primitive_type_dchar,
-  nr_d_primitive_types
-};
-
-static const char * const d_extensions[] =
-{
-  ".d", NULL
-};
-
-/* Constant data that describes the D language.  */
-
-extern const struct language_data d_language_data =
-{
-  language_d,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_no,
-  d_extensions,
-  &exp_descriptor_c,
-  false,                       /* la_store_sym_names_in_linkage_form_p */
-  d_op_print_tab,              /* Expression operators for printing.  */
-  1,                           /* C-style arrays.  */
-  0,                           /* String lower bound.  */
-  &default_varobj_ops,
-};
-
 /* Class representing the D language.  */
 
 class d_language : public language_defn
 {
 public:
   d_language ()
-    : language_defn (language_d, d_language_data)
+    : language_defn (language_d)
   { /* Nothing.  */ }
 
   /* See language.h.  */
@@ -166,68 +76,53 @@ public:
   const char *natural_name () const override
   { return "D"; }
 
+  /* See language.h.  */
+
+  const std::vector<const char *> &filename_extensions () const override
+  {
+    static const std::vector<const char *> extensions = { ".d" };
+    return extensions;
+  }
+
   /* See language.h.  */
   void language_arch_info (struct gdbarch *gdbarch,
                           struct language_arch_info *lai) const override
   {
     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;
+    /* Helper function to allow shorter lines below.  */
+    auto add  = [&] (struct type * t)
+    {
+      lai->add_primitive_type (t);
+    };
+
+    add (builtin->builtin_void);
+    add (builtin->builtin_bool);
+    add (builtin->builtin_byte);
+    add (builtin->builtin_ubyte);
+    add (builtin->builtin_short);
+    add (builtin->builtin_ushort);
+    add (builtin->builtin_int);
+    add (builtin->builtin_uint);
+    add (builtin->builtin_long);
+    add (builtin->builtin_ulong);
+    add (builtin->builtin_cent);
+    add (builtin->builtin_ucent);
+    add (builtin->builtin_float);
+    add (builtin->builtin_double);
+    add (builtin->builtin_real);
+    add (builtin->builtin_ifloat);
+    add (builtin->builtin_idouble);
+    add (builtin->builtin_ireal);
+    add (builtin->builtin_cfloat);
+    add (builtin->builtin_cdouble);
+    add (builtin->builtin_creal);
+    add (builtin->builtin_char);
+    add (builtin->builtin_wchar);
+    add (builtin->builtin_dchar);
+
+    lai->set_string_char_type (builtin->builtin_char);
+    lai->set_bool_type (builtin->builtin_bool, "bool");
   }
 
   /* See language.h.  */
@@ -240,7 +135,7 @@ public:
 
   /* See language.h.  */
 
-  char *demangle (const char *mangled, int options) const override
+  char *demangle_symbol (const char *mangled, int options) const override
   {
     return d_demangle (mangled, options);
   }
This page took 0.027648 seconds and 4 git commands to generate.