@@ -3691,23 +3691,22 @@ module ts {
3691
3691
3692
3692
// Get source file from normalized filename
3693
3693
function findSourceFile ( filename : string , isDefaultLib : boolean , refFile ?: SourceFile , refStart ?: number , refLength ?: number ) : SourceFile {
3694
- // Look through existing source files to see if we've encountered it.
3695
3694
var canonicalName = host . getCanonicalFileName ( filename ) ;
3696
- var file = getSourceFile ( filename ) ;
3697
- if ( file ) {
3698
- if ( host . useCaseSensitiveFileNames ( ) && canonicalName !== file . filename ) {
3695
+ if ( hasProperty ( filesByName , canonicalName ) ) {
3696
+ // We've already looked for this file, use cached result
3697
+ var file = filesByName [ canonicalName ] ;
3698
+ if ( file && host . useCaseSensitiveFileNames ( ) && canonicalName !== file . filename ) {
3699
3699
errors . push ( createFileDiagnostic ( refFile , refStart , refLength ,
3700
3700
Diagnostics . Filename_0_differs_from_already_included_filename_1_only_in_casing , filename , file . filename ) ) ;
3701
- }
3701
+ }
3702
3702
}
3703
3703
else {
3704
- // If we haven't, read the file.
3705
- file = host . getSourceFile ( filename , options . target , hostErrorMessage => {
3704
+ // We haven't looked for this file, do so now and cache result
3705
+ var file = filesByName [ canonicalName ] = host . getSourceFile ( filename , options . target , hostErrorMessage => {
3706
3706
errors . push ( createFileDiagnostic ( refFile , refStart , refLength ,
3707
3707
Diagnostics . Cannot_read_file_0_Colon_1 , filename , hostErrorMessage ) ) ;
3708
3708
} ) ;
3709
3709
if ( file ) {
3710
- filesByName [ host . getCanonicalFileName ( filename ) ] = file ;
3711
3710
seenNoDefaultLib = seenNoDefaultLib || file . hasNoDefaultLib ;
3712
3711
if ( ! options . noResolve ) {
3713
3712
var basePath = getDirectoryPath ( filename ) ;
@@ -3725,7 +3724,6 @@ module ts {
3725
3724
} ) ;
3726
3725
}
3727
3726
}
3728
-
3729
3727
return file ;
3730
3728
}
3731
3729
0 commit comments