public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 4/5] Implement D primitive types in GDB
@ 2014-01-09 13:11 Iain Buclaw
  2014-01-09 18:33 ` Tom Tromey
  0 siblings, 1 reply; 8+ messages in thread
From: Iain Buclaw @ 2014-01-09 13:11 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 672 bytes --]

D has it's own type system separate from C.  This defines all
primitive types all found in D.

2014-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>

    gdb/

        * d-lang.h (struct builtin_d_type): New data type.
        (builtin_d_type): Add declaration.
        * d-lang.c (d_language_arch_info, build_d_types)
        (builtin_d_type): New functions.
        (enum d_primitive_types): New data type.
        (d_language_defn): Change c_language_arch_info to
        d_language_arch_info.
        (d_type_data): New static variable.
        (_initialize_d_language): Initialize d_type_data.

    gdb/testsuite/

        * gdb.dlang/primitive-types.exp: New file.

---

[-- Attachment #2: dlang-p4.patch --]
[-- Type: text/x-patch, Size: 11200 bytes --]

 gdb/ChangeLog                               |   12 ++
 gdb/d-lang.c                                |  181 ++++++++++++++++++++++++++-
 gdb/d-lang.h                                |   32 +++++
 gdb/testsuite/ChangeLog                     |    4 +
 gdb/testsuite/gdb.dlang/primitive-types.exp |   61 +++++++++
 5 files changed, 289 insertions(+), 1 deletion(-)

diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 2b5f9c8..e74b047 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -257,6 +257,98 @@ static const struct op_print d_op_print_tab[] =
   {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",
@@ -291,7 +383,7 @@ static const struct language_defn d_language_defn =
   0,				/* String lower bound.  */
   default_word_break_characters,
   default_make_symbol_completion_list,
-  c_language_arch_info,
+  d_language_arch_info,
   default_print_array_index,
   default_pass_by_reference,
   c_get_string,
@@ -301,11 +393,98 @@ static const struct language_defn d_language_defn =
   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);
+
+  /* Basic types.  */
+  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;
+
+  /* Imaginary and complex types.  */
+  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);
+
+  /* Character types.  */
+  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);
+}
+
 /* Provide a prototype to silence -Wmissing-prototypes.  */
 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);
 }
diff --git a/gdb/d-lang.h b/gdb/d-lang.h
index 9ede338..7a6c608 100644
--- a/gdb/d-lang.h
+++ b/gdb/d-lang.h
@@ -22,12 +22,44 @@
 
 #include "symtab.h"
 
+struct builtin_d_type
+{
+  struct type *builtin_void;
+  struct type *builtin_bool;
+  struct type *builtin_byte;
+  struct type *builtin_ubyte;
+  struct type *builtin_short;
+  struct type *builtin_ushort;
+  struct type *builtin_int;
+  struct type *builtin_uint;
+  struct type *builtin_long;
+  struct type *builtin_ulong;
+  struct type *builtin_cent;
+  struct type *builtin_ucent;
+  struct type *builtin_float;
+  struct type *builtin_double;
+  struct type *builtin_real;
+  struct type *builtin_ifloat;
+  struct type *builtin_idouble;
+  struct type *builtin_ireal;
+  struct type *builtin_cfloat;
+  struct type *builtin_cdouble;
+  struct type *builtin_creal;
+  struct type *builtin_char;
+  struct type *builtin_wchar;
+  struct type *builtin_dchar;
+};
+
 /* Defined in d-lang.c  */
 
 extern const char *d_main_name (void);
 
 extern char *d_demangle (const char *mangled, int options);
 
+extern const struct builtin_d_type *builtin_d_type (struct gdbarch *);
+
+/* Defined in d-valprint.c  */
+
 extern void d_val_print (struct type *type, const gdb_byte *valaddr,
 			 int embedded_offset, CORE_ADDR address,
 			 struct ui_file *stream, int recurse,
diff --git a/gdb/testsuite/gdb.dlang/primitive-types.exp b/gdb/testsuite/gdb.dlang/primitive-types.exp
new file mode 100644
index 0000000..2be4368
--- /dev/null
+++ b/gdb/testsuite/gdb.dlang/primitive-types.exp
@@ -0,0 +1,61 @@
+# Copyright (C) 2014 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test basic builtin types.
+# NOTE: The tests here intentionally do not require a go compiler.
+
+load_lib "d-support.exp"
+
+if { [skip_d_tests] } { continue }
+
+proc test_builtin_d_types_accepted {} {
+    # Test types are recognised.
+
+    gdb_test "ptype void" "type = void"
+    gdb_test "ptype bool" "type = bool"
+    gdb_test "ptype byte" "type = byte"
+    gdb_test "ptype ubyte" "type = ubyte"
+    gdb_test "ptype short" "type = short"
+    gdb_test "ptype ushort" "type = ushort"
+    gdb_test "ptype int" "type = int"
+    gdb_test "ptype uint" "type = uint"
+    gdb_test "ptype long" "type = long"
+    gdb_test "ptype ulong" "type = ulong"
+    gdb_test "ptype cent" "type = cent"
+    gdb_test "ptype ucent" "type = ucent"
+    gdb_test "ptype float" "type = float"
+    gdb_test "ptype double" "type = double"
+    gdb_test "ptype real" "type = real"
+    gdb_test "ptype ifloat" "type = ifloat"
+    gdb_test "ptype idouble" "type = idouble"
+    gdb_test "ptype ireal" "type = ireal"
+    gdb_test "ptype cfloat" "type = cfloat"
+    gdb_test "ptype cdouble" "type = cdouble"
+    gdb_test "ptype creal" "type = creal"
+    gdb_test "ptype char" "type = char"
+    gdb_test "ptype wchar" "type = wchar"
+    gdb_test "ptype dchar" "type = dchar"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+
+if [set_lang_d] {
+    test_builtin_d_types_accepted
+} else {
+    warning "D type tests suppressed."
+}

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/5] Implement D primitive types in GDB
  2014-01-09 13:11 [PATCH 4/5] Implement D primitive types in GDB Iain Buclaw
@ 2014-01-09 18:33 ` Tom Tromey
  2014-01-09 18:41   ` Iain Buclaw
  2014-01-10 12:57   ` Iain Buclaw
  0 siblings, 2 replies; 8+ messages in thread
