From 5fde038b1a6b3c8b335cd5b380c3ee8d15403052 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Wed, 31 Mar 2021 13:11:49 -0400 Subject: Support for __LINE__ and __FILE__ in preprocessor (#1772) * #include an absolute path didn't work - because paths were taken to always be relative. * First pass support for __LINE__ and __FILE__. * Test include handling with __FILE__ Fix diagnostic compare when input is empty. * Fix some issues in preprocessor handling of special macros like __LINE__ Add a more complex test. * Use CONCAT2 in tests, because preprocessor doesn't quite get parameter expansion correct. * Make __FILE__ and __LINE__ behave more like Clang/Gcc. * A test for preprocessor bug. * Fix __LINE__ and __FILE__ in macro expansion, should be initiating location. * Fix some comments. * Small tidy up around builtin macros. * Small improvements for macro type names. Escape found paths. --- tools/slang-test/parse-diagnostic-util.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'tools') diff --git a/tools/slang-test/parse-diagnostic-util.cpp b/tools/slang-test/parse-diagnostic-util.cpp index 41dae07f7..db16d0c7e 100644 --- a/tools/slang-test/parse-diagnostic-util.cpp +++ b/tools/slang-test/parse-diagnostic-util.cpp @@ -384,8 +384,27 @@ static SlangResult _findDownstreamCompiler(const UnownedStringSlice& slice, Slan return nullptr; } +static bool _isWhitespace(const UnownedStringSlice& slice) +{ + for (const char c : slice) + { + if (!CharUtil::isWhitespace(c)) + { + return false; + } + } + return true; +} + /* static */SlangResult ParseDiagnosticUtil::parseDiagnostics(const UnownedStringSlice& inText, List& outDiagnostics) { + if (_isWhitespace(inText)) + { + // If it's empty, then there are no diagnostics to add. + outDiagnostics.clear(); + return SLANG_OK; + } + // TODO(JS): // As it stands output of downstream compilers isn't standardized. This can be improved upon - and if so // we should have a function that will parse the standardized output -- cgit v1.2.3