mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-15 12:51:30 -05:00
Do not emit references in generated declaration files if the --noresolve flag was set. This fixes a crash in the compiler when generating declarations with /// reference and noResolve
This commit is contained in:
@@ -3079,10 +3079,8 @@ module ts {
|
||||
}
|
||||
}
|
||||
|
||||
function resolveScriptReference(sourceFile: SourceFile, reference: FileReference) {
|
||||
var referenceFileName = compilerOptions.noResolve
|
||||
? reference.filename
|
||||
: normalizePath(combinePaths(getDirectoryPath(sourceFile.filename), reference.filename));
|
||||
function tryResolveScriptReference(sourceFile: SourceFile, reference: FileReference) {
|
||||
var referenceFileName = normalizePath(combinePaths(getDirectoryPath(sourceFile.filename), reference.filename));
|
||||
return program.getSourceFile(referenceFileName);
|
||||
}
|
||||
|
||||
@@ -3108,21 +3106,23 @@ module ts {
|
||||
|
||||
if (root) {
|
||||
// Emiting single file so emit references in this file only
|
||||
var addedGlobalFileReference = false;
|
||||
forEach(root.referencedFiles, fileReference => {
|
||||
var referencedFile = resolveScriptReference(root, fileReference);
|
||||
if (!compilerOptions.noResolve) {
|
||||
var addedGlobalFileReference = false;
|
||||
forEach(root.referencedFiles, fileReference => {
|
||||
var referencedFile = tryResolveScriptReference(root, fileReference);
|
||||
|
||||
// All the references that are not going to be part of same file
|
||||
if ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference
|
||||
shouldEmitToOwnFile(referencedFile) || // This is referenced file is emitting its own js file
|
||||
!addedGlobalFileReference) { // Or the global out file corresponding to this reference was not added
|
||||
// All the references that are not going to be part of same file
|
||||
if (referencedFile && (referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference
|
||||
shouldEmitToOwnFile(referencedFile) || // This is referenced file is emitting its own js file
|
||||
!addedGlobalFileReference) { // Or the global out file corresponding to this reference was not added
|
||||
|
||||
writeReferencePath(referencedFile);
|
||||
if (!isExternalModuleOrDeclarationFile(referencedFile)) {
|
||||
addedGlobalFileReference = true;
|
||||
writeReferencePath(referencedFile);
|
||||
if (!isExternalModuleOrDeclarationFile(referencedFile)) {
|
||||
addedGlobalFileReference = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
emitNode(root);
|
||||
}
|
||||
@@ -3132,17 +3132,19 @@ module ts {
|
||||
forEach(program.getSourceFiles(), sourceFile => {
|
||||
if (!isExternalModuleOrDeclarationFile(sourceFile)) {
|
||||
// Check what references need to be added
|
||||
forEach(sourceFile.referencedFiles, fileReference => {
|
||||
var referencedFile = resolveScriptReference(sourceFile, fileReference);
|
||||
if (!compilerOptions.noResolve) {
|
||||
forEach(sourceFile.referencedFiles, fileReference => {
|
||||
var referencedFile = tryResolveScriptReference(sourceFile, fileReference);
|
||||
|
||||
// If the reference file is declaration file or external module emit that reference
|
||||
if (isExternalModuleOrDeclarationFile(referencedFile) &&
|
||||
!contains(emittedReferencedFiles, referencedFile)) { // If the file refernece was not already emitted
|
||||
// If the reference file is declaration file or external module emit that reference
|
||||
if (referencedFile && isExternalModuleOrDeclarationFile(referencedFile) &&
|
||||
!contains(emittedReferencedFiles, referencedFile)) { // If the file refernece was not already emitted
|
||||
|
||||
writeReferencePath(referencedFile);
|
||||
emittedReferencedFiles.push(referencedFile);
|
||||
}
|
||||
});
|
||||
writeReferencePath(referencedFile);
|
||||
emittedReferencedFiles.push(referencedFile);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
emitNode(sourceFile);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user