diff options
Diffstat (limited to 'src/core/parser')
| -rw-r--r-- | src/core/parser/Scope.cpp | 29 | ||||
| -rw-r--r-- | src/core/parser/Scope.hpp | 10 | 
2 files changed, 16 insertions, 23 deletions
diff --git a/src/core/parser/Scope.cpp b/src/core/parser/Scope.cpp index 6942b9a..01292df 100644 --- a/src/core/parser/Scope.cpp +++ b/src/core/parser/Scope.cpp @@ -119,7 +119,7 @@ Rooted<Node> Scope::getLeaf() { return nodes.back(); }  bool Scope::resolve(const std::vector<std::string> &path, const Rtti &type,                      Logger &logger, ResolutionImposterCallback imposterCallback,                      ResolutionResultCallback resultCallback, -	             const SourceLocation &location) +                    const SourceLocation &location)  {  	if (!resolve(path, type, logger, resultCallback, location)) {  		resultCallback(imposterCallback(), logger); @@ -168,22 +168,21 @@ bool Scope::performDeferredResolution(Logger &logger)  		}  	} -	// Output an error message if there are still deferred elements left that -	// could not be resolved -	if (!deferred.empty()) { -		for (const auto &failed : deferred) { -			logger.error( -			    std::string("Could not resolve a reference to \"") + -			        Utils::join(failed.path, ".") + -			        std::string("\" of type " + failed.type.name), -			    failed.location); -		} +	// We were successful if there are no more deferred resolutions +	if (deferred.empty()) { +		return true;  	} -	// We were successful if there are no more deferred resolutions -	return deferred.empty(); +	// Output error messages for all elements for which resolution did not +	// succeed. +	for (const auto &failed : deferred) { +		logger.error(std::string("Could not resolve ")  + failed.type.name + std::string(" \"") + +		                 Utils::join(failed.path, ".") + +		                 std::string("\""), +		             failed.location); +	} +	deferred.clear(); +	return false;  } - -void Scope::purgeDeferredResolutions() { deferred.clear(); }  }  } diff --git a/src/core/parser/Scope.hpp b/src/core/parser/Scope.hpp index 1ceac2e..b9b7f80 100644 --- a/src/core/parser/Scope.hpp +++ b/src/core/parser/Scope.hpp @@ -467,18 +467,12 @@ public:  	}  	/** -	 * Tries to resolve all currently deferred resolution steps. +	 * Tries to resolve all currently deferred resolution steps. The list of +	 * pending deferred resolutions is cleared after this function has run.  	 *  	 * @param logger is the logger instance into which errors should be logged.  	 */  	bool performDeferredResolution(Logger &logger); - -	/** -	 * Clears the list of currently deferred resolutions. This function may be -	 * used to gracefully continue parsing, even after the resolution has -	 * failed. -	 */ -	void purgeDeferredResolutions();  };  }  }  | 
