[PATCH] D122885: [clang] Draft: Implement P1703R1

Nathan Sidwell via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 1 04:10:03 PDT 2022


urnathan added a comment.

I can;t really tell what you're doing.  C++20 lexes import (&module) declarations as preprocessor directives.  the parser must also recognize only such declarations that came through from lexing such directives.  It is unrelated to #import.  GCC's implementation drops the preprocessor into directive mode if it sees 'module' or 'import' (optionally preceeded by 'export') at the start of a line[1].  Those keywords are converted to unspellable internal tokens that the parser recognizes to parse module and import declarations.  An end-of-pragma token is injected at the end-of-line, and again the parser expects that after the terminating ';'. (it's leveraging the pragma machinery)

[1] it also peeks the next non-white-space token for '<', '", or <begin-identifier-char>, as specified in the std.

occurrences of 'module' and 'import' that are not lexed that way go through as regular identifier tokens, not keywords.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D122885/new/

https://reviews.llvm.org/D122885



More information about the cfe-commits mailing list