From efa2c8f41aa5cd2c27990fd9b57ea0eff06976e7 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Fri, 21 Dec 2018 11:00:28 -0500 Subject: Feature/remove app context (#765) * Remove AppContext. Use StdChannels to hold writers, and TestToolUtil to hold test tool specific functionality. * StdChannels -> StdWriters * getStdOut -> getOut, getStdError -> getError --- tools/render-test/main.cpp | 10 +++++----- tools/slang-reflection-test/main.cpp | 16 ++++++++-------- tools/slang-test/main.cpp | 30 +++++++++++++++++------------- tools/slang-test/options.cpp | 2 +- tools/slang-test/slangc-tool.cpp | 8 ++++---- tools/slang-test/slangc-tool.h | 4 ++-- tools/slang-test/test-context.h | 7 +++++-- tools/slang-test/test-reporter.h | 2 +- 8 files changed, 43 insertions(+), 36 deletions(-) (limited to 'tools') diff --git a/tools/render-test/main.cpp b/tools/render-test/main.cpp index dab8e9c6e..69874ac04 100644 --- a/tools/render-test/main.cpp +++ b/tools/render-test/main.cpp @@ -17,7 +17,7 @@ #include #include -#include "../../source/core/slang-app-context.h" +#include "../../source/core/slang-test-tool-util.h" #define WIN32_LEAN_AND_MEAN #define NOMINMAX @@ -491,15 +491,15 @@ Result RenderTestApp::writeScreen(const char* filename) } // namespace renderer_test -SLANG_SHARED_LIBRARY_TOOL_API SlangResult innerMain(Slang::AppContext* appContext, SlangSession* session, int argcIn, const char*const* argvIn) +SLANG_TEST_TOOL_API SlangResult innerMain(Slang::StdWriters* stdWriters, SlangSession* session, int argcIn, const char*const* argvIn) { using namespace renderer_test; using namespace Slang; - AppContext::setSingleton(appContext); + StdWriters::setSingleton(stdWriters); // Parse command-line options - SLANG_RETURN_ON_FAIL(parseOptions(argcIn, argvIn, AppContext::getStdError())); + SLANG_RETURN_ON_FAIL(parseOptions(argcIn, argvIn, StdWriters::getError())); RefPtr window(new renderer_test::Window); SLANG_RETURN_ON_FAIL(window->initialize(gWindowWidth, gWindowHeight)); @@ -671,7 +671,7 @@ SLANG_SHARED_LIBRARY_TOOL_API SlangResult innerMain(Slang::AppContext* appContex int main(int argc, char** argv) { SlangSession* session = spCreateSession(nullptr); - SlangResult res = innerMain(Slang::AppContext::initDefault(), session, argc, argv); + SlangResult res = innerMain(Slang::StdWriters::initDefault(), session, argc, argv); spDestroySession(session); return SLANG_FAILED(res) ? 1 : 0; diff --git a/tools/slang-reflection-test/main.cpp b/tools/slang-reflection-test/main.cpp index ad474ee70..04818dfdf 100644 --- a/tools/slang-reflection-test/main.cpp +++ b/tools/slang-reflection-test/main.cpp @@ -8,7 +8,7 @@ #include #include -#include "../../source/core/slang-app-context.h" +#include "../../source/core/slang-test-tool-util.h" struct PrettyWriter { @@ -19,7 +19,7 @@ struct PrettyWriter static void writeRaw(PrettyWriter& writer, char const* begin, char const* end) { SLANG_ASSERT(end >= begin); - Slang::AppContext::getStdOut().write(begin, size_t(end - begin)); + Slang::StdWriters::getOut().write(begin, size_t(end - begin)); } static void writeRaw(PrettyWriter& writer, char const* begin) @@ -80,7 +80,7 @@ static void write(PrettyWriter& writer, char const* text) static void write(PrettyWriter& writer, SlangUInt val) { adjust(writer); - Slang::AppContext::getStdOut().print("%llu", (unsigned long long)val); + Slang::StdWriters::getOut().print("%llu", (unsigned long long)val); } static void emitReflectionVarInfoJSON(PrettyWriter& writer, slang::VariableReflection* var); @@ -893,18 +893,18 @@ static SlangResult maybeDumpDiagnostic(SlangResult res, SlangCompileRequest* req const char* diagnostic; if (SLANG_FAILED(res) && (diagnostic = spGetDiagnosticOutput(request))) { - Slang::AppContext::getStdError().put(diagnostic); + Slang::StdWriters::getError().put(diagnostic); } return res; } -SLANG_SHARED_LIBRARY_TOOL_API SlangResult innerMain(Slang::AppContext* appContext, SlangSession* session, int argc, const char*const* argv) +SLANG_TEST_TOOL_API SlangResult innerMain(Slang::StdWriters* stdWriters, SlangSession* session, int argc, const char*const* argv) { - Slang::AppContext::setSingleton(appContext); + Slang::StdWriters::setSingleton(stdWriters); SlangCompileRequest* request = spCreateCompileRequest(session); - appContext->configureRequest(request); + stdWriters->setRequestWriters(request); char const* appName = "slang-reflection-test"; if (argc > 0) appName = argv[0]; @@ -928,7 +928,7 @@ int main( char** argv) { SlangSession* session = spCreateSession(nullptr); - SlangResult res = innerMain(Slang::AppContext::initDefault(), session, argc, argv); + SlangResult res = innerMain(Slang::StdWriters::initDefault(), session, argc, argv); spDestroySession(session); return SLANG_FAILED(res) ? 1 : 0; diff --git a/tools/slang-test/main.cpp b/tools/slang-test/main.cpp index 07647e58f..102b0b961 100644 --- a/tools/slang-test/main.cpp +++ b/tools/slang-test/main.cpp @@ -2,7 +2,7 @@ #include "../../source/core/slang-io.h" #include "../../source/core/token-reader.h" -#include "../../source/core/slang-app-context.h" +#include "../../source/core/slang-std-writers.h" #include "../../slang-com-helper.h" @@ -386,16 +386,17 @@ OSError spawnAndWait(TestContext* context, const String& testPath, OSProcessSpaw StringWriter stdError(&stdErrorString, WriterFlag::IsConsole | WriterFlag::IsStatic); StringWriter stdOut(&stdOutString, WriterFlag::IsConsole | WriterFlag::IsStatic); - AppContext appContext; - appContext.setWriter(SLANG_WRITER_CHANNEL_STD_ERROR, &stdError); - appContext.setWriter(SLANG_WRITER_CHANNEL_STD_OUTPUT, &stdOut); + StdWriters* prevStdWriters = StdWriters::getSingleton(); + + StdWriters stdWriters; + stdWriters.setWriter(SLANG_WRITER_CHANNEL_STD_ERROR, &stdError); + stdWriters.setWriter(SLANG_WRITER_CHANNEL_STD_OUTPUT, &stdOut); if (exeName == "slangc") { - appContext.setWriter(SLANG_WRITER_CHANNEL_DIAGNOSTIC, &stdError); + stdWriters.setWriter(SLANG_WRITER_CHANNEL_DIAGNOSTIC, &stdError); } - appContext.setReplaceWriterFlagsAll(); - + List args; args.Add(exeName.Buffer()); for (int i = 0; i < int(spawner.argumentList_.Count()); ++i) @@ -403,11 +404,14 @@ OSError spawnAndWait(TestContext* context, const String& testPath, OSProcessSpaw args.Add(spawner.argumentList_[i].Buffer()); } - SlangResult res = func(&appContext, context->getSession(), int(args.Count()), args.begin()); + SlangResult res = func(&stdWriters, context->getSession(), int(args.Count()), args.begin()); + + StdWriters::setSingleton(prevStdWriters); spawner.standardError_ = stdErrorString; spawner.standardOutput_ = stdOutString; - spawner.resultCode_ = AppContext::getReturnCode(res); + + spawner.resultCode_ = TestToolUtil::getReturnCode(res); return kOSError_None; } @@ -1763,7 +1767,7 @@ void runTestsInDirectory( SlangResult innerMain(int argc, char** argv) { - AppContext::initDefault(); + StdWriters::initDefault(); // The context holds useful things used during testing TestContext context; @@ -1789,7 +1793,7 @@ SlangResult innerMain(int argc, char** argv) context.setInnerMainFunc("slangc", &SlangCTool::innerMain); } - SLANG_RETURN_ON_FAIL(Options::parse(argc, argv, &categorySet, AppContext::getStdError(), &context.options)); + SLANG_RETURN_ON_FAIL(Options::parse(argc, argv, &categorySet, StdWriters::getError(), &context.options)); Options& options = context.options; @@ -1799,7 +1803,7 @@ SlangResult innerMain(int argc, char** argv) auto func = context.getInnerMainFunc(options.binDir, options.subCommand); if (!func) { - AppContext::getStdError().print("error: Unable to launch tool '%s'\n", options.subCommand.Buffer()); + StdWriters::getError().print("error: Unable to launch tool '%s'\n", options.subCommand.Buffer()); return SLANG_FAIL; } @@ -1812,7 +1816,7 @@ SlangResult innerMain(int argc, char** argv) args[i] = srcArgs[i].Buffer(); } - return func(AppContext::getSingleton(), context.getSession(), int(args.Count()), args.Buffer()); + return func(StdWriters::getSingleton(), context.getSession(), int(args.Count()), args.Buffer()); } if( options.includeCategories.Count() == 0 ) diff --git a/tools/slang-test/options.cpp b/tools/slang-test/options.cpp index 6f3f5d79b..0a6023733 100644 --- a/tools/slang-test/options.cpp +++ b/tools/slang-test/options.cpp @@ -37,7 +37,7 @@ TestCategory* TestCategorySet::findOrError(String const& name) TestCategory* category = find(name); if (!category) { - AppContext::getStdError().print("error: unknown test category name '%s'\n", name.Buffer()); + StdWriters::getError().print("error: unknown test category name '%s'\n", name.Buffer()); } return category; } diff --git a/tools/slang-test/slangc-tool.cpp b/tools/slang-test/slangc-tool.cpp index 3085e2ab5..bf1bb8c28 100644 --- a/tools/slang-test/slangc-tool.cpp +++ b/tools/slang-test/slangc-tool.cpp @@ -7,19 +7,19 @@ SLANG_API void spSetCommandLineCompilerMode(SlangCompileRequest* request); static void _diagnosticCallback(char const* message, void* /*userData*/) { - auto stdError = AppContext::getStdError(); + auto stdError = StdWriters::getError(); stdError.put(message); stdError.flush(); } -SlangResult SlangCTool::innerMain(AppContext* appContext, SlangSession* session, int argc, const char*const* argv) +SlangResult SlangCTool::innerMain(StdWriters* stdWriters, SlangSession* session, int argc, const char*const* argv) { SlangCompileRequest* compileRequest = spCreateCompileRequest(session); spSetDiagnosticCallback(compileRequest, &_diagnosticCallback, nullptr); spSetCommandLineCompilerMode(compileRequest); // Do any app specific configuration - appContext->configureRequest(compileRequest); + stdWriters->setRequestWriters(compileRequest); { const SlangResult res = spProcessCommandLineArguments(compileRequest, &argv[1], argc - 1); @@ -45,7 +45,7 @@ SlangResult SlangCTool::innerMain(AppContext* appContext, SlangSession* session, #ifndef _DEBUG catch (Exception & e) { - AppContext::getStdOut().print("internal compiler error: %S\n", e.Message.ToWString().begin()); + StdWriters::getOut().print("internal compiler error: %S\n", e.Message.ToWString().begin()); res = SLANG_FAIL; } #endif diff --git a/tools/slang-test/slangc-tool.h b/tools/slang-test/slangc-tool.h index dd6e1b977..a1fcaa71b 100644 --- a/tools/slang-test/slangc-tool.h +++ b/tools/slang-test/slangc-tool.h @@ -3,13 +3,13 @@ #ifndef SLANGC_TOOL_H_INCLUDED #define SLANGC_TOOL_H_INCLUDED -#include "../../source/core/slang-app-context.h" +#include "../../source/core/slang-std-writers.h" /* The slangc 'tool' interface, such that slangc like functionality is available directly without invoking slangc command line tool, or need for a dll/shared library. */ struct SlangCTool { - static SlangResult innerMain(Slang::AppContext* appContext, SlangSession* session, int argc, const char*const* argv); + static SlangResult innerMain(Slang::StdWriters* stdWriters, SlangSession* session, int argc, const char*const* argv); }; #endif // SLANGC_TOOL_H_INCLUDED diff --git a/tools/slang-test/test-context.h b/tools/slang-test/test-context.h index cfa9837da..b07ca94e6 100644 --- a/tools/slang-test/test-context.h +++ b/tools/slang-test/test-context.h @@ -5,15 +5,18 @@ #include "../../source/core/slang-string-util.h" #include "../../source/core/platform.h" -#include "../../source/core/slang-app-context.h" +#include "../../source/core/slang-std-writers.h" #include "../../source/core/dictionary.h" +#include "../../source/core/slang-test-tool-util.h" #include "options.h" class TestContext { public: - typedef SlangResult(*InnerMainFunc)(Slang::AppContext* appContext, SlangSession* session, int argc, const char*const* argv); + + typedef Slang::TestToolUtil::InnerMainFunc InnerMainFunc; + /// Get the slang session SlangSession* getSession() const { return m_session; } diff --git a/tools/slang-test/test-reporter.h b/tools/slang-test/test-reporter.h index 13bcfe6a4..38e0d2cc3 100644 --- a/tools/slang-test/test-reporter.h +++ b/tools/slang-test/test-reporter.h @@ -5,7 +5,7 @@ #include "../../source/core/slang-string-util.h" #include "../../source/core/platform.h" -#include "../../source/core/slang-app-context.h" +#include "../../source/core/slang-std-writers.h" #include "../../source/core/dictionary.h" -- cgit v1.2.3