mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 21:10:12 +01:00
The `//@include-in-dumps` and `//@dump-sem-ir-begin`/`-end` tooling directives were consumed for their side effects without a comment record, so the tokens and comments together no longer reconstructed the source: tooling that re-emits a file from them, such as `carbon format`, silently dropped the directive lines. Now each recognized directive line is also recorded as an ordinary full-line comment alongside its side effect. Adjacent full-line comments coalesce into one comment record only within a category, determined by the byte after the `//` introducer: ordinary comments (whitespace, or the end of the line or file), `//@...` directives, and invalid introducers. A transition between categories starts a new record, so a directive next to a comment block is its own comment, while all the invalid spellings lump together to keep the diagnostic noise at one per run. The category boundary also fixes a lost directive: the invalid-comment bulk skip compared only the `//` prefix, so `//!x` directly above `//@dump-sem-ir-begin` absorbed the directive line and its side effect was never recorded. Invalid comment runs now skip line by line (they start from a diagnosed error, so they are not hot) and stop at a whitespace or `@` introducer; the SIMD bulk skip handles only ordinary comment blocks, whose prefix comparison already includes the whitespace byte. Nothing outside the lexer and the formatter reads comment records, and lex dumps do not include comments, so no other behavior changes. Assisted-by: Claude Code