summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-04-14 00:22:12 +0200
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2016-04-25 22:24:17 +0200
commit439a3c0bd9e2c81082de2cdf0ff8352828bd5364 (patch)
tree209d17f7543f3a7105ad290e9cb0d49f261c5e00 /src
parent7a3da9bfdb02aae53a07403c765c0f6d54e5f7cd (diff)
Fix utterly broken ReferenceType generation.
Diffstat (limited to 'src')
-rw-r--r--src/core/parser/ParserScope.cpp22
1 files changed, 17 insertions, 5 deletions
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<std::string> &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<ReferenceType> ref{
+ new ReferenceType(owner->getManager(), "@", nullptr)};
+ resultCallback(ref, owner, logger);
return true;
}
@@ -381,8 +381,20 @@ bool ParserScope::resolveType(const std::vector<std::string> &path,
// class "Descriptor"
std::vector<std::string> 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<Node> resolved,
+ Handle<Node> owner, Logger &logger) {
+ if (resolved != nullptr) {
+ Rooted<ReferenceType> ref{
+ new ReferenceType(owner->getManager(), name,
+ resolved.cast<Descriptor>())};
+ resultCallback(ref, owner, logger);
+ } else {
+ resultCallback(nullptr, owner, logger);
+ }
+ });
}
}