[binutils-gdb] Add is_array_like and to_array to language_defn

Tom Tromey tromey@sourceware.org
Tue Sep 19 19:34:21 GMT 2023


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=26733fc7477ac675df9215b46bf3f3af1dd80186

commit 26733fc7477ac675df9215b46bf3f3af1dd80186
Author: Tom Tromey <tromey@adacore.com>
Date:   Tue Sep 5 13:08:29 2023 -0600

    Add is_array_like and to_array to language_defn
    
    This adds new is_array_like and to_array methods to language_defn.
    This will be used in a subsequent patch that generalizes the new
    Python array- and string-handling code.

Diff:
---
 gdb/ada-lang.c  | 13 +++++++++++++
 gdb/language.h  | 11 +++++++++++
 gdb/rust-lang.h | 10 ++++++++++
 3 files changed, 34 insertions(+)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index b9a271bc126..53d53e0ffa5 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -13830,6 +13830,19 @@ public:
 
   /* See language.h.  */
 
+  bool is_array_like (struct type *type) const override
+  {
+    return (ada_is_constrained_packed_array_type (type)
+	    || ada_is_array_descriptor_type (type));
+  }
+
+  /* See language.h.  */
+
+  struct value *to_array (struct value *val) const override
+  { return ada_coerce_to_simple_array (val); }
+
+  /* See language.h.  */
+
   const char *struct_too_deep_ellipsis () const override
   { return "(...)"; }
 
diff --git a/gdb/language.h b/gdb/language.h
index 9fd2fb6f387..6ee8f6160e1 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -568,6 +568,17 @@ struct language_defn
   /* Return true if TYPE is a string type.  */
   virtual bool is_string_type_p (struct type *type) const;
 
+  /* Return true if TYPE is array-like.  */
+  virtual bool is_array_like (struct type *type) const
+  { return false; }
+
+  /* Underlying implementation of value_to_array.  Return a value of
+     array type that corresponds to VAL.  The caller must ensure that
+     is_array_like is true for VAL's type.  Return nullptr if the type
+     cannot be handled.  */
+  virtual struct value *to_array (struct value *val) const
+  { return nullptr; }
+
   /* Return a string that is used by the 'set print max-depth' setting.
      When GDB replaces a struct or union (during value printing) that is
      "too deep" this string is displayed instead.  The default value here
diff --git a/gdb/rust-lang.h b/gdb/rust-lang.h
index 2c7ccb93bcf..ce1dff211b6 100644
--- a/gdb/rust-lang.h
+++ b/gdb/rust-lang.h
@@ -196,6 +196,16 @@ public:
 
   /* See language.h.  */
 
+  bool is_array_like (struct type *type) const override
+  { return rust_slice_type_p (type); }
+
+  /* See language.h.  */
+
+  struct value *to_array (struct value *val) const override
+  { return rust_slice_to_array (val); }
+
+  /* See language.h.  */
+
   bool range_checking_on_by_default () const override
   { return true; }


More information about the Gdb-cvs mailing list