@@ -233,24 +233,15 @@ DependencyScanningWorkerFilesystem::computeAndStoreResult(
233233llvm::ErrorOr<EntryRef>
234234DependencyScanningWorkerFilesystem::getOrCreateFileSystemEntry (
235235 StringRef OriginalFilename) {
236- StringRef FilenameForLookup;
237236 SmallString<256 > PathBuf;
238- if (llvm::sys::path::is_absolute_gnu (OriginalFilename)) {
239- FilenameForLookup = OriginalFilename;
240- } else if (!WorkingDirForCacheLookup) {
241- return WorkingDirForCacheLookup.getError ();
242- } else {
243- StringRef RelFilename = OriginalFilename;
244- RelFilename.consume_front (" ./" );
245- PathBuf = *WorkingDirForCacheLookup;
246- llvm::sys::path::append (PathBuf, RelFilename);
247- FilenameForLookup = PathBuf.str ();
248- }
249- assert (llvm::sys::path::is_absolute_gnu (FilenameForLookup));
237+ auto FilenameForLookup = tryGetFilenameForLookup (OriginalFilename, PathBuf);
238+ if (!FilenameForLookup)
239+ return FilenameForLookup.getError ();
240+
250241 if (const auto *Entry =
251- findEntryByFilenameWithWriteThrough (FilenameForLookup))
242+ findEntryByFilenameWithWriteThrough (* FilenameForLookup))
252243 return EntryRef (OriginalFilename, *Entry).unwrapError ();
253- auto MaybeEntry = computeAndStoreResult (OriginalFilename, FilenameForLookup);
244+ auto MaybeEntry = computeAndStoreResult (OriginalFilename, * FilenameForLookup);
254245 if (!MaybeEntry)
255246 return MaybeEntry.getError ();
256247 return EntryRef (OriginalFilename, *MaybeEntry).unwrapError ();
@@ -351,4 +342,24 @@ void DependencyScanningWorkerFilesystem::updateWorkingDirForCacheLookup() {
351342 llvm::sys::path::is_absolute_gnu (*WorkingDirForCacheLookup));
352343}
353344
345+ llvm::ErrorOr<StringRef>
346+ DependencyScanningWorkerFilesystem::tryGetFilenameForLookup (
347+ StringRef OriginalFilename, llvm::SmallVectorImpl<char > &PathBuf) const {
348+ StringRef FilenameForLookup;
349+ if (llvm::sys::path::is_absolute_gnu (OriginalFilename)) {
350+ FilenameForLookup = OriginalFilename;
351+ } else if (!WorkingDirForCacheLookup) {
352+ return WorkingDirForCacheLookup.getError ();
353+ } else {
354+ StringRef RelFilename = OriginalFilename;
355+ RelFilename.consume_front (" ./" );
356+ PathBuf.assign (WorkingDirForCacheLookup->begin (),
357+ WorkingDirForCacheLookup->end ());
358+ llvm::sys::path::append (PathBuf, RelFilename);
359+ FilenameForLookup = StringRef{PathBuf.begin (), PathBuf.size ()};
360+ }
361+ assert (llvm::sys::path::is_absolute_gnu (FilenameForLookup));
362+ return FilenameForLookup;
363+ }
364+
354365const char DependencyScanningWorkerFilesystem::ID = 0 ;
0 commit comments