From 1b863ead550f1e85e44552434d310b71705dd8e5 Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 23 Aug 2019 13:15:10 +0200 Subject: [PATCH] cppparser: fix finding types in explicitly specialized template class --- dtool/src/cppparser/cppIdentifier.cxx | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/dtool/src/cppparser/cppIdentifier.cxx b/dtool/src/cppparser/cppIdentifier.cxx index 43c937177b..e339baf24e 100644 --- a/dtool/src/cppparser/cppIdentifier.cxx +++ b/dtool/src/cppparser/cppIdentifier.cxx @@ -254,19 +254,23 @@ get_scope(CPPScope *current_scope, CPPScope *global_scope, } while (i + 1 < (int)_names.size() && scope != nullptr) { - CPPScope *next_scope = scope->find_scope(_names[i].get_name(), global_scope); + // Check for an explicitly specialized scope first. + CPPScope *next_scope = scope->find_scope(_names[i].get_name_with_templ(), global_scope); if (next_scope == nullptr) { - if (error_sink != nullptr) { - error_sink->error("Symbol " + _names[i].get_name() + - " is not a known scope in " + - scope->get_fully_scoped_name(), - _loc); + next_scope = scope->find_scope(_names[i].get_name(), global_scope); + if (next_scope == nullptr) { + if (error_sink != nullptr) { + error_sink->error("Symbol " + _names[i].get_name() + + " is not a known scope in " + + scope->get_fully_scoped_name(), + _loc); + } + return nullptr; + } + if (_names[i].has_templ()) { + next_scope = next_scope->instantiate(_names[i].get_templ(), + current_scope, global_scope); } - return nullptr; - } - if (_names[i].has_templ()) { - next_scope = next_scope->instantiate(_names[i].get_templ(), - current_scope, global_scope); } scope = next_scope; i++;