From 439a3c0bd9e2c81082de2cdf0ff8352828bd5364 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Tue, 14 Apr 2015 00:22:12 +0200 Subject: Fix utterly broken ReferenceType generation. --- src/core/parser/ParserScope.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'src/core') diff --git a/src/core/parser/ParserScope.cpp b/src/core/parser/ParserScope.cpp index e3b50b9..ed35839 100644 --- a/src/core/parser/ParserScope.cpp +++ b/src/core/parser/ParserScope.cpp @@ -371,9 +371,9 @@ bool ParserScope::resolveType(const std::vector &path, // If only the '@' is given, create and return an empty reference // type. if (first.size() == 1 && path.size() == 1) { - resultCallback( - new ReferenceType(owner->getManager(), "@", nullptr), owner, - logger); + Rooted ref{ + new ReferenceType(owner->getManager(), "@", nullptr)}; + resultCallback(ref, owner, logger); return true; } @@ -381,8 +381,20 @@ bool ParserScope::resolveType(const std::vector &path, // class "Descriptor" std::vector p = path; p.front() = first.substr(1, first.size() - 1); - return resolve(&RttiTypes::Descriptor, p, owner, logger, - resultCallback); + std::string name = "@" + p.back(); + return resolve( + &RttiTypes::Descriptor, p, owner, logger, + [resultCallback, name](Handle resolved, + Handle owner, Logger &logger) { + if (resolved != nullptr) { + Rooted ref{ + new ReferenceType(owner->getManager(), name, + resolved.cast())}; + resultCallback(ref, owner, logger); + } else { + resultCallback(nullptr, owner, logger); + } + }); } } -- cgit v1.2.3