From 8c433d587c319ad7052b285a8e71d8c78d67e320 Mon Sep 17 00:00:00 2001 From: Evil Eye Date: Sat, 4 Apr 2020 14:09:00 +0200 Subject: [PATCH] less complicated context override --- apps/openmw/mwscript/scriptmanagerimp.cpp | 2 +- components/compiler/streamerrorhandler.cpp | 20 +++++--------------- components/compiler/streamerrorhandler.hpp | 16 +++++++++------- 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/apps/openmw/mwscript/scriptmanagerimp.cpp b/apps/openmw/mwscript/scriptmanagerimp.cpp index 996687547..267ff7da6 100644 --- a/apps/openmw/mwscript/scriptmanagerimp.cpp +++ b/apps/openmw/mwscript/scriptmanagerimp.cpp @@ -171,7 +171,7 @@ namespace MWScript { Compiler::Locals locals; - const Compiler::ContextRestore&& restore = mErrorHandler.setContext(name2 + "[local variables]", true); + const Compiler::ContextOverride override(mErrorHandler, name2 + "[local variables]"); std::istringstream stream (script->mScriptText); Compiler::QuickFileParser parser (mErrorHandler, mCompilerContext, locals); diff --git a/components/compiler/streamerrorhandler.cpp b/components/compiler/streamerrorhandler.cpp index c9a3a4e7f..1c41d3f7f 100644 --- a/components/compiler/streamerrorhandler.cpp +++ b/components/compiler/streamerrorhandler.cpp @@ -56,30 +56,20 @@ namespace Compiler Log(logLevel) << text.str(); } - ContextRestore StreamErrorHandler::setContext(const std::string &context, bool restore) + void StreamErrorHandler::setContext(const std::string &context) { - if (!restore) - { - mContext = context; - return {nullptr, {}}; - } - ContextRestore restorer(this, mContext); mContext = context; - return restorer; } StreamErrorHandler::StreamErrorHandler() {} - ContextRestore::ContextRestore(StreamErrorHandler* handler, const std::string& context) : mHandler(handler), mContext(context) {} - - ContextRestore::ContextRestore(ContextRestore&& other) : mHandler(other.mHandler), mContext(other.mContext) + ContextOverride::ContextOverride(StreamErrorHandler& handler, const std::string& context) : mHandler(handler), mContext(handler.mContext) { - other.mHandler = nullptr; + mHandler.setContext(context); } - ContextRestore::~ContextRestore() + ContextOverride::~ContextOverride() { - if(mHandler) - mHandler->setContext(mContext); + mHandler.setContext(mContext); } } diff --git a/components/compiler/streamerrorhandler.hpp b/components/compiler/streamerrorhandler.hpp index 848c976a3..1f3b6e1ec 100644 --- a/components/compiler/streamerrorhandler.hpp +++ b/components/compiler/streamerrorhandler.hpp @@ -7,13 +7,14 @@ namespace Compiler { - class ContextRestore; + class ContextOverride; /// \brief Error handler implementation: Write errors into logging stream class StreamErrorHandler : public ErrorHandler { std::string mContext; + friend class ContextOverride; // not implemented StreamErrorHandler (const StreamErrorHandler&); @@ -27,7 +28,7 @@ namespace Compiler public: - ContextRestore setContext(const std::string& context, bool restore = false); + void setContext(const std::string& context); // constructors @@ -35,16 +36,17 @@ namespace Compiler ///< constructor }; - class ContextRestore + class ContextOverride { - StreamErrorHandler* mHandler; + StreamErrorHandler& mHandler; const std::string mContext; public: - ContextRestore (StreamErrorHandler* handler, const std::string& context); + ContextOverride (StreamErrorHandler& handler, const std::string& context); - ContextRestore (ContextRestore&& other); + ContextOverride (const ContextOverride&) = delete; + ContextOverride& operator= (const ContextOverride&) = delete; - ~ContextRestore(); + ~ContextOverride(); }; }