From aec3c74fa53e52d238c4dfa8808d293e01d4bec5 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Thu, 29 Apr 2021 21:30:25 +0200 Subject: [PATCH] Sprinkle some [[noreturn]] where possible --- components/bsa/bsa_file.cpp | 2 +- components/bsa/bsa_file.hpp | 2 +- components/compiler/parser.cpp | 4 ++-- components/compiler/parser.hpp | 4 ++-- components/esm/esmreader.cpp | 2 +- components/esm/esmreader.hpp | 2 +- components/fontloader/fontloader.cpp | 2 +- components/interpreter/interpreter.cpp | 4 ++-- components/interpreter/interpreter.hpp | 4 ++-- components/nif/niffile.hpp | 6 ++---- components/nifbullet/bulletnifloader.hpp | 2 +- components/settings/parser.cpp | 2 +- components/settings/parser.hpp | 2 +- 13 files changed, 18 insertions(+), 20 deletions(-) diff --git a/components/bsa/bsa_file.cpp b/components/bsa/bsa_file.cpp index 129c2bf454..ecbea5e7d9 100644 --- a/components/bsa/bsa_file.cpp +++ b/components/bsa/bsa_file.cpp @@ -33,7 +33,7 @@ using namespace Bsa; /// Error handling -void BSAFile::fail(const std::string &msg) +[[noreturn]] void BSAFile::fail(const std::string &msg) { throw std::runtime_error("BSA Error: " + msg + "\nArchive: " + mFilename); } diff --git a/components/bsa/bsa_file.hpp b/components/bsa/bsa_file.hpp index f9b4d4fa39..d30fc2feb0 100644 --- a/components/bsa/bsa_file.hpp +++ b/components/bsa/bsa_file.hpp @@ -106,7 +106,7 @@ protected: Lookup mLookup; /// Error handling - void fail(const std::string &msg); + [[noreturn]] void fail(const std::string &msg); /// Read header information from the input source virtual void readHeader(); diff --git a/components/compiler/parser.cpp b/components/compiler/parser.cpp index ffa393a29e..dc924b1bab 100644 --- a/components/compiler/parser.cpp +++ b/components/compiler/parser.cpp @@ -10,7 +10,7 @@ namespace Compiler { // Report the error and throw an exception. - void Parser::reportSeriousError (const std::string& message, const TokenLoc& loc) + [[noreturn]] void Parser::reportSeriousError (const std::string& message, const TokenLoc& loc) { mErrorHandler.error (message, loc); throw SourceException(); @@ -25,7 +25,7 @@ namespace Compiler // Report an unexpected EOF condition. - void Parser::reportEOF() + [[noreturn]] void Parser::reportEOF() { mErrorHandler.endOfFile(); throw EOFException(); diff --git a/components/compiler/parser.hpp b/components/compiler/parser.hpp index 2ef6e85b98..1f2a57a489 100644 --- a/components/compiler/parser.hpp +++ b/components/compiler/parser.hpp @@ -23,13 +23,13 @@ namespace Compiler protected: - void reportSeriousError (const std::string& message, const TokenLoc& loc); + [[noreturn]] void reportSeriousError (const std::string& message, const TokenLoc& loc); ///< Report the error and throw a exception. void reportWarning (const std::string& message, const TokenLoc& loc); ///< Report the warning without throwing an exception. - void reportEOF(); + [[noreturn]] void reportEOF(); ///< Report an unexpected EOF condition. ErrorHandler& getErrorHandler(); diff --git a/components/esm/esmreader.cpp b/components/esm/esmreader.cpp index e3e6a4f335..c9b93100e6 100644 --- a/components/esm/esmreader.cpp +++ b/components/esm/esmreader.cpp @@ -315,7 +315,7 @@ std::string ESMReader::getString(int size) return std::string (ptr, size); } -void ESMReader::fail(const std::string &msg) +[[noreturn]] void ESMReader::fail(const std::string &msg) { std::stringstream ss; diff --git a/components/esm/esmreader.hpp b/components/esm/esmreader.hpp index ea18014b77..3a9734c1b0 100644 --- a/components/esm/esmreader.hpp +++ b/components/esm/esmreader.hpp @@ -250,7 +250,7 @@ public: void skip(int bytes); /// Used for error handling - void fail(const std::string &msg); + [[noreturn]] void fail(const std::string &msg); /// Sets font encoder for ESM strings void setEncoder(ToUTF8::Utf8Encoder* encoder); diff --git a/components/fontloader/fontloader.cpp b/components/fontloader/fontloader.cpp index b4739110f7..e068fd781b 100644 --- a/components/fontloader/fontloader.cpp +++ b/components/fontloader/fontloader.cpp @@ -132,7 +132,7 @@ namespace return encoder.getUtf8(std::string(1, c)); } - void fail (Files::IStreamPtr file, const std::string& fileName, const std::string& message) + [[noreturn]] void fail (Files::IStreamPtr file, const std::string& fileName, const std::string& message) { std::stringstream error; error << "Font loading error: " << message; diff --git a/components/interpreter/interpreter.cpp b/components/interpreter/interpreter.cpp index 0b636092c3..c04352a90f 100644 --- a/components/interpreter/interpreter.cpp +++ b/components/interpreter/interpreter.cpp @@ -81,13 +81,13 @@ namespace Interpreter abortUnknownSegment (code); } - void Interpreter::abortUnknownCode (int segment, int opcode) + [[noreturn]] void Interpreter::abortUnknownCode (int segment, int opcode) { const std::string error = "unknown opcode " + std::to_string(opcode) + " in segment " + std::to_string(segment); throw std::runtime_error (error); } - void Interpreter::abortUnknownSegment (Type_Code code) + [[noreturn]] void Interpreter::abortUnknownSegment (Type_Code code) { const std::string error = "opcode outside of the allocated segment range: " + std::to_string(code); throw std::runtime_error (error); diff --git a/components/interpreter/interpreter.hpp b/components/interpreter/interpreter.hpp index ff3bcf7b7c..3aa5e36d58 100644 --- a/components/interpreter/interpreter.hpp +++ b/components/interpreter/interpreter.hpp @@ -28,9 +28,9 @@ namespace Interpreter void execute (Type_Code code); - void abortUnknownCode (int segment, int opcode); + [[noreturn]] void abortUnknownCode (int segment, int opcode); - void abortUnknownSegment (Type_Code code); + [[noreturn]] void abortUnknownSegment (Type_Code code); void begin(); diff --git a/components/nif/niffile.hpp b/components/nif/niffile.hpp index c6dd8af756..1ed7cbd5d8 100644 --- a/components/nif/niffile.hpp +++ b/components/nif/niffile.hpp @@ -92,11 +92,9 @@ public: }; /// Used if file parsing fails - void fail(const std::string &msg) const + [[noreturn]] void fail(const std::string &msg) const { - std::string err = " NIFFile Error: " + msg; - err += "\nFile: " + filename; - throw std::runtime_error(err); + throw std::runtime_error(" NIFFile Error: " + msg + "\nFile: " + filename); } /// Used when something goes wrong, but not catastrophically so void warn(const std::string &msg) const diff --git a/components/nifbullet/bulletnifloader.hpp b/components/nifbullet/bulletnifloader.hpp index 17a0d3e8b9..71c84566a0 100644 --- a/components/nifbullet/bulletnifloader.hpp +++ b/components/nifbullet/bulletnifloader.hpp @@ -43,7 +43,7 @@ public: Log(Debug::Warning) << "NIFLoader: Warn: " << msg; } - void fail(const std::string &msg) + [[noreturn]] void fail(const std::string &msg) { Log(Debug::Error) << "NIFLoader: Fail: "<< msg; abort(); diff --git a/components/settings/parser.cpp b/components/settings/parser.cpp index 24f359b315..f2419dfdd6 100644 --- a/components/settings/parser.cpp +++ b/components/settings/parser.cpp @@ -318,7 +318,7 @@ bool Settings::SettingsFileParser::skipWhiteSpace(size_t& i, std::string& str) return i < str.size(); } -void Settings::SettingsFileParser::fail(const std::string& message) +[[noreturn]] void Settings::SettingsFileParser::fail(const std::string& message) { std::stringstream error; error << "Error on line " << mLine << " in " << mFile << ":\n" << message; diff --git a/components/settings/parser.hpp b/components/settings/parser.hpp index 69e9cdaa41..45b1a18f72 100644 --- a/components/settings/parser.hpp +++ b/components/settings/parser.hpp @@ -20,7 +20,7 @@ namespace Settings /// @return false if we have reached the end of the string bool skipWhiteSpace(size_t& i, std::string& str); - void fail(const std::string& message); + [[noreturn]] void fail(const std::string& message); std::string mFile; int mLine = 0;