diff options
author | Brad King <brad.king@kitware.com> | 2015-11-02 20:29:52 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-11-02 20:29:52 (GMT) |
commit | ba819f49df33b546072a5928de3253770c4716b9 (patch) | |
tree | b281ef543d802a53a9c7a438947003a997401b8d /Source/cmFortranParserImpl.cxx | |
parent | 7748a02c3f7d028af13d4fc2c83e7181d11397e9 (diff) | |
download | CMake-ba819f49df33b546072a5928de3253770c4716b9.zip CMake-ba819f49df33b546072a5928de3253770c4716b9.tar.gz CMake-ba819f49df33b546072a5928de3253770c4716b9.tar.bz2 |
cmFortranParser: Parse #line directives
Teach the lexer to extract the #line directive prefix and line number as
a new token type. Teach the parser to recognize this token followed by
a string as the file name (plus possibly other content). Report the
named file as included by the source file.
Diffstat (limited to 'Source/cmFortranParserImpl.cxx')
-rw-r--r-- | Source/cmFortranParserImpl.cxx | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/Source/cmFortranParserImpl.cxx b/Source/cmFortranParserImpl.cxx index a09c5459..c175e62 100644 --- a/Source/cmFortranParserImpl.cxx +++ b/Source/cmFortranParserImpl.cxx @@ -210,6 +210,32 @@ void cmFortranParser_RuleUse(cmFortranParser* parser, } //---------------------------------------------------------------------------- +void cmFortranParser_RuleLineDirective(cmFortranParser* parser, + const char* filename) +{ + // This is a #line directive naming a file encountered during preprocessing. + std::string included = filename; + + // Skip #line directives referencing non-files like + // "<built-in>" or "<command-line>". + if (included.empty() || included[0] == '<') + { + return; + } + + // Fix windows file path separators since our lexer does not + // process escape sequences in string literals. + cmSystemTools::ReplaceString(included, "\\\\", "\\"); + cmSystemTools::ConvertToUnixSlashes(included); + + // Save the named file as included in the source. + if (cmSystemTools::FileExists(included)) + { + parser->Info.Includes.insert(included); + } +} + +//---------------------------------------------------------------------------- void cmFortranParser_RuleInclude(cmFortranParser* parser, const char* name) { |