diff options
| author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-04-14 00:22:12 +0200 | 
|---|---|---|
| committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2016-04-25 22:24:17 +0200 | 
| commit | 439a3c0bd9e2c81082de2cdf0ff8352828bd5364 (patch) | |
| tree | 209d17f7543f3a7105ad290e9cb0d49f261c5e00 /src | |
| parent | 7a3da9bfdb02aae53a07403c765c0f6d54e5f7cd (diff) | |
Fix utterly broken ReferenceType generation.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/parser/ParserScope.cpp | 22 | 
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); +				    } +				});  		}  	} | 
