summaryrefslogtreecommitdiffstats
path: root/source/slangc/main.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-11-18 18:12:43 -0500
committerGitHub <noreply@github.com>2020-11-18 18:12:43 -0500
commite140c4950eb8c69606386ca57284c0655513b9e1 (patch)
tree1361dcf8cfc1597b63960226006af301ac82bfc6 /source/slangc/main.cpp
parentd898d561e3c76ecf38db434ec7fbb4bbd0e25cb2 (diff)
Test for serializing out and reading back Stdlib (#1605)
* #include an absolute path didn't work - because paths were taken to always be relative. * Mangling/module name extraction for GenericDecl * Add comment on SerialFilter to explain re-enabling Stmt. * Support setting up SyntaxDecl when reconstructed after deserialization. * Improvements to setup SyntaxDecl. * Fix typo so can read compressed SourceLocs. * Fix issue with SourceManger. * Simple test for serializing out stdlib and reading back in. * Fix calling convention. * Add override to StdLib impls. * Fix typo. * Apply testing to an actual compute test when using load-stdlib Make -load/compile-stdlib processable by Slang Move out testing into util into TestToolUtil so can be shared. * Slightly more concise setup of session. * Fix some errors introduced with session handling. * Made setup for compile same across slangc and slangc-tool.
Diffstat (limited to 'source/slangc/main.cpp')
-rw-r--r--source/slangc/main.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/source/slangc/main.cpp b/source/slangc/main.cpp
index 9f4ffcaff..887eca77a 100644
--- a/source/slangc/main.cpp
+++ b/source/slangc/main.cpp
@@ -66,10 +66,28 @@ static SlangResult _compile(SlangCompileRequest* compileRequest, int argc, const
return res;
}
-SLANG_TEST_TOOL_API SlangResult innerMain(StdWriters* stdWriters, SlangSession* session, int argc, const char*const* argv)
+SLANG_TEST_TOOL_API SlangResult innerMain(StdWriters* stdWriters, slang::IGlobalSession* sharedSession, int argc, const char*const* argv)
{
StdWriters::setSingleton(stdWriters);
+ // Assume we will used the shared session
+ ComPtr<slang::IGlobalSession> session(sharedSession);
+
+ // The sharedSession always has a pre-loaded stdlib, is sharedSession is not nullptr.
+ // This differed test checks if the command line has an option to setup the stdlib.
+ // If so we *don't* use the sharedSession, and create a new stdlib-less session just for this compilation.
+ if (TestToolUtil::hasDeferredStdLib(Index(argc - 1), argv + 1))
+ {
+ SLANG_RETURN_ON_FAIL(slang_createGlobalSessionWithoutStdLib(SLANG_API_VERSION, session.writeRef()));
+ TestToolUtil::setSessionDefaultPreludeFromExePath(argv[0], session);
+ }
+ else if (!session)
+ {
+ // Just create the global session in the regular way if there isn't one set
+ SLANG_RETURN_ON_FAIL(slang_createGlobalSession(SLANG_API_VERSION, session.writeRef()));
+ TestToolUtil::setSessionDefaultPreludeFromExePath(argv[0], session);
+ }
+
SlangCompileRequest* compileRequest = spCreateCompileRequest(session);
SlangResult res = _compile(compileRequest, argc, argv);
// Now that we are done, clean up after ourselves
@@ -80,16 +98,8 @@ SLANG_TEST_TOOL_API SlangResult innerMain(StdWriters* stdWriters, SlangSession*
int MAIN(int argc, char** argv)
{
- SlangResult res;
- {
- SlangSession* session = spCreateSession(nullptr);
- TestToolUtil::setSessionDefaultPreludeFromExePath(argv[0], session);
-
- auto stdWriters = StdWriters::initDefaultSingleton();
-
- res = innerMain(stdWriters, session, argc, argv);
- spDestroySession(session);
- }
+ auto stdWriters = StdWriters::initDefaultSingleton();
+ SlangResult res = innerMain(stdWriters, nullptr, argc, argv);
return (int)TestToolUtil::getReturnCode(res);
}