[clang] [clang][modules] Separate parsing of modulemaps (PR #119740)

Volodymyr Sapsai via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 10 12:07:34 PST 2025


================
@@ -1575,305 +1494,45 @@ namespace clang {
     /// 'textual' to match the original intent.
     llvm::SmallPtrSet<Module *, 2> UsesRequiresExcludedHack;
 
-    /// Consume the current token and return its location.
-    SourceLocation consumeToken();
-
-    /// Skip tokens until we reach the a token with the given kind
-    /// (or the end of the file).
-    void skipUntil(MMToken::TokenKind K);
-
-    bool parseModuleId(ModuleId &Id);
-    void parseModuleDecl();
-    void parseExternModuleDecl();
-    void parseRequiresDecl();
-    void parseHeaderDecl(MMToken::TokenKind, SourceLocation LeadingLoc);
-    void parseUmbrellaDirDecl(SourceLocation UmbrellaLoc);
-    void parseExportDecl();
-    void parseExportAsDecl();
-    void parseUseDecl();
-    void parseLinkDecl();
-    void parseConfigMacros();
-    void parseConflict();
-    void parseInferredModuleDecl(bool Framework, bool Explicit);
+    void handleModuleDecl(const modulemap::ModuleDecl &MD);
+    void handleExternModuleDecl(const modulemap::ExternModuleDecl &EMD);
+    void handleRequiresDecl(const modulemap::RequiresDecl &RD);
+    void handleHeaderDecl(const modulemap::HeaderDecl &HD);
+    void handleUmbrellaDirDecl(const modulemap::UmbrellaDirDecl &UDD);
+    void handleExportDecl(const modulemap::ExportDecl &ED);
+    void handleExportAsDecl(const modulemap::ExportAsDecl &EAD);
+    void handleUseDecl(const modulemap::UseDecl &UD);
+    void handleLinkDecl(const modulemap::LinkDecl &LD);
+    void handleConfigMacros(const modulemap::ConfigMacrosDecl &CMD);
+    void handleConflict(const modulemap::ConflictDecl &CD);
+    void handleInferredModuleDecl(const modulemap::ModuleDecl &MD);
 
     /// Private modules are canonicalized as Foo_Private. Clang provides extra
     /// module map search logic to find the appropriate private module when PCH
     /// is used with implicit module maps. Warn when private modules are written
     /// in other ways (FooPrivate and Foo.Private), providing notes and fixits.
-    void diagnosePrivateModules(SourceLocation ExplicitLoc,
-                                SourceLocation FrameworkLoc);
+    void diagnosePrivateModules(SourceLocation StartLoc);
 
     using Attributes = ModuleMap::Attributes;
----------------
vsapsai wrote:

I think you can do something like `using Attributes = ModuleAttributes;` but I don't have a strong opinion and the trade-offs depend on the future direction.

https://github.com/llvm/llvm-project/pull/119740


More information about the cfe-commits mailing list