language_lookup_primitive_type, std::function -> gdb::function_view
authorPedro Alves <pedro@palves.net>
Mon, 16 Nov 2020 19:15:00 +0000 (19:15 +0000)
committerPedro Alves <pedro@palves.net>
Fri, 20 Nov 2020 13:27:01 +0000 (13:27 +0000)
gdb/ChangeLog:

* language.c (language_arch_info::lookup_primitive_type): Use
gdb::function_view instead of gdb::function.
(template language_lookup_primitive_type): Rename to ...
(language_lookup_primitive_type_1): ... this, and make static.
(language_lookup_primitive_type(const struct language_defn *,
struct gdbarch *, const char *): Make non-template.
(language_lookup_primitive_type(const struct language_defn *,
struct gdbarch *, std::function<bool (struct type *)>): Make
non-template and use gdb::function_view.
* language.h (language_arch_info::lookup_primitive_type): Use
gdb::function_view instead of std::function.
(language_lookup_primitive_type): No longer template.
* opencl-lang.c (lookup_opencl_vector_type): 'filter' is now a
lambda instead of a std::function.

gdb/ChangeLog
gdb/language.c
gdb/language.h
gdb/opencl-lang.c

index 45c92748ec945ba7821cc768aab9067da11e5ffd..1208b4a5b215faa09b4b2076d7a721c8f6babbd2 100644 (file)
@@ -1,3 +1,20 @@
+2020-11-20  Pedro Alves  <pedro@palves.net>
+
+       * language.c (language_arch_info::lookup_primitive_type): Use
+       gdb::function_view instead of gdb::function.
+       (template language_lookup_primitive_type): Rename to ...
+       (language_lookup_primitive_type_1): ... this, and make static.
+       (language_lookup_primitive_type(const struct language_defn *,
+       struct gdbarch *, const char *): Make non-template.
+       (language_lookup_primitive_type(const struct language_defn *,
+       struct gdbarch *, std::function<bool (struct type *)>): Make
+       non-template and use gdb::function_view.
+       * language.h (language_arch_info::lookup_primitive_type): Use
+       gdb::function_view instead of std::function.
+       (language_lookup_primitive_type): No longer template.
+       * opencl-lang.c (lookup_opencl_vector_type): 'filter' is now a
+       lambda instead of a std::function.
+
 2020-11-19  Andreas Arnez  <arnez@linux.ibm.com>
 
        PR tdep/26916
index 579cf9198c80c1ca7e14b7e36c21cdbb6c013481..5e64e6af45fc0ac64050483e15d02a37e08e88f2 100644 (file)
@@ -1088,7 +1088,7 @@ language_arch_info::lookup_primitive_type (const char *name)
 
 struct type *
 language_arch_info::lookup_primitive_type
-       (std::function<bool (struct type *)> filter)
+  (gdb::function_view<bool (struct type *)> filter)
 {
   for (struct type_and_symbol &tas : primitive_types_and_symbols)
     {
@@ -1111,32 +1111,39 @@ language_arch_info::lookup_primitive_type_as_symbol (const char *name,
   return nullptr;
 }
 
-/* See language.h.  */
+/* Helper for the language_lookup_primitive_type overloads to forward
+   to the corresponding language's lookup_primitive_type overload.  */
 
 template<typename T>
-struct type *
-language_lookup_primitive_type (const struct language_defn *la,
-                               struct gdbarch *gdbarch,
-                               T arg)
+static struct type *
+language_lookup_primitive_type_1 (const struct language_defn *la,
+                                 struct gdbarch *gdbarch,
+                                 T arg)
 {
   struct language_gdbarch *ld =
     (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
   return ld->arch_info[la->la_language].lookup_primitive_type (arg);
 }
 
-/* Template instantiation.  */
+/* See language.h.  */
 
-template struct type *
+struct type *
 language_lookup_primitive_type (const struct language_defn *la,
                                struct gdbarch *gdbarch,
-                               const char *arg);
+                               const char *name)
+{
+  return language_lookup_primitive_type_1 (la, gdbarch, name);
+}
 
-/* Template instantiation.  */
+/* See language.h.  */
 
-template struct type *
+struct type *
 language_lookup_primitive_type (const struct language_defn *la,
                                struct gdbarch *gdbarch,
-                               std::function<bool (struct type *)> arg);
+                               gdb::function_view<bool (struct type *)> filter)
+{
+  return language_lookup_primitive_type_1 (la, gdbarch, filter);
+}
 
 /* See language.h.  */
 
index 1b60264665184be9bd5d51ad393871baf3d8482e..e955340440de57d269c86a2770b0b6ea06a51bfc 100644 (file)
@@ -140,7 +140,7 @@ struct language_arch_info
   /* Lookup a primitive type for which FILTER returns true.  Will return
      nullptr if no matching type is found.  */
   struct type *lookup_primitive_type
-       (std::function<bool (struct type *)> filter);
+    (gdb::function_view<bool (struct type *)> filter);
 
   /* Lookup a primitive type called NAME and return the type as a symbol.
      LANG is the language for which type is being looked up.  */
@@ -719,15 +719,26 @@ struct type *language_bool_type (const struct language_defn *l,
 struct type *language_string_char_type (const struct language_defn *l,
                                        struct gdbarch *gdbarch);
 
-/* Look up a type from the set of OS/ABI specific types defined in GDBARCH
-   for language L.  ARG is used for selecting the matching type, and is
-   passed through to the corresponding lookup_primitive_type member
-   function inside the language_arch_info class.  */
+/* Look up a type from the set of OS/ABI specific types defined in
+   GDBARCH for language L.  NAME is used for selecting the matching
+   type, and is passed through to the corresponding
+   lookup_primitive_type member function inside the language_arch_info
+   class.  */
 
-template<typename T>
 struct type *language_lookup_primitive_type (const struct language_defn *l,
                                             struct gdbarch *gdbarch,
-                                            T arg);
+                                            const char *name);
+
+/* Look up a type from the set of OS/ABI specific types defined in
+   GDBARCH for language L.  FILTER is used for selecting the matching
+   type, and is passed through to the corresponding
+   lookup_primitive_type member function inside the language_arch_info
+   class.  */
+
+struct type *language_lookup_primitive_type
+  (const struct language_defn *la,
+   struct gdbarch *gdbarch,
+   gdb::function_view<bool (struct type *)> filter);
 
 /* Wrapper around language_lookup_primitive_type to return the
    corresponding symbol.  */
index e04fc546f635d582309984f0034b173afa29bc36..830a6acaaabc317043ca02fe8b1fed3ec516f114 100644 (file)
@@ -46,7 +46,7 @@ lookup_opencl_vector_type (struct gdbarch *gdbarch, enum type_code code,
   /* Triple vectors have the size of a quad vector.  */
   length = (n == 3) ?  el_length * 4 : el_length * n;
 
-  std::function<bool (struct type *)> filter = [&] (struct type *type)
+  auto filter = [&] (struct type *type)
   {
     LONGEST lowb, highb;