+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
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)
{
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. */
/* 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. */
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. */
/* 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;