summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-compiler.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2023-04-17 15:09:37 -0400
committerGitHub <noreply@github.com>2023-04-17 15:09:37 -0400
commit90a9f43573ec0777c2ae4fa20c8fdc51a4ae7b3a (patch)
tree360750778be872a086674024a9ce5a68bf4e7cb3 /source/slang/slang-compiler.cpp
parenta3f622ace1bdef1f1a4150ec85d1328d1a589333 (diff)
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.
Diffstat (limited to 'source/slang/slang-compiler.cpp')
-rw-r--r--source/slang/slang-compiler.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/source/slang/slang-compiler.cpp b/source/slang/slang-compiler.cpp
index 43a6d238e..becd65596 100644
--- a/source/slang/slang-compiler.cpp
+++ b/source/slang/slang-compiler.cpp
@@ -1812,6 +1812,19 @@ namespace Slang
}
+ bool _shouldWriteSourceLocs(Linkage* linkage)
+ {
+ // If debug information or source manager are not avaiable we can't/shouldn't write out locs
+ if (linkage->debugInfoLevel == DebugInfoLevel::None ||
+ linkage->getSourceManager() == nullptr)
+ {
+ return false;
+ }
+
+ // Otherwise we do want to write out the locs
+ return true;
+ }
+
SlangResult EndToEndCompileRequest::writeContainerToStream(Stream* stream)
{
auto linkage = getLinkage();
@@ -1827,7 +1840,9 @@ namespace Slang
// Also currently only IR is needed.
options.optionFlags &= ~SerialOptionFlag::ASTModule;
}
- else if (linkage->debugInfoLevel != DebugInfoLevel::None && linkage->getSourceManager())
+
+ // If debug information is enabled, enable writing out source locs
+ if (_shouldWriteSourceLocs(linkage))
{
options.optionFlags |= SerialOptionFlag::SourceLocation;
options.sourceManager = linkage->getSourceManager();
@@ -1897,7 +1912,8 @@ namespace Slang
auto sourceMap = translationUnit->getModule()->getIRModule()->getObfuscatedSourceMap();
- if (sourceMap)
+ // If we have a source map *and* we want to generate them for output add to the container
+ if (sourceMap && getLinkage()->m_generateSourceMap)
{
// Write it out
String json;