aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2023-09-05 13:08:29 -0600
committerTom Tromey <tromey@adacore.com>2023-09-19 13:28:42 -0600
commit26733fc7477ac675df9215b46bf3f3af1dd80186 (patch)
treebcb9181bf1c84e5bc434a28b303a01107a59350e /gdb
parentd948c67c5d6599581e5045f03e67dc90855efc87 (diff)
downloadgdb-26733fc7477ac675df9215b46bf3f3af1dd80186.zip
gdb-26733fc7477ac675df9215b46bf3f3af1dd80186.tar.gz
gdb-26733fc7477ac675df9215b46bf3f3af1dd80186.tar.bz2
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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ada-lang.c13
-rw-r--r--gdb/language.h11
-rw-r--r--gdb/rust-lang.h10
3 files changed, 34 insertions, 0 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index b9a271b..53d53e0 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 9fd2fb6..6ee8f61 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 2c7ccb9..ce1dff2 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; }