From cbbcd7a716d7f1f65c57aa6ba6e034ecb9a78378 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 16 Nov 2020 19:15:00 +0000 Subject: [PATCH] language_lookup_primitive_type, std::function -> gdb::function_view 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): 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 | 17 +++++++++++++++++ gdb/language.c | 31 +++++++++++++++++++------------ gdb/language.h | 25 ++++++++++++++++++------- gdb/opencl-lang.c | 2 +- 4 files changed, 55 insertions(+), 20 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 45c92748ec9..1208b4a5b21 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,20 @@ +2020-11-20 Pedro Alves + + * 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): 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 PR tdep/26916 diff --git a/gdb/language.c b/gdb/language.c index 579cf9198c8..5e64e6af45f 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -1088,7 +1088,7 @@ language_arch_info::lookup_primitive_type (const char *name) struct type * language_arch_info::lookup_primitive_type - (std::function filter) + (gdb::function_view 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 -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 arg); + gdb::function_view filter) +{ + return language_lookup_primitive_type_1 (la, gdbarch, filter); +} /* See language.h. */ diff --git a/gdb/language.h b/gdb/language.h index 1b602646651..e955340440d 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -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 filter); + (gdb::function_view 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 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 filter); /* Wrapper around language_lookup_primitive_type to return the corresponding symbol. */ diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index e04fc546f63..830a6acaaab 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -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 filter = [&] (struct type *type) + auto filter = [&] (struct type *type) { LONGEST lowb, highb; -- 2.30.2