diff options
author | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2015-01-20 01:24:17 +0100 |
---|---|---|
committer | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2015-01-20 01:24:17 +0100 |
commit | 57a1ea659ae125934c541951113c0c3a38b10971 (patch) | |
tree | 8bf6f93a1c4b56cd48777b2f2f80c77466ef61ee /src/core/parser | |
parent | 20d3e71f26ca884271ed5d372a8459394554c147 (diff) | |
parent | 533e1a93c8f636b78f5687dd9c343a81563081a1 (diff) |
Merge branch 'master' of somweyr.de:ousia
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(); }; } } |