From: Tom Tromey @ 2014-01-09 18:33 UTC (permalink / raw)
  To: Iain Buclaw; +Cc: gdb-patches

>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:

Iain> D has it's own type system separate from C.  This defines all
Iain> primitive types all found in D.

Thanks.  I think the guts of this patch are fine, just some nits around
the edges.

 
Iain> +enum d_primitive_types {

Comment before the new type.

Iain> +  d_primitive_type_cent,
Iain> +  d_primitive_type_ucent,

I don't think we need a comment for each enum constant, but it would be
nice for the ones that are "not obvious to C developers".  Subjective I
realize; but at least here I have no idea what "cent" means.

Iain> +  d_primitive_type_ifloat,
Iain> +  d_primitive_type_idouble,
Iain> +  d_primitive_type_ireal,

Or what the "i" prefix means.

Iain> +  d_primitive_type_cfloat,
Iain> +  d_primitive_type_cdouble,
Iain> +  d_primitive_type_creal,

"c" means complex maybe?

Iain> +static void
Iain> +d_language_arch_info (struct gdbarch *gdbarch,
Iain> +		      struct language_arch_info *lai)
Iain> +{

All new functions need intro comments.
It's fine if they are short; in a case like this where the new function
is the implementation of a language method, it can just mention which
method it implements.

Iain> +static void *
Iain> +build_d_types (struct gdbarch *gdbarch)
Iain> +{

Comment.

Iain> +const struct builtin_d_type *
Iain> +builtin_d_type (struct gdbarch *gdbarch)
Iain> +{

Comment.
 
Iain> +struct builtin_d_type
Iain> +{

Comment.  I think it's fine to refer readers back to the enum for the
meaning of fields here.

Iain> +# NOTE: The tests here intentionally do not require a go compiler.

Cut-and-pasto :)

Tom

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/5] Implement D primitive types in GDB
  2014-01-09 18:33 ` Tom Tromey
@ 2014-01-09 18:41   ` Iain Buclaw
  2014-01-10 12:57   ` Iain Buclaw
  1 sibling, 0 replies; 8+ messages in thread
From: Iain Buclaw @ 2014-01-09 18:41 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 9 January 2014 18:33, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:
>
> Iain> D has it's own type system separate from C.  This defines all
> Iain> primitive types all found in D.
>
> Thanks.  I think the guts of this patch are fine, just some nits around
> the edges.
>
>
> Iain> +enum d_primitive_types {
>
> Comment before the new type.
>
> Iain> +  d_primitive_type_cent,
> Iain> +  d_primitive_type_ucent,
>
> I don't think we need a comment for each enum constant, but it would be
> nice for the ones that are "not obvious to C developers".  Subjective I
> realize; but at least here I have no idea what "cent" means.
>
> Iain> +  d_primitive_type_ifloat,
> Iain> +  d_primitive_type_idouble,
> Iain> +  d_primitive_type_ireal,
>
> Or what the "i" prefix means.
>
> Iain> +  d_primitive_type_cfloat,
> Iain> +  d_primitive_type_cdouble,
> Iain> +  d_primitive_type_creal,
>
> "c" means complex maybe?
>

Sure, not a problem.  For reference, cent/ucent are 128bit types - not
actually implemented at all, but they have been kept around as
keywords for possible future use.  The "i" prefix is for Imaginary
numbers, and the "c" prefix is for Complex numbers.


>
> Iain> +# NOTE: The tests here intentionally do not require a go compiler.
>
> Cut-and-pasto :)
>

Aww..... :-)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/5] Implement D primitive types in GDB
  2014-01-09 18:33 ` Tom Tromey
  2014-01-09 18:41   ` Iain Buclaw
@ 2014-01-10 12:57   ` Iain Buclaw
  2014-01-10 21:18     ` Tom Tromey
  1 sibling, 1 reply; 8+ messages in thread
From: Iain Buclaw @ 2014-01-10 12:57 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 467 bytes --]

On 9 January 2014 18:33, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:
>
> Iain> D has it's own type system separate from C.  This defines all
> Iain> primitive types all found in D.
>
> Thanks.  I think the guts of this patch are fine, just some nits around
> the edges.
>

Comments duly noted and rebased patch.  Though I have a feeling you
may ask to comment non-static functions in their declared headers. :)

[-- Attachment #2: dlang-p4.patch --]
[-- Type: text/x-patch, Size: 12269 bytes --]

 gdb/ChangeLog                               |   12 ++
 gdb/d-lang.c                                |  186 ++++++++++++++++++++++++++-
 gdb/d-lang.h                                |   36 ++++++
 gdb/testsuite/ChangeLog                     |    4 +
 gdb/testsuite/gdb.dlang/primitive-types.exp |   61 +++++++++
 5 files changed, 298 insertions(+), 1 deletion(-)

diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index b693829..efd0813 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -257,6 +257,101 @@ static const struct op_print d_op_print_tab[] =
   {NULL, 0, 0, 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
+};
+
+/* Implements the la_language_arch_info language_defn routine
+   for language D.  */
+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",
@@ -291,7 +386,7 @@ static const struct language_defn d_language_defn =
   0,				/* String lower bound.  */
   default_word_break_characters,
   default_make_symbol_completion_list,
-  c_language_arch_info,
+  d_language_arch_info,
   default_print_array_index,
   default_pass_by_reference,
   c_get_string,
@@ -301,11 +396,100 @@ static const struct language_defn d_language_defn =
   LANG_MAGIC
 };
 
+/* Build all D language types for the specified architecture.  */
+static void *
+build_d_types (struct gdbarch *gdbarch)
+{
+  struct builtin_d_type *builtin_d_type
+    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_d_type);
+
+  /* Basic types.  */
+  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;
+
+  /* Imaginary and complex types.  */
+  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);
+
+  /* Character types.  */
+  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;
+
+/* Return the D type table for the specified architecture.  */
+const struct builtin_d_type *
+builtin_d_type (struct gdbarch *gdbarch)
+{
+  return gdbarch_data (gdbarch, d_type_data);
+}
+
 /* Provide a prototype to silence -Wmissing-prototypes.  */
 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);
 }
diff --git a/gdb/d-lang.h b/gdb/d-lang.h
index 9ede338..455c808 100644
--- a/gdb/d-lang.h
+++ b/gdb/d-lang.h
@@ -22,12 +22,48 @@
 
 #include "symtab.h"
 
+/* Language specific builtin types for D.  Any additional types added
+   should be kept in sync with enum d_primitive_types, where these
+   types are documented.  */
+
+struct builtin_d_type
+{
+  struct type *builtin_void;
+  struct type *builtin_bool;
+  struct type *builtin_byte;
+  struct type *builtin_ubyte;
+  struct type *builtin_short;
+  struct type *builtin_ushort;
+  struct type *builtin_int;
+  struct type *builtin_uint;
+  struct type *builtin_long;
+  struct type *builtin_ulong;
+  struct type *builtin_cent;
+  struct type *builtin_ucent;
+  struct type *builtin_float;
+  struct type *builtin_double;
+  struct type *builtin_real;
+  struct type *builtin_ifloat;
+  struct type *builtin_idouble;
+  struct type *builtin_ireal;
+  struct type *builtin_cfloat;
+  struct type *builtin_cdouble;
+  struct type *builtin_creal;
+  struct type *builtin_char;
+  struct type *builtin_wchar;
+  struct type *builtin_dchar;
+};
+
 /* Defined in d-lang.c  */
 
 extern const char *d_main_name (void);
 
 extern char *d_demangle (const char *mangled, int options);
 
+extern const struct builtin_d_type *builtin_d_type (struct gdbarch *);
+
+/* Defined in d-valprint.c  */
+
 extern void d_val_print (struct type *type, const gdb_byte *valaddr,
 			 int embedded_offset, CORE_ADDR address,
 			 struct ui_file *stream, int recurse,
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index d61cec2..d532558 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,9 @@
 2014-01-07  Iain Buclaw  <ibuclaw@gdcproject.org>
 
+	* gdb.dlang/primitive-types.exp: New file.
+
+2014-01-07  Iain Buclaw  <ibuclaw@gdcproject.org>
+
 	* configure.ac: Create gdb.dlang/Makefile.
 	* configure: Regenerate.
 	* Makefile.in (ALL_SUBDIRS): Add gdb.dlang.
diff --git a/gdb/testsuite/gdb.dlang/primitive-types.exp b/gdb/testsuite/gdb.dlang/primitive-types.exp
new file mode 100644
index 0000000..7bbdd25
--- /dev/null
+++ b/gdb/testsuite/gdb.dlang/primitive-types.exp
@@ -0,0 +1,61 @@
+# Copyright (C) 2014 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test basic builtin types.
+# NOTE: The tests here intentionally do not require a D compiler.
+
+load_lib "d-support.exp"
+
+if { [skip_d_tests] } { continue }
+
+proc test_builtin_d_types_accepted {} {
+    # Test types are recognised.
+
+    gdb_test "ptype void" "type = void"
+    gdb_test "ptype bool" "type = bool"
+    gdb_test "ptype byte" "type = byte"
+    gdb_test "ptype ubyte" "type = ubyte"
+    gdb_test "ptype short" "type = short"
+    gdb_test "ptype ushort" "type = ushort"
+    gdb_test "ptype int" "type = int"
+    gdb_test "ptype uint" "type = uint"
+    gdb_test "ptype long" "type = long"
+    gdb_test "ptype ulong" "type = ulong"
+    gdb_test "ptype cent" "type = cent"
+    gdb_test "ptype ucent" "type = ucent"
+    gdb_test "ptype float" "type = float"
+    gdb_test "ptype double" "type = double"
+    gdb_test "ptype real" "type = real"
+    gdb_test "ptype ifloat" "type = ifloat"
+    gdb_test "ptype idouble" "type = idouble"
+    gdb_test "ptype ireal" "type = ireal"
+    gdb_test "ptype cfloat" "type = cfloat"
+    gdb_test "ptype cdouble" "type = cdouble"
+    gdb_test "ptype creal" "type = creal"
+    gdb_test "ptype char" "type = char"
+    gdb_test "ptype wchar" "type = wchar"
+    gdb_test "ptype dchar" "type = dchar"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+
+if [set_lang_d] {
+    test_builtin_d_types_accepted
+} else {
+    warning "D type tests suppressed."
+}

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/5] Implement D primitive types in GDB
  2014-01-10 12:57   ` Iain Buclaw
@ 2014-01-10 21:18     ` Tom Tromey
  2014-01-11 16:39       ` Iain Buclaw
  0 siblings, 1 reply; 8+ messages in thread
From: Tom Tromey @ 2014-01-10 21:18 UTC (permalink / raw)
  To: Iain Buclaw; +Cc: gdb-patches

>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:

Iain> Comments duly noted and rebased patch.  Though I have a feeling you
Iain> may ask to comment non-static functions in their declared headers. :)

That's like the one thing gdb doesn't have a pedantic standard for.
Yet :)  At some point Stan will presumably push in his doxygen change
and then we'll start converting to that.

Iain> +/* Mapping of all D basic data types into the language vector.  */
Iain> +enum d_primitive_types {

Space between the comment and the definition.
Yeah, that pedantic.

Iain> +  d_primitive_type_cent,    /* signed 128 bit integer */

Comments have to start with an upper-case letter and end with a period
and two spaces.

Iain> +/* Implements the la_language_arch_info language_defn routine
Iain> +   for language D.  */
Iain> +static void

Blank line here and elsewhere.

This is ok with those nits fixed.

Tom

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/5] Implement D primitive types in GDB
  2014-01-10 21:18     ` Tom Tromey
@ 2014-01-11 16:39       ` Iain Buclaw
  2014-01-13 20:03         ` Tom Tromey
  0 siblings, 1 reply; 8+ messages in thread
From: Iain Buclaw @ 2014-01-11 16:39 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 209 bytes --]

On 10 January 2014 21:18, Tom Tromey <tromey@redhat.com> wrote:
>
> Blank line here and elsewhere.
>
> This is ok with those nits fixed.
>

Third time a charm.  Re-done with your nits fixed.

Regards
Iain
---

[-- Attachment #2: dlang-p4.patch --]
[-- Type: text/x-diff, Size: 11843 bytes --]

 gdb/ChangeLog                               |  12 ++
 gdb/d-lang.c                                | 190 +++++++++++++++++++++++++++-
 gdb/d-lang.h                                |  36 ++++++
 gdb/testsuite/ChangeLog                     |   4 +
 gdb/testsuite/gdb.dlang/primitive-types.exp |  61 +++++++++
 5 files changed, 302 insertions(+), 1 deletion(-)

diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index b693829..71a2524 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -257,6 +257,103 @@ static const struct op_print d_op_print_tab[] =
   {NULL, 0, 0, 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
+};
+
+/* Implements the la_language_arch_info language_defn routine
+   for language D.  */
+
+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",
@@ -291,7 +388,7 @@ static const struct language_defn d_language_defn =
   0,				/* String lower bound.  */
   default_word_break_characters,
   default_make_symbol_completion_list,
-  c_language_arch_info,
+  d_language_arch_info,
   default_print_array_index,
   default_pass_by_reference,
   c_get_string,
@@ -301,11 +398,102 @@ static const struct language_defn d_language_defn =
   LANG_MAGIC
 };
 
+/* Build all D language types for the specified architecture.  */
+
+static void *
+build_d_types (struct gdbarch *gdbarch)
+{
+  struct builtin_d_type *builtin_d_type
+    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_d_type);
+
+  /* Basic types.  */
+  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;
+
+  /* Imaginary and complex types.  */
+  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);
+
+  /* Character types.  */
+  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;
+
+/* Return the D type table for the specified architecture.  */
+
+const struct builtin_d_type *
+builtin_d_type (struct gdbarch *gdbarch)
+{
+  return gdbarch_data (gdbarch, d_type_data);
+}
+
 /* Provide a prototype to silence -Wmissing-prototypes.  */
 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);
 }
diff --git a/gdb/d-lang.h b/gdb/d-lang.h
index 9ede338..455c808 100644
--- a/gdb/d-lang.h
+++ b/gdb/d-lang.h
@@ -22,12 +22,48 @@
 
 #include "symtab.h"
 
+/* Language specific builtin types for D.  Any additional types added
+   should be kept in sync with enum d_primitive_types, where these
+   types are documented.  */
+
+struct builtin_d_type
+{
+  struct type *builtin_void;
+  struct type *builtin_bool;
+  struct type *builtin_byte;
+  struct type *builtin_ubyte;
+  struct type *builtin_short;
+  struct type *builtin_ushort;
+  struct type *builtin_int;
+  struct type *builtin_uint;
+  struct type *builtin_long;
+  struct type *builtin_ulong;
+  struct type *builtin_cent;
+  struct type *builtin_ucent;
+  struct type *builtin_float;
+  struct type *builtin_double;
+  struct type *builtin_real;
+  struct type *builtin_ifloat;
+  struct type *builtin_idouble;
+  struct type *builtin_ireal;
+  struct type *builtin_cfloat;
+  struct type *builtin_cdouble;
+  struct type *builtin_creal;
+  struct type *builtin_char;
+  struct type *builtin_wchar;
+  struct type *builtin_dchar;
+};
+
 /* Defined in d-lang.c  */
 
 extern const char *d_main_name (void);
 
 extern char *d_demangle (const char *mangled, int options);
 
+extern const struct builtin_d_type *builtin_d_type (struct gdbarch *);
+
+/* Defined in d-valprint.c  */
+
 extern void d_val_print (struct type *type, const gdb_byte *valaddr,
 			 int embedded_offset, CORE_ADDR address,
 			 struct ui_file *stream, int recurse,
diff --git a/gdb/testsuite/gdb.dlang/primitive-types.exp b/gdb/testsuite/gdb.dlang/primitive-types.exp
new file mode 100644
index 0000000..7bbdd25
--- /dev/null
+++ b/gdb/testsuite/gdb.dlang/primitive-types.exp
@@ -0,0 +1,61 @@
+# Copyright (C) 2014 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test basic builtin types.
+# NOTE: The tests here intentionally do not require a D compiler.
+
+load_lib "d-support.exp"
+
+if { [skip_d_tests] } { continue }
+
+proc test_builtin_d_types_accepted {} {
+    # Test types are recognised.
+
+    gdb_test "ptype void" "type = void"
+    gdb_test "ptype bool" "type = bool"
+    gdb_test "ptype byte" "type = byte"
+    gdb_test "ptype ubyte" "type = ubyte"
+    gdb_test "ptype short" "type = short"
+    gdb_test "ptype ushort" "type = ushort"
+    gdb_test "ptype int" "type = int"
+    gdb_test "ptype uint" "type = uint"
+    gdb_test "ptype long" "type = long"
+    gdb_test "ptype ulong" "type = ulong"
+    gdb_test "ptype cent" "type = cent"
+    gdb_test "ptype ucent" "type = ucent"
+    gdb_test "ptype float" "type = float"
+    gdb_test "ptype double" "type = double"
+    gdb_test "ptype real" "type = real"
+    gdb_test "ptype ifloat" "type = ifloat"
+    gdb_test "ptype idouble" "type = idouble"
+    gdb_test "ptype ireal" "type = ireal"
+    gdb_test "ptype cfloat" "type = cfloat"
+    gdb_test "ptype cdouble" "type = cdouble"
+    gdb_test "ptype creal" "type = creal"
+    gdb_test "ptype char" "type = char"
+    gdb_test "ptype wchar" "type = wchar"
+    gdb_test "ptype dchar" "type = dchar"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+
+if [set_lang_d] {
+    test_builtin_d_types_accepted
+} else {
+    warning "D type tests suppressed."
+}

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/5] Implement D primitive types in GDB
  2014-01-11 16:39       ` Iain Buclaw
@ 2014-01-13 20:03         ` Tom Tromey
  2014-01-18 18:23           ` Iain Buclaw
  0 siblings, 1 reply; 8+ messages in thread
From: Tom Tromey @ 2014-01-13 20:03 UTC (permalink / raw)
  To: Iain Buclaw; +Cc: gdb-patches

>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:

Iain> Third time a charm.  Re-done with your nits fixed.

Thanks, this is ok.

Tom

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/5] Implement D primitive types in GDB
  2014-01-13 20:03         ` Tom Tromey
@ 2014-01-18 18:23           ` Iain Buclaw
  0 siblings, 0 replies; 8+ messages in thread
From: Iain Buclaw @ 2014-01-18 18:23 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 13 January 2014 20:03, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:
>
> Iain> Third time a charm.  Re-done with your nits fixed.
>
> Thanks, this is ok.
>
> Tom

Thanks, have now pushed this in.

Regards
Iain

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-01-18 18:23 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-09 13:11 [PATCH 4/5] Implement D primitive types in GDB Iain Buclaw
2014-01-09 18:33 ` Tom Tromey
2014-01-09 18:41   ` Iain Buclaw
2014-01-10 12:57   ` Iain Buclaw
2014-01-10 21:18     ` Tom Tromey
2014-01-11 16:39       ` Iain Buclaw
2014-01-13 20:03         ` Tom Tromey
2014-01-18 18:23           ` Iain Buclaw

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).