Add is_array_like and to_array to language_defn
authorTom Tromey <tromey@adacore.com>
Tue, 5 Sep 2023 19:08:29 +0000 (13:08 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 19 Sep 2023 19:28:42 +0000 (13:28 -0600)
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.

gdb/ada-lang.c
gdb/language.h
gdb/rust-lang.h

index b9a271bc12689a29aa4ce2dffc929386ced4297d..53d53e0ffa588669f22432f665f0559055ca411e 100644 (file)
@@ -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 "(...)"; }
 
index 9fd2fb6f3876390f69174e002c785ce07cbaf487..6ee8f6160e14fab1b36aae3ccf15cd05a978ce7d 100644 (file)
@@ -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
index 2c7ccb93bcf368e8c999d3b5f33f245431dbde09..ce1dff211b6f373ca4517e2203a8dd872ec419b0 100644 (file)
@@ -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; }