From 5c2c2cfc9918bb43225159e67a851e196e17759a Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Fri, 26 Aug 2022 20:32:53 -0400 Subject: DownstreamCompileOptions using POD types (#2381) * #include an absolute path didn't work - because paths were taken to always be relative. * Make DownstreamCompileOptions use POD types. * CharSliceAllocator -> SliceAllocator Added SliceConverter CharSliceCaster -> SliceCaster * First attempt at zero terminating around blobs. * Fix clang warning. * Add SlangTerminatedChars Make Blob implementations support it. Make most blobs 'terminated'. * Fix bug setting up sourceFiles for CommandLineDownstreamCompiler. * Traffic in TerminatedCharSlice for sourceFiles. Use ArtifactDesc to generate temporary file names for source. * Fix typo in testing for shared library/C++. --- tools/slang-test/parse-diagnostic-util.cpp | 6 +++--- tools/slang-test/parse-diagnostic-util.h | 6 +++--- tools/slang-test/slang-test-main.cpp | 14 +++++++++----- 3 files changed, 15 insertions(+), 11 deletions(-) (limited to 'tools') diff --git a/tools/slang-test/parse-diagnostic-util.cpp b/tools/slang-test/parse-diagnostic-util.cpp index c2cc1f010..49cc2555b 100644 --- a/tools/slang-test/parse-diagnostic-util.cpp +++ b/tools/slang-test/parse-diagnostic-util.cpp @@ -17,7 +17,7 @@ using namespace Slang; -/* static */SlangResult ParseDiagnosticUtil::parseGenericLine(CharSliceAllocator& allocator, const UnownedStringSlice& line, List& lineSlices, ArtifactDiagnostic& outDiagnostic) +/* static */SlangResult ParseDiagnosticUtil::parseGenericLine(SliceAllocator& allocator, const UnownedStringSlice& line, List& lineSlices, ArtifactDiagnostic& outDiagnostic) { /* e:\git\somewhere\tests\diagnostics\syntax-error-intrinsic.slang(13): error C2018: unknown character '0x40' */ if (lineSlices.getCount() < 3) @@ -113,7 +113,7 @@ static bool _isSlangDiagnostic(const UnownedStringSlice& line) return SLANG_SUCCEEDED(_getSlangDiagnosticSeverity(typeSlice, type, code)); } -/* static */SlangResult ParseDiagnosticUtil::parseSlangLine(CharSliceAllocator& allocator, const UnownedStringSlice& line, List& lineSlices, ArtifactDiagnostic& outDiagnostic) +/* static */SlangResult ParseDiagnosticUtil::parseSlangLine(SliceAllocator& allocator, const UnownedStringSlice& line, List& lineSlices, ArtifactDiagnostic& outDiagnostic) { /* tests/diagnostics/accessors.slang(11): error 31101: accessors other than 'set' must not have parameters @@ -286,7 +286,7 @@ static bool _isWhitespace(const UnownedStringSlice& slice) List splitLine; - CharSliceAllocator allocator; + SliceAllocator allocator; UnownedStringSlice text(inText), line; while (StringUtil::extractLine(text, line)) diff --git a/tools/slang-test/parse-diagnostic-util.h b/tools/slang-test/parse-diagnostic-util.h index eb631f1fa..2ad7a7911 100644 --- a/tools/slang-test/parse-diagnostic-util.h +++ b/tools/slang-test/parse-diagnostic-util.h @@ -57,16 +57,16 @@ struct ParseDiagnosticUtil }; }; - typedef SlangResult (*LineParser)(Slang::CharSliceAllocator& allocator, const Slang::UnownedStringSlice& line, Slang::List& lineSlices, Slang::ArtifactDiagnostic& outDiagnostic); + typedef SlangResult (*LineParser)(Slang::SliceAllocator& allocator, const Slang::UnownedStringSlice& line, Slang::List& lineSlices, Slang::ArtifactDiagnostic& outDiagnostic); /// Given a compiler identity returns a line parsing function. static LineParser getLineParser(const CompilerIdentity& compilerIdentity); /// For a 'generic' (as in uses DownstreamCompiler mechanism) line parsing - static SlangResult parseGenericLine(Slang::CharSliceAllocator& allocator, const Slang::UnownedStringSlice& line, Slang::List& lineSlices, Slang::ArtifactDiagnostic& outDiagnostic); + static SlangResult parseGenericLine(Slang::SliceAllocator& allocator, const Slang::UnownedStringSlice& line, Slang::List& lineSlices, Slang::ArtifactDiagnostic& outDiagnostic); /// For parsing diagnostics from Slang - static SlangResult parseSlangLine(Slang::CharSliceAllocator& allocator, const Slang::UnownedStringSlice& line, Slang::List& lineSlices, Slang::ArtifactDiagnostic& outDiagnostic); + static SlangResult parseSlangLine(Slang::SliceAllocator& allocator, const Slang::UnownedStringSlice& line, Slang::List& lineSlices, Slang::ArtifactDiagnostic& outDiagnostic); /// Parse diagnostics into output text static SlangResult parseDiagnostics(const Slang::UnownedStringSlice& inText, Slang::IArtifactDiagnostics* diagnostics); diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index af7ca1f83..cd783bb05 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -2233,10 +2233,12 @@ static TestResult runCPPCompilerSharedLibrary(TestContext* context, TestInput& i options.targetType = SLANG_SHADER_SHARED_LIBRARY; // Compile this source - options.sourceFiles.add(filePath); - options.modulePath = modulePath; + TerminatedCharSlice sourceFiles[] = { SliceCaster::asTerminatedCharSlice(filePath) }; + TerminatedCharSlice includePaths[] = { TerminatedCharSlice(".") }; - options.includePaths.add("."); + options.sourceFiles = makeSlice(sourceFiles, 1); + options.includePaths = makeSlice(includePaths, 1); + options.modulePath = SliceCaster::asTerminatedCharSlice(modulePath); ComPtr artifact; if (SLANG_FAILED(compiler->compile(options, artifact.writeRef()))) @@ -2351,9 +2353,11 @@ static TestResult runCPPCompilerExecute(TestContext* context, TestInput& input) options.sourceLanguage = (ext == "c") ? SLANG_SOURCE_LANGUAGE_C : SLANG_SOURCE_LANGUAGE_CPP; + TerminatedCharSlice filePaths[] = { SliceCaster::asTerminatedCharSlice(filePath) }; + // Compile this source - options.sourceFiles.add(filePath); - options.modulePath = modulePath; + options.sourceFiles = makeSlice(filePaths, 1); + options.modulePath = SliceCaster::asTerminatedCharSlice(modulePath); ComPtr artifact; if (SLANG_FAILED(compiler->compile(options, artifact.writeRef()))) -- cgit v1.2.3