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<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.
This commit is contained in:
Pedro Alves 2020-11-16 19:15:00 +00:00
parent e6f6aa8d18
commit cbbcd7a716
4 changed files with 55 additions and 20 deletions

View 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> 2020-11-19 Andreas Arnez <arnez@linux.ibm.com>
PR tdep/26916 PR tdep/26916

View file

@ -1088,7 +1088,7 @@ language_arch_info::lookup_primitive_type (const char *name)
struct type * struct type *
language_arch_info::lookup_primitive_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) for (struct type_and_symbol &tas : primitive_types_and_symbols)
{ {
@ -1111,11 +1111,12 @@ language_arch_info::lookup_primitive_type_as_symbol (const char *name,
return nullptr; 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> template<typename T>
struct type * static struct type *
language_lookup_primitive_type (const struct language_defn *la, language_lookup_primitive_type_1 (const struct language_defn *la,
struct gdbarch *gdbarch, struct gdbarch *gdbarch,
T arg) T arg)
{ {
@ -1124,19 +1125,25 @@ language_lookup_primitive_type (const struct language_defn *la,
return ld->arch_info[la->la_language].lookup_primitive_type (arg); 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, language_lookup_primitive_type (const struct language_defn *la,
struct gdbarch *gdbarch, 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, language_lookup_primitive_type (const struct language_defn *la,
struct gdbarch *gdbarch, 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. */ /* See language.h. */

View file

@ -140,7 +140,7 @@ struct language_arch_info
/* Lookup a primitive type for which FILTER returns true. Will return /* Lookup a primitive type for which FILTER returns true. Will return
nullptr if no matching type is found. */ nullptr if no matching type is found. */
struct type *lookup_primitive_type 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. /* Lookup a primitive type called NAME and return the type as a symbol.
LANG is the language for which type is being looked up. */ 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 type *language_string_char_type (const struct language_defn *l,
struct gdbarch *gdbarch); struct gdbarch *gdbarch);
/* Look up a type from the set of OS/ABI specific types defined in GDBARCH /* Look up a type from the set of OS/ABI specific types defined in
for language L. ARG is used for selecting the matching type, and is GDBARCH for language L. NAME is used for selecting the matching
passed through to the corresponding lookup_primitive_type member type, and is passed through to the corresponding
function inside the language_arch_info class. */ 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 type *language_lookup_primitive_type (const struct language_defn *l,
struct gdbarch *gdbarch, 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 /* Wrapper around language_lookup_primitive_type to return the
corresponding symbol. */ corresponding symbol. */

View 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. */ /* Triple vectors have the size of a quad vector. */
length = (n == 3) ? el_length * 4 : el_length * n; 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; LONGEST lowb, highb;