From 90a9f43573ec0777c2ae4fa20c8fdc51a4ae7b3a Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Mon, 17 Apr 2023 15:09:37 -0400 Subject: Round trip source map (#2810) * #include an absolute path didn't work - because paths were taken to always be relative. * Make output of obfuscation locs work in a slang-module. * Tidy up detection for writing serialized source locs. * Support for .zip references. Handling of obfuscated source maps read from containers. A test to check obfuscated source map working on a module. * When using obfuscation, always obfuscate locs instead of stripping them. We keep a source map, so we can still produce reasonable errors. * Write out source locs if debug information is enabled. * Check output without sourcemap. * Small fixes. * Small improvements around hash calculation for source map name. * Disable test that fails on x86 gcc linux for now. * Fix issues around obfuscated source map using lines rather than columns. Fix some issues around encoding/decoding. * Make column calculation of source locs take into account utf8/tabs. Don't special case obfuscated source map for lookup for source loc. * Support following multiple source maps. * Small fixes/improvements around SourceMap lookup. --- .../slang-artifact-container-util.cpp | 48 +++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'source/compiler-core/slang-artifact-container-util.cpp') diff --git a/source/compiler-core/slang-artifact-container-util.cpp b/source/compiler-core/slang-artifact-container-util.cpp index 29e2e736e..6121df964 100644 --- a/source/compiler-core/slang-artifact-container-util.cpp +++ b/source/compiler-core/slang-artifact-container-util.cpp @@ -626,7 +626,6 @@ SlangResult ArtifactContainerReader::read(ISlangFileSystemExt* fileSystem, ComPt return _readArtifactDirectory(0, outArtifact); } - SlangResult ArtifactContainerReader::_readFile(Index fileIndex, ComPtr& outArtifact) { outArtifact.setNull(); @@ -655,6 +654,19 @@ SlangResult ArtifactContainerReader::_readFile(Index fileIndex, ComPtr& outArtifact) +{ + auto desc = artifact->getDesc(); + + ComPtr fileSystem; + + switch (desc.kind) + { + case ArtifactKind::Zip: + { + SLANG_RETURN_ON_FAIL(ZipFileSystem::create(fileSystem)); + + ComPtr blob; + SLANG_RETURN_ON_FAIL(artifact->loadBlob(ArtifactKeep::No, blob.writeRef())); + + // Load into the zip + + // Now write out to the output file + IArchiveFileSystem* archiveFileSystem = as(fileSystem); + SLANG_ASSERT(archiveFileSystem); + + SLANG_RETURN_ON_FAIL(archiveFileSystem->loadArchive(blob->getBufferPointer(), blob->getBufferSize())); + break; + } + default: + { + return SLANG_FAIL; + } + } + + SLANG_RETURN_ON_FAIL(readContainer(fileSystem, outArtifact)); + return SLANG_OK; +} + /* static */SlangResult ArtifactContainerUtil::readContainer(ISlangFileSystemExt* fileSystem, ComPtr& outArtifact) { SLANG_UNUSED(outArtifact); -- cgit v1.2.3