@@ -239,24 +239,15 @@ DependencyScanningWorkerFilesystem::computeAndStoreResult(
239239llvm::ErrorOr<EntryRef>
240240DependencyScanningWorkerFilesystem::getOrCreateFileSystemEntry (
241241 StringRef OriginalFilename) {
242- StringRef FilenameForLookup;
243242 SmallString<256 > PathBuf;
244- if (llvm::sys::path::is_absolute_gnu (OriginalFilename)) {
245- FilenameForLookup = OriginalFilename;
246- } else if (!WorkingDirForCacheLookup) {
247- return WorkingDirForCacheLookup.getError ();
248- } else {
249- StringRef RelFilename = OriginalFilename;
250- RelFilename.consume_front (" ./" );
251- PathBuf = *WorkingDirForCacheLookup;
252- llvm::sys::path::append (PathBuf, RelFilename);
253- FilenameForLookup = PathBuf.str ();
254- }
255- assert (llvm::sys::path::is_absolute_gnu (FilenameForLookup));
243+ auto FilenameForLookup = tryGetFilenameForLookup (OriginalFilename, PathBuf);
244+ if (!FilenameForLookup)
245+ return FilenameForLookup.getError ();
246+
256247 if (const auto *Entry =
257- findEntryByFilenameWithWriteThrough (FilenameForLookup))
248+ findEntryByFilenameWithWriteThrough (* FilenameForLookup))
258249 return EntryRef (OriginalFilename, *Entry).unwrapError ();
259- auto MaybeEntry = computeAndStoreResult (OriginalFilename, FilenameForLookup);
250+ auto MaybeEntry = computeAndStoreResult (OriginalFilename, * FilenameForLookup);
260251 if (!MaybeEntry)
261252 return MaybeEntry.getError ();
262253 return EntryRef (OriginalFilename, *MaybeEntry).unwrapError ();
@@ -364,4 +355,24 @@ void DependencyScanningWorkerFilesystem::updateWorkingDirForCacheLookup() {
364355 llvm::sys::path::is_absolute_gnu (*WorkingDirForCacheLookup));
365356}
366357
358+ llvm::ErrorOr<StringRef>
359+ DependencyScanningWorkerFilesystem::tryGetFilenameForLookup (
360+ StringRef OriginalFilename, llvm::SmallVectorImpl<char > &PathBuf) const {
361+ StringRef FilenameForLookup;
362+ if (llvm::sys::path::is_absolute_gnu (OriginalFilename)) {
363+ FilenameForLookup = OriginalFilename;
364+ } else if (!WorkingDirForCacheLookup) {
365+ return WorkingDirForCacheLookup.getError ();
366+ } else {
367+ StringRef RelFilename = OriginalFilename;
368+ RelFilename.consume_front (" ./" );
369+ PathBuf.assign (WorkingDirForCacheLookup->begin (),
370+ WorkingDirForCacheLookup->end ());
371+ llvm::sys::path::append (PathBuf, RelFilename);
372+ FilenameForLookup = StringRef{PathBuf.begin (), PathBuf.size ()};
373+ }
374+ assert (llvm::sys::path::is_absolute_gnu (FilenameForLookup));
375+ return FilenameForLookup;
376+ }
377+
367378const char DependencyScanningWorkerFilesystem::ID = 0 ;
0 commit comments