diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2018-12-21 11:00:28 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-12-21 11:00:28 -0500 |
| commit | efa2c8f41aa5cd2c27990fd9b57ea0eff06976e7 (patch) | |
| tree | 4c1a4d8e6e71e81c42cfbf315610e380d75527bf | |
| parent | b5bda9b3d155234be079debe6997cbc900773cf2 (diff) | |
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
| -rw-r--r-- | source/core/core.vcxproj | 6 | ||||
| -rw-r--r-- | source/core/core.vcxproj.filters | 18 | ||||
| -rw-r--r-- | source/core/slang-app-context.cpp | 67 | ||||
| -rw-r--r-- | source/core/slang-app-context.h | 60 | ||||
| -rw-r--r-- | source/core/slang-std-writers.cpp | 43 | ||||
| -rw-r--r-- | source/core/slang-std-writers.h | 44 | ||||
| -rw-r--r-- | source/core/slang-test-tool-util.cpp | 21 | ||||
| -rw-r--r-- | source/core/slang-test-tool-util.h | 25 | ||||
| -rw-r--r-- | source/core/slang-writer.h | 2 | ||||
| -rw-r--r-- | source/slang/slang.vcxproj | 2 | ||||
| -rw-r--r-- | source/slangc/main.cpp | 17 | ||||
| -rw-r--r-- | tools/render-test/main.cpp | 10 | ||||
| -rw-r--r-- | tools/slang-reflection-test/main.cpp | 16 | ||||
| -rw-r--r-- | tools/slang-test/main.cpp | 30 | ||||
| -rw-r--r-- | tools/slang-test/options.cpp | 2 | ||||
| -rw-r--r-- | tools/slang-test/slangc-tool.cpp | 8 | ||||
| -rw-r--r-- | tools/slang-test/slangc-tool.h | 4 | ||||
| -rw-r--r-- | tools/slang-test/test-context.h | 7 | ||||
| -rw-r--r-- | tools/slang-test/test-reporter.h | 2 |
19 files changed, 202 insertions, 182 deletions
diff --git a/source/core/core.vcxproj b/source/core/core.vcxproj index 5dad716fb..bebf7350c 100644 --- a/source/core/core.vcxproj +++ b/source/core/core.vcxproj @@ -182,7 +182,6 @@ <ClInclude Include="list.h" /> <ClInclude Include="platform.h" /> <ClInclude Include="secure-crt.h" /> - <ClInclude Include="slang-app-context.h" /> <ClInclude Include="slang-byte-encode-util.h" /> <ClInclude Include="slang-cpu-defines.h" /> <ClInclude Include="slang-free-list.h" /> @@ -192,9 +191,11 @@ <ClInclude Include="slang-object-scope-manager.h" /> <ClInclude Include="slang-random-generator.h" /> <ClInclude Include="slang-shared-library.h" /> + <ClInclude Include="slang-std-writers.h" /> <ClInclude Include="slang-string-slice-pool.h" /> <ClInclude Include="slang-string-util.h" /> <ClInclude Include="slang-string.h" /> + <ClInclude Include="slang-test-tool-util.h" /> <ClInclude Include="slang-writer.h" /> <ClInclude Include="smart-pointer.h" /> <ClInclude Include="stream.h" /> @@ -204,7 +205,6 @@ </ItemGroup> <ItemGroup> <ClCompile Include="platform.cpp" /> - <ClCompile Include="slang-app-context.cpp" /> <ClCompile Include="slang-byte-encode-util.cpp" /> <ClCompile Include="slang-free-list.cpp" /> <ClCompile Include="slang-io.cpp" /> @@ -212,9 +212,11 @@ <ClCompile Include="slang-object-scope-manager.cpp" /> <ClCompile Include="slang-random-generator.cpp" /> <ClCompile Include="slang-shared-library.cpp" /> + <ClCompile Include="slang-std-writers.cpp" /> <ClCompile Include="slang-string-slice-pool.cpp" /> <ClCompile Include="slang-string-util.cpp" /> <ClCompile Include="slang-string.cpp" /> + <ClCompile Include="slang-test-tool-util.cpp" /> <ClCompile Include="slang-writer.cpp" /> <ClCompile Include="stream.cpp" /> <ClCompile Include="text-io.cpp" /> diff --git a/source/core/core.vcxproj.filters b/source/core/core.vcxproj.filters index c5c1fc733..dd33b61f9 100644 --- a/source/core/core.vcxproj.filters +++ b/source/core/core.vcxproj.filters @@ -45,9 +45,6 @@ <ClInclude Include="secure-crt.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="slang-app-context.h"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="slang-byte-encode-util.h"> <Filter>Header Files</Filter> </ClInclude> @@ -75,6 +72,9 @@ <ClInclude Include="slang-shared-library.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="slang-std-writers.h"> + <Filter>Header Files</Filter> + </ClInclude> <ClInclude Include="slang-string-slice-pool.h"> <Filter>Header Files</Filter> </ClInclude> @@ -84,6 +84,9 @@ <ClInclude Include="slang-string.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="slang-test-tool-util.h"> + <Filter>Header Files</Filter> + </ClInclude> <ClInclude Include="slang-writer.h"> <Filter>Header Files</Filter> </ClInclude> @@ -107,9 +110,6 @@ <ClCompile Include="platform.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="slang-app-context.cpp"> - <Filter>Source Files</Filter> - </ClCompile> <ClCompile Include="slang-byte-encode-util.cpp"> <Filter>Source Files</Filter> </ClCompile> @@ -131,6 +131,9 @@ <ClCompile Include="slang-shared-library.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="slang-std-writers.cpp"> + <Filter>Source Files</Filter> + </ClCompile> <ClCompile Include="slang-string-slice-pool.cpp"> <Filter>Source Files</Filter> </ClCompile> @@ -140,6 +143,9 @@ <ClCompile Include="slang-string.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="slang-test-tool-util.cpp"> + <Filter>Source Files</Filter> + </ClCompile> <ClCompile Include="slang-writer.cpp"> <Filter>Source Files</Filter> </ClCompile> diff --git a/source/core/slang-app-context.cpp b/source/core/slang-app-context.cpp deleted file mode 100644 index 2b3f32cbc..000000000 --- a/source/core/slang-app-context.cpp +++ /dev/null @@ -1,67 +0,0 @@ - -#include "slang-app-context.h" - -#include "slang-writer.h" - -namespace Slang -{ - -/* static */AppContext* AppContext::s_singleton = nullptr; - - -/* static */AppContext* AppContext::getDefault() -{ - static AppContext* s_context = nullptr; - - if (!s_context) - { - static FileWriter s_stdError(stderr, WriterFlag::IsStatic | WriterFlag::IsUnowned | WriterFlag::AutoFlush); - static FileWriter s_stdOut(stdout, WriterFlag::IsStatic | WriterFlag::IsUnowned | WriterFlag::AutoFlush); - - static AppContext s_contextVar; - s_context = &s_contextVar; - - s_context->setWriter(SLANG_WRITER_CHANNEL_STD_ERROR, &s_stdError); - s_context->setWriter(SLANG_WRITER_CHANNEL_STD_OUTPUT, &s_stdOut); - } - return s_context; -} - -/* static */AppContext* AppContext::initDefault() -{ - AppContext* context = getDefault(); - setSingleton(context); - return context; -} - -/* static */int AppContext::getReturnCode(SlangResult res) -{ - if (SLANG_SUCCEEDED(res)) - { - return 0; - } - else if (res == SLANG_E_INTERNAL_FAIL) - { - return -1; - } - return 1; -} - -void AppContext::setRequestWriters(SlangCompileRequest* request) -{ - for (int i = 0; i < SLANG_WRITER_CHANNEL_COUNT_OF; ++i) - { - if (m_replaceWriterFlags & (1 << i)) - { - spSetWriter(request, SlangWriterChannel(i), m_writers[i]); - } - } -} - -void AppContext::configureRequest(SlangCompileRequest* request) -{ - setRequestWriters(request); -} - -} - diff --git a/source/core/slang-app-context.h b/source/core/slang-app-context.h deleted file mode 100644 index 9f1eb306c..000000000 --- a/source/core/slang-app-context.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef SLANG_APP_CONTEXT_H -#define SLANG_APP_CONTEXT_H - -#include "slang-writer.h" -#include "../../slang-com-ptr.h" - -namespace Slang -{ - -#ifdef SLANG_SHARED_LIBRARY_TOOL -# define SLANG_SHARED_LIBRARY_TOOL_API SLANG_EXTERN_C SLANG_DLL_EXPORT -#else -# define SLANG_SHARED_LIBRARY_TOOL_API -#endif - -/* A structure to hold general state shared across an application */ -class AppContext -{ -public: - - ISlangWriter * getWriter(SlangWriterChannel chan) const { return m_writers[chan]; } - void setWriter(SlangWriterChannel chan, ISlangWriter* writer) { m_writers[chan] = writer; } - - /// Make modifications to the request - void configureRequest(SlangCompileRequest* request); - - void setRequestWriters(SlangCompileRequest* request); - - void setReplaceWriterFlagsAll() { setReplaceWriterFlags((1 << SLANG_WRITER_CHANNEL_COUNT_OF) - 1); } - void setReplaceWriterFlags(int flags) { m_replaceWriterFlags = flags; } - int getReplaceWriterFlags() const { return m_replaceWriterFlags; } - - /// Ctor - AppContext() : m_replaceWriterFlags(0) {} - - /// Initialize a default context - static AppContext* initDefault(); - - static AppContext* getDefault(); - - static AppContext* getSingleton() { return s_singleton; } - static void setSingleton(AppContext* context) { s_singleton = context; } - - static WriterHelper getStdError() { return getSingleton()->getWriter(SLANG_WRITER_CHANNEL_STD_ERROR); } - static WriterHelper getStdOut() { return getSingleton()->getWriter(SLANG_WRITER_CHANNEL_STD_OUTPUT); } - static WriterHelper getDiagnostic() { return getSingleton()->getWriter(SLANG_WRITER_CHANNEL_DIAGNOSTIC); } - - static int getReturnCode(SlangResult res); - -protected: - - ComPtr<ISlangWriter> m_writers[SLANG_WRITER_CHANNEL_COUNT_OF]; - int m_replaceWriterFlags; ///< Bit for each writer - - static AppContext* s_singleton; -}; - -} - -#endif diff --git a/source/core/slang-std-writers.cpp b/source/core/slang-std-writers.cpp new file mode 100644 index 000000000..963af9ef5 --- /dev/null +++ b/source/core/slang-std-writers.cpp @@ -0,0 +1,43 @@ + +#include "slang-std-writers.h" + +namespace Slang +{ + +/* static */StdWriters* StdWriters::s_singleton = nullptr; + +/* static */StdWriters* StdWriters::getDefault() +{ + static StdWriters* s_context = nullptr; + + if (!s_context) + { + static FileWriter s_stdError(stderr, WriterFlag::IsStatic | WriterFlag::IsUnowned | WriterFlag::AutoFlush); + static FileWriter s_stdOut(stdout, WriterFlag::IsStatic | WriterFlag::IsUnowned | WriterFlag::AutoFlush); + + static StdWriters s_contextVar; + s_context = &s_contextVar; + + s_context->setWriter(SLANG_WRITER_CHANNEL_STD_ERROR, &s_stdError); + s_context->setWriter(SLANG_WRITER_CHANNEL_STD_OUTPUT, &s_stdOut); + } + return s_context; +} + +/* static */StdWriters* StdWriters::initDefault() +{ + StdWriters* context = getDefault(); + setSingleton(context); + return context; +} + +void StdWriters::setRequestWriters(SlangCompileRequest* request) +{ + for (int i = 0; i < SLANG_WRITER_CHANNEL_COUNT_OF; ++i) + { + spSetWriter(request, SlangWriterChannel(i), m_writers[i]); + } +} + +} + diff --git a/source/core/slang-std-writers.h b/source/core/slang-std-writers.h new file mode 100644 index 000000000..d580842eb --- /dev/null +++ b/source/core/slang-std-writers.h @@ -0,0 +1,44 @@ +#ifndef SLANG_STD_WRITERS_H +#define SLANG_STD_WRITERS_H + +#include "slang-writer.h" +#include "../../slang-com-ptr.h" + +namespace Slang +{ + +/* Holds standard writers for the channels */ +class StdWriters +{ +public: + ISlangWriter * getWriter(SlangWriterChannel chan) const { return m_writers[chan]; } + void setWriter(SlangWriterChannel chan, ISlangWriter* writer) { m_writers[chan] = writer; } + + /// Set the writers on the SlangCompileRequest + void setRequestWriters(SlangCompileRequest* request); + + /// Ctor + StdWriters() {} + + /// Initialize a default context + static StdWriters* initDefault(); + + static StdWriters* getDefault(); + + static StdWriters* getSingleton() { return s_singleton; } + static void setSingleton(StdWriters* context) { s_singleton = context; } + + static WriterHelper getError() { return getSingleton()->getWriter(SLANG_WRITER_CHANNEL_STD_ERROR); } + static WriterHelper getOut() { return getSingleton()->getWriter(SLANG_WRITER_CHANNEL_STD_OUTPUT); } + static WriterHelper getDiagnostic() { return getSingleton()->getWriter(SLANG_WRITER_CHANNEL_DIAGNOSTIC); } + +protected: + + ComPtr<ISlangWriter> m_writers[SLANG_WRITER_CHANNEL_COUNT_OF]; + + static StdWriters* s_singleton; +}; + +} + +#endif diff --git a/source/core/slang-test-tool-util.cpp b/source/core/slang-test-tool-util.cpp new file mode 100644 index 000000000..7ecfacefa --- /dev/null +++ b/source/core/slang-test-tool-util.cpp @@ -0,0 +1,21 @@ + +#include "slang-test-tool-util.h" + +namespace Slang +{ + +/* static */int TestToolUtil::getReturnCode(SlangResult res) +{ + if (SLANG_SUCCEEDED(res)) + { + return 0; + } + else if (res == SLANG_E_INTERNAL_FAIL) + { + return -1; + } + return 1; +} + +} + diff --git a/source/core/slang-test-tool-util.h b/source/core/slang-test-tool-util.h new file mode 100644 index 000000000..615bbe10d --- /dev/null +++ b/source/core/slang-test-tool-util.h @@ -0,0 +1,25 @@ +#ifndef SLANG_TEST_TOOL_UTIL_H +#define SLANG_TEST_TOOL_UTIL_H + +#include "slang-std-writers.h" + +namespace Slang { + +#ifdef SLANG_SHARED_LIBRARY_TOOL +# define SLANG_TEST_TOOL_API SLANG_EXTERN_C SLANG_DLL_EXPORT +#else +# define SLANG_TEST_TOOL_API +#endif + +/* Utility functions for 'test tools' */ +struct TestToolUtil +{ + typedef SlangResult(*InnerMainFunc)(Slang::StdWriters* stdWriters, SlangSession* session, int argc, const char*const* argv); + + /// Given a slang result, returns a return code that can be returned from an executable + static int getReturnCode(SlangResult res); +}; + +} // namespace Slang + +#endif // SLANG_TEST_TOOL_H diff --git a/source/core/slang-writer.h b/source/core/slang-writer.h index b18af373f..463450ac9 100644 --- a/source/core/slang-writer.h +++ b/source/core/slang-writer.h @@ -45,7 +45,7 @@ public: // ISlangUnknown SLANG_REF_OBJECT_IUNKNOWN_QUERY_INTERFACE SLANG_REF_OBJECT_IUNKNOWN_ADD_REF - SLANG_NO_THROW uint32_t SLANG_MCALL release() { return (m_flags & WriterFlag::IsStatic) ? 1 : (uint32_t)releaseReference(); } + SLANG_NO_THROW uint32_t SLANG_MCALL release() { return (m_flags & WriterFlag::IsStatic) ? (uint32_t)decreaseReference() : (uint32_t)releaseReference(); } // ISlangWriter - default impl SLANG_NO_THROW virtual void SLANG_MCALL flush() SLANG_OVERRIDE {} diff --git a/source/slang/slang.vcxproj b/source/slang/slang.vcxproj index a36d9bfbf..132a56ea5 100644 --- a/source/slang/slang.vcxproj +++ b/source/slang/slang.vcxproj @@ -314,4 +314,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project>
\ No newline at end of file +</Project>
\ No newline at end of file diff --git a/source/slangc/main.cpp b/source/slangc/main.cpp index c2d64730a..ae15b7d49 100644 --- a/source/slangc/main.cpp +++ b/source/slangc/main.cpp @@ -5,8 +5,7 @@ SLANG_API void spSetCommandLineCompilerMode(SlangCompileRequest* request); #include "../core/slang-io.h" -#include "../core/slang-app-context.h" -#include "../core/slang-writer.h" +#include "../core/slang-test-tool-util.h" using namespace Slang; @@ -16,7 +15,7 @@ static void diagnosticCallback( char const* message, void* /*userData*/) { - auto stdError = AppContext::getStdError(); + auto stdError = StdWriters::getError(); stdError.put(message); stdError.flush(); } @@ -27,9 +26,9 @@ static void diagnosticCallback( #define MAIN main #endif -SLANG_SHARED_LIBRARY_TOOL_API SlangResult innerMain(AppContext* appContext, SlangSession* session, int argc, const char*const* argv) +SLANG_TEST_TOOL_API SlangResult innerMain(StdWriters* stdWriters, SlangSession* session, int argc, const char*const* argv) { - AppContext::setSingleton(appContext); + StdWriters::setSingleton(stdWriters); SlangCompileRequest* compileRequest = spCreateCompileRequest(session); @@ -41,7 +40,7 @@ SLANG_SHARED_LIBRARY_TOOL_API SlangResult innerMain(AppContext* appContext, Slan spSetCommandLineCompilerMode(compileRequest); // Do any app specific configuration - appContext->configureRequest(compileRequest); + stdWriters->setRequestWriters(compileRequest); char const* appName = "slangc"; if (argc > 0) appName = argv[0]; @@ -70,7 +69,7 @@ SLANG_SHARED_LIBRARY_TOOL_API SlangResult innerMain(AppContext* appContext, Slan #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 @@ -85,10 +84,10 @@ int MAIN(int argc, char** argv) SlangResult res; { SlangSession* session = spCreateSession(nullptr); - res = innerMain(AppContext::initDefault(), session, argc, argv); + res = innerMain(StdWriters::initDefault(), session, argc, argv); spDestroySession(session); } - return AppContext::getReturnCode(res); + return TestToolUtil::getReturnCode(res); } #ifdef _WIN32 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 <stdio.h> #include <stdlib.h> -#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<renderer_test::Window> 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 <slang.h> #include <slang-com-helper.h> -#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<const char*> 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" |
