From 0a9dd0c7d31cbba2170fdfda4b747a1fe5ce665a Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 31 Mar 2022 13:34:36 +0200 Subject: Use own type information instead of dynamic_cast in target::is_a() --- libbuild2/target-type.hxx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'libbuild2/target-type.hxx') diff --git a/libbuild2/target-type.hxx b/libbuild2/target-type.hxx index 0e24e3a..ef3a3ed 100644 --- a/libbuild2/target-type.hxx +++ b/libbuild2/target-type.hxx @@ -102,14 +102,15 @@ namespace build2 bool is_a (const target_type& tt) const { - return this == &tt || (base != nullptr && is_a_base (tt)); + for (const target_type* b (this); b != nullptr; b = b->base) + if (b == &tt) + return true; + + return false; } bool is_a (const char*) const; // Defined in target.cxx - - bool - is_a_base (const target_type&) const; // Defined in target.cxx }; inline bool -- cgit v1.1