Directive dependency_directives_scan::tokens_present_before_eof is introduced to indicate there were tokens present before
the last scanned dependency directive and EOF.
This is useful to ensure we correctly identify the macro guards when lexing using the dependency directives.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
clang/include/clang/Lex/DependencyDirectivesScanner.h | ||
---|---|---|
131 | Why would you want to print without this? It seems important for correctness of the output. I would have expected we would always print it. | |
clang/lib/Lex/DependencyDirectivesScanner.cpp | ||
868 | How about "TokBeforeEOF"? I think "BEOF" is too cryptic. |
clang/include/clang/Lex/DependencyDirectivesScanner.h | ||
---|---|---|
131 | The -print-dependency-directives-minimized-source clang option is using this function, and if you print the sources with "<TokBEOF>" at the end then the source text will not be parsable. But the tests that pass -print-dependency-directives-minimized-source don't try to parse the code, so I think I can switch the default to be true for printing the "tokens-before-eof marker" and if a caller has a need to ignore it it can pass false for the parameter. | |
clang/lib/Lex/DependencyDirectivesScanner.cpp | ||
868 | SGTM 👍 |
clang/include/clang/Lex/DependencyDirectivesScanner.h | ||
---|---|---|
131 | If someone uses -print-dependency-directives-minimized-source and creates a minimized file for each header, it will "parse", but it won't behave correctly for multiple includes, right? My preference is we don't allow printing this without the TokBEOF. If we care about making it parse, we should add a real token of some kind -- maybe there is a no-op #pragma or something? |
clang/include/clang/Lex/DependencyDirectivesScanner.h | ||
---|---|---|
131 | Oops, missed half my comment. Meant to also add:
SGTM |
clang/include/clang/Lex/DependencyDirectivesScanner.h | ||
---|---|---|
131 | Ok, you convinced me that we should just always print it. This function is for testing purposes only anyway, if later on we actually have a need to parse back the minimized source we can re-evaluate what to do with that directive marker. |
You forgot to remove the \param PrintMarkerForTokensBeforeEOF ... from the doc comment. Otherwise LGTM.
Why would you want to print without this? It seems important for correctness of the output. I would have expected we would always print it.