[clang] [clang][modules] Separate parsing of modulemaps (PR #119740)
Michael Spencer via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 20 15:03:56 PST 2025
================
@@ -3157,25 +2140,18 @@ bool ModuleMap::parseModuleMapFile(FileEntryRef File, bool IsSystem,
assert((!Offset || *Offset <= Buffer->getBufferSize()) &&
"invalid buffer offset");
- // Parse this module map file.
- Lexer L(SourceMgr.getLocForStartOfFile(ID), MMapLangOpts,
- Buffer->getBufferStart(),
- Buffer->getBufferStart() + (Offset ? *Offset : 0),
- Buffer->getBufferEnd());
- SourceLocation Start = L.getSourceLocation();
- ModuleMapParser Parser(L, SourceMgr, Target, Diags, *this, ID, Dir, IsSystem);
- bool Result = Parser.parseModuleMapFile();
- ParsedModuleMap[File] = Result;
-
- if (Offset) {
- auto Loc = SourceMgr.getDecomposedLoc(Parser.getLocation());
- assert(Loc.first == ID && "stopped in a different file?");
- *Offset = Loc.second;
+ std::optional<modulemap::ModuleMapFile> MMF = modulemap::parseModuleMap(
+ ID, Dir, SourceMgr, Diags, IsSystem, Offset);
----------------
Bigcheese wrote:
I plan to add a separate source manager and then remap the source locations when constructing the `clang::Module` instance. I plan to do it after looking up modules by header is also lazy.
https://github.com/llvm/llvm-project/pull/119740
More information about the cfe-commits
mailing list