diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d50e440c5e935..d0ed02375c475 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -254,9 +254,14 @@ module ts { return symbolLinks[symbol.id] || (symbolLinks[symbol.id] = {}); } - function getNodeLinks(node: Node): NodeLinks { + function assignNodeId(node: Node): number { if (!node.id) node.id = nextNodeId++; - return nodeLinks[node.id] || (nodeLinks[node.id] = {}); + return node.id; + } + + function getNodeLinks(node: Node): NodeLinks { + var nodeId = assignNodeId(node); + return nodeLinks[nodeId] || (nodeLinks[nodeId] = {}); } function getSourceFile(node: Node): SourceFile { @@ -10954,134 +10959,7 @@ module ts { return symbol.flags & SymbolFlags.ValueModule && symbol.declarations.length === 1 && symbol.declarations[0].kind === SyntaxKind.SourceFile; } - function isNodeDescendentOf(node: Node, ancestor: Node): boolean { - while (node) { - if (node === ancestor) return true; - node = node.parent; - } - return false; - } - - function isUniqueLocalName(name: string, container: Node): boolean { - for (let node = container; isNodeDescendentOf(node, container); node = node.nextContainer) { - if (node.locals && hasProperty(node.locals, name)) { - // We conservatively include alias symbols to cover cases where they're emitted as locals - if (node.locals[name].flags & (SymbolFlags.Value | SymbolFlags.ExportValue | SymbolFlags.Alias)) { - return false; - } - } - } - return true; - } - - function getGeneratedNamesForSourceFile(sourceFile: SourceFile): Map { - let links = getNodeLinks(sourceFile); - let generatedNames = links.generatedNames; - if (!generatedNames) { - generatedNames = links.generatedNames = {}; - generateNames(sourceFile); - } - return generatedNames; - - function generateNames(node: Node) { - switch (node.kind) { - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.ClassDeclaration: - generateNameForFunctionOrClassDeclaration(node); - break; - case SyntaxKind.ModuleDeclaration: - generateNameForModuleOrEnum(node); - generateNames((node).body); - break; - case SyntaxKind.EnumDeclaration: - generateNameForModuleOrEnum(node); - break; - case SyntaxKind.ImportDeclaration: - generateNameForImportDeclaration(node); - break; - case SyntaxKind.ExportDeclaration: - generateNameForExportDeclaration(node); - break; - case SyntaxKind.ExportAssignment: - generateNameForExportAssignment(node); - break; - case SyntaxKind.SourceFile: - case SyntaxKind.ModuleBlock: - forEach((node).statements, generateNames); - break; - } - } - - function isExistingName(name: string) { - return hasProperty(globals, name) || hasProperty(sourceFile.identifiers, name) || hasProperty(generatedNames, name); - } - - function makeUniqueName(baseName: string): string { - let name = generateUniqueName(baseName, isExistingName); - return generatedNames[name] = name; - } - - function assignGeneratedName(node: Node, name: string) { - getNodeLinks(node).generatedName = unescapeIdentifier(name); - } - - function generateNameForFunctionOrClassDeclaration(node: Declaration) { - if (!node.name) { - assignGeneratedName(node, makeUniqueName("default")); - } - } - - function generateNameForModuleOrEnum(node: ModuleDeclaration | EnumDeclaration) { - if (node.name.kind === SyntaxKind.Identifier) { - let name = node.name.text; - // Use module/enum name itself if it is unique, otherwise make a unique variation - assignGeneratedName(node, isUniqueLocalName(name, node) ? name : makeUniqueName(name)); - } - } - - function generateNameForImportOrExportDeclaration(node: ImportDeclaration | ExportDeclaration) { - let expr = getExternalModuleName(node); - let baseName = expr.kind === SyntaxKind.StringLiteral ? - escapeIdentifier(makeIdentifierFromModuleName((expr).text)) : "module"; - assignGeneratedName(node, makeUniqueName(baseName)); - } - - function generateNameForImportDeclaration(node: ImportDeclaration) { - if (node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === SyntaxKind.NamedImports) { - generateNameForImportOrExportDeclaration(node); - } - } - - function generateNameForExportDeclaration(node: ExportDeclaration) { - if (node.moduleSpecifier) { - generateNameForImportOrExportDeclaration(node); - } - } - - function generateNameForExportAssignment(node: ExportAssignment) { - if (node.expression && node.expression.kind !== SyntaxKind.Identifier) { - assignGeneratedName(node, makeUniqueName("default")); - } - } - } - - function getGeneratedNameForNode(node: Node) { - let links = getNodeLinks(node); - if (!links.generatedName) { - getGeneratedNamesForSourceFile(getSourceFile(node)); - } - return links.generatedName; - } - - function getLocalNameOfContainer(container: ModuleDeclaration | EnumDeclaration): string { - return getGeneratedNameForNode(container); - } - - function getLocalNameForImportDeclaration(node: ImportDeclaration): string { - return getGeneratedNameForNode(node); - } - - function getAliasNameSubstitution(symbol: Symbol): string { + function getAliasNameSubstitution(symbol: Symbol, getGeneratedNameForNode: (Node: Node) => string): string { let declaration = getDeclarationOfAliasSymbol(symbol); if (declaration && declaration.kind === SyntaxKind.ImportSpecifier) { let moduleName = getGeneratedNameForNode(declaration.parent.parent.parent); @@ -11090,7 +10968,7 @@ module ts { } } - function getExportNameSubstitution(symbol: Symbol, location: Node): string { + function getExportNameSubstitution(symbol: Symbol, location: Node, getGeneratedNameForNode: (Node: Node) => string): string { if (isExternalModuleSymbol(symbol.parent)) { var symbolName = unescapeIdentifier(symbol.name); // If this is es6 or higher, just use the name of the export @@ -11112,24 +10990,24 @@ module ts { } } - function getExpressionNameSubstitution(node: Identifier): string { + function getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (Node: Node) => string): string { let symbol = getNodeLinks(node).resolvedSymbol; if (symbol) { // Whan an identifier resolves to a parented symbol, it references an exported entity from // another declaration of the same internal module. if (symbol.parent) { - return getExportNameSubstitution(symbol, node.parent); + return getExportNameSubstitution(symbol, node.parent, getGeneratedNameForNode); } // If we reference an exported entity within the same module declaration, then whether // we prefix depends on the kind of entity. SymbolFlags.ExportHasLocal encompasses all the // kinds that we do NOT prefix. let exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); if (symbol !== exportSymbol && !(exportSymbol.flags & SymbolFlags.ExportHasLocal)) { - return getExportNameSubstitution(exportSymbol, node.parent); + return getExportNameSubstitution(exportSymbol, node.parent, getGeneratedNameForNode); } // Named imports from ES6 import declarations are rewritten if (symbol.flags & SymbolFlags.Alias && languageVersion < ScriptTarget.ES6) { - return getAliasNameSubstitution(symbol); + return getAliasNameSubstitution(symbol, getGeneratedNameForNode); } } } @@ -11139,6 +11017,10 @@ module ts { return symbol && symbol !== unknownSymbol && symbolIsValue(symbol) && !isConstEnumSymbol(symbol); } + function hasGlobalName(name: string): boolean { + return hasProperty(globals, name); + } + function isTopLevelValueImportEqualsWithEntityName(node: ImportEqualsDeclaration): boolean { if (node.parent.kind !== SyntaxKind.SourceFile || !isInternalModuleImportEqualsDeclaration(node)) { // parent is not source file or it is not reference to internal module @@ -11234,8 +11116,7 @@ module ts { function isUnknownIdentifier(location: Node, name: string): boolean { Debug.assert(!nodeIsSynthesized(location), "isUnknownIdentifier called with a synthesized location"); - return !resolveName(location, name, SymbolFlags.Value, /*nodeNotFoundMessage*/ undefined, /*nameArg*/ undefined) && - !hasProperty(getGeneratedNamesForSourceFile(getSourceFile(location)), name); + return !resolveName(location, name, SymbolFlags.Value, /*nodeNotFoundMessage*/ undefined, /*nameArg*/ undefined); } function getBlockScopedVariableId(n: Identifier): number { @@ -11265,7 +11146,6 @@ module ts { function createResolver(): EmitResolver { return { - getGeneratedNameForNode, getExpressionNameSubstitution, hasExportDefaultValue, isReferencedAliasDeclaration, @@ -11282,6 +11162,8 @@ module ts { isUnknownIdentifier, collectLinkedAliases, getBlockScopedVariableId, + hasGlobalName, + getNodeId: assignNodeId, }; } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index b62ab7045535b..1452a4878123c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3,18 +3,24 @@ module ts { + interface ScopeTemp { + names?: Map; + previous: ScopeTemp; + counter: number; + tempVariables?: Identifier[]; + tempParameters?: Identifier[]; + } + + function newScopeTemp(previous?: ScopeTemp): ScopeTemp { + return { previous, counter: 0 }; + } + interface ExternalImportInfo { rootNode: ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration; declarationNode?: ImportEqualsDeclaration | ImportClause | NamespaceImport; namedImports?: NamedImports; } - // represents one LexicalEnvironment frame to store unique generated names - interface ScopeFrame { - names: Map; - previous: ScopeFrame; - } - export function isExternalModuleOrDeclarationFile(sourceFile: SourceFile) { return isExternalModule(sourceFile) || isDeclarationFile(sourceFile); } @@ -71,15 +77,12 @@ module ts { let currentSourceFile: SourceFile; - let lastFrame: ScopeFrame; - let currentScopeNames: Map; - - let generatedBlockScopeNames: string[]; + let generatedNames: Map; + let nodeToGeneratedName: string[]; + let blockScopedVariableToGeneratedName: string[]; + let currentScopeTemp: ScopeTemp = newScopeTemp(); let extendsEmitted = false; - let tempCount = 0; - let tempVariables: Identifier[]; - let tempParameters: Identifier[]; let externalImports: ExternalImportInfo[]; let exportSpecifiers: Map; let exportDefault: FunctionDeclaration | ClassDeclaration | ExportAssignment | ExportSpecifier; @@ -144,81 +147,193 @@ module ts { emit(sourceFile); } - // enters the new lexical environment - // return value should be passed to matching call to exitNameScope. - function enterNameScope(): boolean { - let names = currentScopeNames; - currentScopeNames = undefined; - if (names) { - lastFrame = { names, previous: lastFrame }; - return true; + function isNodeDescendentOf(node: Node, ancestor: Node): boolean { + while (node) { + if (node === ancestor) return true; + node = node.parent; } return false; } - function exitNameScope(popFrame: boolean): void { - if (popFrame) { - currentScopeNames = lastFrame.names; - lastFrame = lastFrame.previous; + function isUniqueLocalName(name: string, container: Node): boolean { + for (let node = container; isNodeDescendentOf(node, container); node = node.nextContainer) { + if (node.locals && hasProperty(node.locals, name)) { + // We conservatively include alias symbols to cover cases where they're emitted as locals + if (node.locals[name].flags & (SymbolFlags.Value | SymbolFlags.ExportValue | SymbolFlags.Alias)) { + return false; + } + } } - else { - currentScopeNames = undefined; + return true; + } + + function generateNameForNode(node: Node): string { + switch (node.kind) { + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.ClassDeclaration: + return generateNameForFunctionOrClassDeclaration(node); + case SyntaxKind.ModuleDeclaration: + return generateNameForModuleOrEnum(node); + case SyntaxKind.EnumDeclaration: + return generateNameForModuleOrEnum(node); + case SyntaxKind.ImportDeclaration: + return generateNameForImportDeclaration(node); + case SyntaxKind.ExportDeclaration: + return generateNameForExportDeclaration(node); + case SyntaxKind.ExportAssignment: + return generateNameForExportAssignment(node); + default: + Debug.fail("Unexpected node kind:" + node.kind); + return undefined; } } - function generateUniqueNameForLocation(location: Node, baseName: string): string { - let name: string - // first try to check if base name can be used as is - if (!isExistingName(location, baseName)) { - name = baseName; + function isUniqueName(name: string) { + return !resolver.hasGlobalName(name) && + !hasProperty(currentSourceFile.identifiers, name) && + (!generatedNames || !hasProperty(generatedNames, name)); + } + + function isUniqueTempVariableName(location: Node, name: string): boolean { + if (!resolver.isUnknownIdentifier(location, name)) { + return false; } - else { - name = generateUniqueName(baseName, n => isExistingName(location, n)); + + return !currentScopeTemp.names || !hasProperty(currentScopeTemp.names, name); + } + + function makeUniqueName(baseName: string): string { + // First try '_name' + if (baseName.charCodeAt(0) !== CharacterCodes._) { + baseName = "_" + baseName; + if (isUniqueName(baseName)) { + return recordGeneratedName(baseName, /*isTempVariableName*/ false); + } + } + // Find the first unique '_name_n', where n is a positive number + if (baseName.charCodeAt(baseName.length - 1) !== CharacterCodes._) { + baseName += "_"; + } + let i = 1; + while (true) { + let name = baseName + i; + if (isUniqueName(name)) { + return recordGeneratedName(name, /*isTempVariableName*/ false);; + } + i++; } - - return recordNameInCurrentScope(name); } - - function recordNameInCurrentScope(name: string): string { - if (!currentScopeNames) { - currentScopeNames = {}; + + // Create a temporary variable with a unique unused name. + function createTempVariable(location: Node, preferredName?: string): Identifier { + for (var name = preferredName; !name || !isUniqueTempVariableName(location, name); currentScopeTemp.counter++) { + // _a .. _h, _j ... _z, _0, _1, ... + + // Note: we avoid generating _i and _n as those are common names we want in other places. + var char = CharacterCodes.a + currentScopeTemp.counter; + if (char === CharacterCodes.i || char === CharacterCodes.n) { + continue; + } + + if (currentScopeTemp.counter < 26) { + name = "_" + String.fromCharCode(char); + } + else { + name = "_" + (currentScopeTemp.counter - 26); + } } - return currentScopeNames[name] = name; + recordGeneratedName(name, /*isTempVariableName*/ true) + + let result = createSynthesizedNode(SyntaxKind.Identifier); + result.text = name; + return result; } - function isExistingName(location: Node, name: string) { - // check if resolver is aware of this name (if name was seen during the typecheck) - if (!resolver.isUnknownIdentifier(location, name)) { - return true; - } - // check if name is present in generated names that were introduced by the emitter - if (currentScopeNames && hasProperty(currentScopeNames, name)) { - return true; + function recordGeneratedName(name: string, isTempVariableName: boolean) { + if (!generatedNames) { + generatedNames = {}; } - // check generated names in outer scopes - // let x; - // function foo() { - // let x; // 1 - // function bar() { - // { - // let x; // 2 - // } - // console.log(x); // 3 - // } - //} - // here both x(1) and x(2) should be renamed and their names should be different - // so x in (3) will refer to x(1) - let frame = lastFrame; - while (frame) { - if (hasProperty(frame.names, name)) { - return true; + generatedNames[name] = name; + + if (isTempVariableName) { + if (!currentScopeTemp.names) { + currentScopeTemp.names = {}; } - frame = frame.previous; + currentScopeTemp.names[name] = name; } - return false; + + return name; + } + + function recordTempDeclaration(name: Identifier): void { + if (!currentScopeTemp.tempVariables) { + currentScopeTemp.tempVariables = []; + } + currentScopeTemp.tempVariables.push(name); + } + + function createAndRecordTempVariable(location: Node, preferredName?: string): Identifier { + let temp = createTempVariable(location, preferredName); + recordTempDeclaration(temp); + return temp; + } + + + function assignGeneratedName(node: Node, name: string): string { + if (!nodeToGeneratedName) { + nodeToGeneratedName = []; + } + return nodeToGeneratedName[resolver.getNodeId(node)] = unescapeIdentifier(name); + } + + function generateNameForFunctionOrClassDeclaration(node: Declaration): string { + if (!node.name) { + return assignGeneratedName(node, makeUniqueName("default")); + } + } + + function generateNameForModuleOrEnum(node: ModuleDeclaration | EnumDeclaration): string { + if (node.name.kind === SyntaxKind.Identifier) { + let name = node.name.text; + // Use module/enum name itself if it is unique, otherwise make a unique variation + return assignGeneratedName(node, isUniqueLocalName(name, node) ? name : makeUniqueName(name)); + } + } + + function generateNameForImportOrExportDeclaration(node: ImportDeclaration | ExportDeclaration): string { + let expr = getExternalModuleName(node); + let baseName = expr.kind === SyntaxKind.StringLiteral ? + escapeIdentifier(makeIdentifierFromModuleName((expr).text)) : "module"; + return assignGeneratedName(node, makeUniqueName(baseName)); + } + + function generateNameForImportDeclaration(node: ImportDeclaration): string { + if (node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === SyntaxKind.NamedImports) { + return generateNameForImportOrExportDeclaration(node); + } + } + + function generateNameForExportDeclaration(node: ExportDeclaration): string { + if (node.moduleSpecifier) { + return generateNameForImportOrExportDeclaration(node); + } + } + + function generateNameForExportAssignment(node: ExportAssignment): string { + if (node.expression && node.expression.kind !== SyntaxKind.Identifier) { + return assignGeneratedName(node, makeUniqueName("default")); + } + } + + function getGeneratedNameForNode(node: Node) { + var nodeId = resolver.getNodeId(node); + if (nodeToGeneratedName && nodeToGeneratedName[nodeId]) { + return nodeToGeneratedName[nodeId]; + } + return generateNameForNode(node); } function initializeEmitterWithSourceMaps() { @@ -585,51 +700,8 @@ module ts { writeFile(host, diagnostics, jsFilePath, emitOutput, writeByteOrderMark); } - // Create a temporary variable with a unique unused name. The forLoopVariable parameter signals that the - // name should be one that is appropriate for a for loop variable. - function createTempVariable(location: Node, preferredName?: string): Identifier { - for (var name = preferredName; !name || isExistingName(location, name); tempCount++) { - // _a .. _h, _j ... _z, _0, _1, ... - - // Note: we avoid generating _i and _n as those are common names we want in other places. - var char = CharacterCodes.a + tempCount; - if (char === CharacterCodes.i || char === CharacterCodes.n) { - continue; - } - - if (tempCount < 26) { - name = "_" + String.fromCharCode(char); - } - else { - name = "_" + (tempCount - 26); - } - } - - // This is necessary so that a name generated via renameNonTopLevelLetAndConst will see the name - // we just generated. - recordNameInCurrentScope(name); - - let result = createSynthesizedNode(SyntaxKind.Identifier); - result.text = name; - return result; - } - - function recordTempDeclaration(name: Identifier): void { - if (!tempVariables) { - tempVariables = []; - } - tempVariables.push(name); - } - - function createAndRecordTempVariable(location: Node, preferredName?: string): Identifier { - let temp = createTempVariable(location, preferredName); - recordTempDeclaration(temp); - - return temp; - } - function emitTempDeclarations(newLine: boolean) { - if (tempVariables) { + if (currentScopeTemp.tempVariables) { if (newLine) { writeLine(); } @@ -637,7 +709,7 @@ module ts { write(" "); } write("var "); - emitCommaList(tempVariables); + emitCommaList(currentScopeTemp.tempVariables); write(";"); } } @@ -1085,7 +1157,7 @@ module ts { } function emitExpressionIdentifier(node: Identifier) { - let substitution = resolver.getExpressionNameSubstitution(node); + let substitution = resolver.getExpressionNameSubstitution(node, getGeneratedNameForNode); if (substitution) { write(substitution); } @@ -1094,8 +1166,8 @@ module ts { } } - function getGeneratedNameForIdentifier(node: Identifier): string { - if (nodeIsSynthesized(node) || !generatedBlockScopeNames) { + function getGeneratedNameForBlockScopedVariable(node: Identifier): string { + if (nodeIsSynthesized(node) || !blockScopedVariableToGeneratedName) { return undefined; } @@ -1104,12 +1176,12 @@ module ts { return undefined; } - return generatedBlockScopeNames[variableId]; + return blockScopedVariableToGeneratedName[variableId]; } function emitIdentifier(node: Identifier, allowGeneratedIdentifiers: boolean) { if (allowGeneratedIdentifiers) { - let generatedName = getGeneratedNameForIdentifier(node); + let generatedName = getGeneratedNameForBlockScopedVariable(node); if (generatedName) { write(generatedName); return; @@ -1332,7 +1404,7 @@ module ts { // manage by just emitting strings (which is a lot more performant). //let prefix = createIdentifier(resolver.getExpressionNamePrefix((property).name)); //return createPropertyAccessExpression(prefix, (property).name); - return createIdentifier(resolver.getExpressionNameSubstitution((property).name)); + return createIdentifier(resolver.getExpressionNameSubstitution((property).name, getGeneratedNameForNode)); case SyntaxKind.MethodDeclaration: return createFunctionExpression((property).parameters, (property).body); @@ -1536,7 +1608,7 @@ module ts { if (languageVersion < ScriptTarget.ES6) { // Emit identifier as an identifier write(": "); - var generatedName = getGeneratedNameForIdentifier(node.name); + var generatedName = getGeneratedNameForBlockScopedVariable(node.name); if (generatedName) { write(generatedName); } @@ -1546,7 +1618,7 @@ module ts { emitExpressionIdentifier(node.name); } } - else if (resolver.getExpressionNameSubstitution(node.name)) { + else if (resolver.getExpressionNameSubstitution(node.name, getGeneratedNameForNode)) { // Emit identifier as an identifier write(": "); // Even though this is stored as identifier treat it as an expression @@ -2323,7 +2395,7 @@ module ts { function emitContainingModuleName(node: Node) { let container = getContainingModule(node); - write(container ? resolver.getGeneratedNameForNode(container) : "exports"); + write(container ? getGeneratedNameForNode(container) : "exports"); } function emitModuleMemberName(node: Declaration) { @@ -2331,7 +2403,7 @@ module ts { if (getCombinedNodeFlags(node) & NodeFlags.Export) { var container = getContainingModule(node); if (container) { - write(resolver.getGeneratedNameForNode(container)); + write(getGeneratedNameForNode(container)); write("."); } else if (languageVersion < ScriptTarget.ES6) { @@ -2678,17 +2750,12 @@ module ts { return; } - let blockScopeContainer = getEnclosingBlockScopeContainer(node); - let parent = blockScopeContainer.kind === SyntaxKind.SourceFile - ? blockScopeContainer - : blockScopeContainer.parent; - - let generatedName = generateUniqueNameForLocation(parent, (node).text); + let generatedName = makeUniqueName((node).text); let variableId = resolver.getBlockScopedVariableId(node); - if (!generatedBlockScopeNames) { - generatedBlockScopeNames = []; + if (!blockScopedVariableToGeneratedName) { + blockScopedVariableToGeneratedName = []; } - generatedBlockScopeNames[variableId] = generatedName; + blockScopedVariableToGeneratedName[variableId] = generatedName; } function isES6ModuleMemberDeclaration(node: Node) { @@ -2717,10 +2784,10 @@ module ts { if (languageVersion < ScriptTarget.ES6) { if (isBindingPattern(node.name)) { let name = createTempVariable(node); - if (!tempParameters) { - tempParameters = []; + if (!currentScopeTemp.tempParameters) { + currentScopeTemp.tempParameters = []; } - tempParameters.push(name); + currentScopeTemp.tempParameters.push(name); emit(name); } else { @@ -2743,7 +2810,7 @@ module ts { if (isBindingPattern(p.name)) { writeLine(); write("var "); - emitDestructuring(p, /*isAssignmentExpressionStatement*/ false, tempParameters[tempIndex]); + emitDestructuring(p, /*isAssignmentExpressionStatement*/ false, currentScopeTemp.tempParameters[tempIndex]); write(";"); tempIndex++; } @@ -2820,7 +2887,7 @@ module ts { emitNodeWithoutSourceMap(node.name); } else { - write(resolver.getGeneratedNameForNode(node)); + write(getGeneratedNameForNode(node)); } } @@ -2903,14 +2970,7 @@ module ts { } function emitSignatureAndBody(node: FunctionLikeDeclaration) { - let saveTempCount = tempCount; - let saveTempVariables = tempVariables; - let saveTempParameters = tempParameters; - tempCount = 0; - tempVariables = undefined; - tempParameters = undefined; - - let popFrame = enterNameScope() + currentScopeTemp = newScopeTemp(currentScopeTemp); // When targeting ES6, emit arrow function natively in ES6 if (shouldEmitAsArrowFunction(node)) { @@ -2943,11 +3003,7 @@ module ts { write(";"); } - exitNameScope(popFrame); - - tempCount = saveTempCount; - tempVariables = saveTempVariables; - tempParameters = saveTempParameters; + currentScopeTemp = currentScopeTemp.previous; } // Returns true if any preamble code was emitted. @@ -3238,14 +3294,8 @@ module ts { } function emitConstructor(node: ClassDeclaration, baseTypeNode: TypeReferenceNode) { - let saveTempCount = tempCount; - let saveTempVariables = tempVariables; - let saveTempParameters = tempParameters; - tempCount = 0; - tempVariables = undefined; - tempParameters = undefined; - - let popFrame = enterNameScope(); + currentScopeTemp = newScopeTemp(currentScopeTemp); + // Check if we have property assignment inside class declaration. // If there is property assignment, we need to emit constructor whether users define it or not // If there is no property assignment, we can omit constructor if users do not define it @@ -3354,11 +3404,7 @@ module ts { emitTrailingComments(ctor); } - exitNameScope(popFrame); - - tempCount = saveTempCount; - tempVariables = saveTempVariables; - tempParameters = saveTempParameters; + currentScopeTemp = currentScopeTemp.previous; } function emitClassDeclarationForES6AndHigher(node: ClassDeclaration) { @@ -3494,7 +3540,7 @@ module ts { emitStart(node); write("(function ("); emitStart(node.name); - write(resolver.getGeneratedNameForNode(node)); + write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") {"); increaseIndent(); @@ -3529,11 +3575,11 @@ module ts { } function emitEnumMember(node: EnumMember) { - let enumParent = node.parent; + let enumParentName = getGeneratedNameForNode(node.parent); emitStart(node); - write(resolver.getGeneratedNameForNode(enumParent)); + write(enumParentName); write("["); - write(resolver.getGeneratedNameForNode(enumParent)); + write(enumParentName); write("["); emitExpressionForPropertyName(node.name); write("] = "); @@ -3586,21 +3632,15 @@ module ts { emitStart(node); write("(function ("); emitStart(node.name); - write(resolver.getGeneratedNameForNode(node)); + write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); if (node.body.kind === SyntaxKind.ModuleBlock) { - let saveTempCount = tempCount; - let saveTempVariables = tempVariables; - tempCount = 0; - tempVariables = undefined; - let popFrame = enterNameScope(); + currentScopeTemp = newScopeTemp(currentScopeTemp); emit(node.body); - exitNameScope(popFrame); - tempCount = saveTempCount; - tempVariables = saveTempVariables; + currentScopeTemp = currentScopeTemp.previous; } else { write("{"); @@ -3762,7 +3802,7 @@ module ts { } else if (namedImports) { write("var "); - write(resolver.getGeneratedNameForNode(node)); + write(getGeneratedNameForNode(node)); write(" = "); emitRequire(moduleName); } @@ -3817,7 +3857,7 @@ module ts { if (languageVersion < ScriptTarget.ES6 || node.parent.kind !== SyntaxKind.SourceFile) { if (node.moduleSpecifier) { emitStart(node); - let generatedName = resolver.getGeneratedNameForNode(node); + let generatedName = getGeneratedNameForNode(node); if (compilerOptions.module !== ModuleKind.AMD) { write("var "); write(generatedName); @@ -3920,7 +3960,7 @@ module ts { return { rootNode: node, namedImports: importClause.namedBindings, - localName: resolver.getGeneratedNameForNode(node) + localName: getGeneratedNameForNode(node) }; } } @@ -4025,7 +4065,7 @@ module ts { emit(info.declarationNode.name); } else { - write(resolver.getGeneratedNameForNode(info.rootNode)); + write(getGeneratedNameForNode(info.rootNode)); } }); forEach(node.amdDependencies, amdDependency => { @@ -4557,5 +4597,4 @@ module ts { } } } -} - +} \ No newline at end of file diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 6d0b1309a7280..a4642a64aa478 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1203,8 +1203,8 @@ module ts { } export interface EmitResolver { - getGeneratedNameForNode(node: Node): string; - getExpressionNameSubstitution(node: Identifier): string; + hasGlobalName(name: string): boolean; + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; hasExportDefaultValue(node: SourceFile): boolean; isReferencedAliasDeclaration(node: Node): boolean; isTopLevelValueImportEqualsWithEntityName(node: ImportEqualsDeclaration): boolean; @@ -1221,6 +1221,7 @@ module ts { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; getBlockScopedVariableId(node: Identifier): number; + getNodeId(node: Node): number; } export const enum SymbolFlags { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index bdd23f82746b0..a6febeab01665 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1212,28 +1212,6 @@ module ts { return node; } - export function generateUniqueName(baseName: string, isExistingName: (name: string) => boolean): string { - // First try '_name' - if (baseName.charCodeAt(0) !== CharacterCodes._) { - baseName = "_" + baseName; - if (!isExistingName(baseName)) { - return baseName; - } - } - // Find the first unique '_name_n', where n is a positive number - if (baseName.charCodeAt(baseName.length - 1) !== CharacterCodes._) { - baseName += "_"; - } - let i = 1; - while (true) { - let name = baseName + i; - if (!isExistingName(name)) { - return name; - } - i++; - } - } - // @internal export function createDiagnosticCollection(): DiagnosticCollection { let nonFileDiagnostics: Diagnostic[] = []; diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index b8f4c7cdd136b..cf1f5a195b048 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -938,8 +938,8 @@ declare module "typescript" { errorModuleName?: string; } interface EmitResolver { - getGeneratedNameForNode(node: Node): string; - getExpressionNameSubstitution(node: Identifier): string; + hasGlobalName(name: string): boolean; + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; hasExportDefaultValue(node: SourceFile): boolean; isReferencedAliasDeclaration(node: Node): boolean; isTopLevelValueImportEqualsWithEntityName(node: ImportEqualsDeclaration): boolean; @@ -955,6 +955,7 @@ declare module "typescript" { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; getBlockScopedVariableId(node: Identifier): number; + getNodeId(node: Node): number; } const enum SymbolFlags { FunctionScopedVariable = 1, diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index e1d9aa5896188..bcb45740e8f90 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -3003,15 +3003,17 @@ declare module "typescript" { interface EmitResolver { >EmitResolver : EmitResolver - getGeneratedNameForNode(node: Node): string; ->getGeneratedNameForNode : (node: Node) => string ->node : Node ->Node : Node + hasGlobalName(name: string): boolean; +>hasGlobalName : (name: string) => boolean +>name : string - getExpressionNameSubstitution(node: Identifier): string; ->getExpressionNameSubstitution : (node: Identifier) => string + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; +>getExpressionNameSubstitution : (node: Identifier, getGeneratedNameForNode: (node: Node) => string) => string >node : Identifier >Identifier : Identifier +>getGeneratedNameForNode : (node: Node) => string +>node : Node +>Node : Node hasExportDefaultValue(node: SourceFile): boolean; >hasExportDefaultValue : (node: SourceFile) => boolean @@ -3119,6 +3121,11 @@ declare module "typescript" { >getBlockScopedVariableId : (node: Identifier) => number >node : Identifier >Identifier : Identifier + + getNodeId(node: Node): number; +>getNodeId : (node: Node) => number +>node : Node +>Node : Node } const enum SymbolFlags { >SymbolFlags : SymbolFlags diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index 4e3af8d1be096..fc8b7f5035fae 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -969,8 +969,8 @@ declare module "typescript" { errorModuleName?: string; } interface EmitResolver { - getGeneratedNameForNode(node: Node): string; - getExpressionNameSubstitution(node: Identifier): string; + hasGlobalName(name: string): boolean; + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; hasExportDefaultValue(node: SourceFile): boolean; isReferencedAliasDeclaration(node: Node): boolean; isTopLevelValueImportEqualsWithEntityName(node: ImportEqualsDeclaration): boolean; @@ -986,6 +986,7 @@ declare module "typescript" { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; getBlockScopedVariableId(node: Identifier): number; + getNodeId(node: Node): number; } const enum SymbolFlags { FunctionScopedVariable = 1, diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 7cf542f0b40f6..df96987b688da 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -3149,15 +3149,17 @@ declare module "typescript" { interface EmitResolver { >EmitResolver : EmitResolver - getGeneratedNameForNode(node: Node): string; ->getGeneratedNameForNode : (node: Node) => string ->node : Node ->Node : Node + hasGlobalName(name: string): boolean; +>hasGlobalName : (name: string) => boolean +>name : string - getExpressionNameSubstitution(node: Identifier): string; ->getExpressionNameSubstitution : (node: Identifier) => string + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; +>getExpressionNameSubstitution : (node: Identifier, getGeneratedNameForNode: (node: Node) => string) => string >node : Identifier >Identifier : Identifier +>getGeneratedNameForNode : (node: Node) => string +>node : Node +>Node : Node hasExportDefaultValue(node: SourceFile): boolean; >hasExportDefaultValue : (node: SourceFile) => boolean @@ -3265,6 +3267,11 @@ declare module "typescript" { >getBlockScopedVariableId : (node: Identifier) => number >node : Identifier >Identifier : Identifier + + getNodeId(node: Node): number; +>getNodeId : (node: Node) => number +>node : Node +>Node : Node } const enum SymbolFlags { >SymbolFlags : SymbolFlags diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 261ad5b25f6fe..d7a7771163082 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -970,8 +970,8 @@ declare module "typescript" { errorModuleName?: string; } interface EmitResolver { - getGeneratedNameForNode(node: Node): string; - getExpressionNameSubstitution(node: Identifier): string; + hasGlobalName(name: string): boolean; + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; hasExportDefaultValue(node: SourceFile): boolean; isReferencedAliasDeclaration(node: Node): boolean; isTopLevelValueImportEqualsWithEntityName(node: ImportEqualsDeclaration): boolean; @@ -987,6 +987,7 @@ declare module "typescript" { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; getBlockScopedVariableId(node: Identifier): number; + getNodeId(node: Node): number; } const enum SymbolFlags { FunctionScopedVariable = 1, diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index eb4c7ab122f89..b8af89a6383bb 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -3099,15 +3099,17 @@ declare module "typescript" { interface EmitResolver { >EmitResolver : EmitResolver - getGeneratedNameForNode(node: Node): string; ->getGeneratedNameForNode : (node: Node) => string ->node : Node ->Node : Node + hasGlobalName(name: string): boolean; +>hasGlobalName : (name: string) => boolean +>name : string - getExpressionNameSubstitution(node: Identifier): string; ->getExpressionNameSubstitution : (node: Identifier) => string + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; +>getExpressionNameSubstitution : (node: Identifier, getGeneratedNameForNode: (node: Node) => string) => string >node : Identifier >Identifier : Identifier +>getGeneratedNameForNode : (node: Node) => string +>node : Node +>Node : Node hasExportDefaultValue(node: SourceFile): boolean; >hasExportDefaultValue : (node: SourceFile) => boolean @@ -3215,6 +3217,11 @@ declare module "typescript" { >getBlockScopedVariableId : (node: Identifier) => number >node : Identifier >Identifier : Identifier + + getNodeId(node: Node): number; +>getNodeId : (node: Node) => number +>node : Node +>Node : Node } const enum SymbolFlags { >SymbolFlags : SymbolFlags diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index a821bc5011d74..e8194bbfe8e31 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -1007,8 +1007,8 @@ declare module "typescript" { errorModuleName?: string; } interface EmitResolver { - getGeneratedNameForNode(node: Node): string; - getExpressionNameSubstitution(node: Identifier): string; + hasGlobalName(name: string): boolean; + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; hasExportDefaultValue(node: SourceFile): boolean; isReferencedAliasDeclaration(node: Node): boolean; isTopLevelValueImportEqualsWithEntityName(node: ImportEqualsDeclaration): boolean; @@ -1024,6 +1024,7 @@ declare module "typescript" { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; getBlockScopedVariableId(node: Identifier): number; + getNodeId(node: Node): number; } const enum SymbolFlags { FunctionScopedVariable = 1, diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 47e5a0147fd00..5de32e61bdcc6 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -3272,15 +3272,17 @@ declare module "typescript" { interface EmitResolver { >EmitResolver : EmitResolver - getGeneratedNameForNode(node: Node): string; ->getGeneratedNameForNode : (node: Node) => string ->node : Node ->Node : Node + hasGlobalName(name: string): boolean; +>hasGlobalName : (name: string) => boolean +>name : string - getExpressionNameSubstitution(node: Identifier): string; ->getExpressionNameSubstitution : (node: Identifier) => string + getExpressionNameSubstitution(node: Identifier, getGeneratedNameForNode: (node: Node) => string): string; +>getExpressionNameSubstitution : (node: Identifier, getGeneratedNameForNode: (node: Node) => string) => string >node : Identifier >Identifier : Identifier +>getGeneratedNameForNode : (node: Node) => string +>node : Node +>Node : Node hasExportDefaultValue(node: SourceFile): boolean; >hasExportDefaultValue : (node: SourceFile) => boolean @@ -3388,6 +3390,11 @@ declare module "typescript" { >getBlockScopedVariableId : (node: Identifier) => number >node : Identifier >Identifier : Identifier + + getNodeId(node: Node): number; +>getNodeId : (node: Node) => number +>node : Node +>Node : Node } const enum SymbolFlags { >SymbolFlags : SymbolFlags diff --git a/tests/baselines/reference/ES3For-ofTypeCheck4.js b/tests/baselines/reference/ES3For-ofTypeCheck4.js index 7386a1967eb98..8a125cecd2234 100644 --- a/tests/baselines/reference/ES3For-ofTypeCheck4.js +++ b/tests/baselines/reference/ES3For-ofTypeCheck4.js @@ -5,5 +5,5 @@ for (const v of union) { } //// [ES3For-ofTypeCheck4.js] var union; for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; + var _v = union[_i]; } diff --git a/tests/baselines/reference/ES5For-of13.js b/tests/baselines/reference/ES5For-of13.js index ba9c24eebfead..5d2889916731b 100644 --- a/tests/baselines/reference/ES5For-of13.js +++ b/tests/baselines/reference/ES5For-of13.js @@ -9,7 +9,7 @@ for (var _i = 0, _a = [ 'b', 'c' ]; _i < _a.length; _i++) { - var v = _a[_i]; - var x = v; + var _v = _a[_i]; + var x = _v; } //# sourceMappingURL=ES5For-of13.js.map \ No newline at end of file diff --git a/tests/baselines/reference/ES5For-of13.js.map b/tests/baselines/reference/ES5For-of13.js.map index 3027624c54d8b..96eb60e22b0f8 100644 --- a/tests/baselines/reference/ES5For-of13.js.map +++ b/tests/baselines/reference/ES5For-of13.js.map @@ -1,2 +1,2 @@ //// [ES5For-of13.js.map] -{"version":3,"file":"ES5For-of13.js","sourceRoot":"","sources":["ES5For-of13.ts"],"names":[],"mappings":"AAAA,GAAG,CAAC,CAAU,UAAe,EAAf;IAAC,GAAG;IAAE,GAAG;IAAE,GAAG;CAAC,EAAxB,cAAK,EAAL,IAAwB,CAAC;IAAzB,IAAI,CAAC,SAAA;IACN,IAAI,CAAC,GAAG,CAAC,CAAC;CACb"} \ No newline at end of file +{"version":3,"file":"ES5For-of13.js","sourceRoot":"","sources":["ES5For-of13.ts"],"names":[],"mappings":"AAAA,GAAG,CAAC,CAAU,UAAe,EAAf;IAAC,GAAG;IAAE,GAAG;IAAE,GAAG;CAAC,EAAxB,cAAK,EAAL,IAAwB,CAAC;IAAzB,IAAI,EAAC,SAAA;IACN,IAAI,CAAC,GAAG,EAAC,CAAC;CACb"} \ No newline at end of file diff --git a/tests/baselines/reference/ES5For-of13.sourcemap.txt b/tests/baselines/reference/ES5For-of13.sourcemap.txt index d2c3b6847e621..0a7803a9dc39a 100644 --- a/tests/baselines/reference/ES5For-of13.sourcemap.txt +++ b/tests/baselines/reference/ES5For-of13.sourcemap.txt @@ -75,40 +75,40 @@ sourceFile:ES5For-of13.ts 5 >Emitted(5, 24) Source(1, 30) + SourceIndex(0) 6 >Emitted(5, 25) Source(1, 31) + SourceIndex(0) --- ->>> var v = _a[_i]; +>>> var _v = _a[_i]; 1 >^^^^ 2 > ^^^^ -3 > ^ -4 > ^^^^^^^^^ +3 > ^^ +4 > ^^^^^^^^^ 1 > 2 > let 3 > v -4 > +4 > 1 >Emitted(6, 5) Source(1, 6) + SourceIndex(0) 2 >Emitted(6, 9) Source(1, 10) + SourceIndex(0) -3 >Emitted(6, 10) Source(1, 11) + SourceIndex(0) -4 >Emitted(6, 19) Source(1, 11) + SourceIndex(0) +3 >Emitted(6, 11) Source(1, 11) + SourceIndex(0) +4 >Emitted(6, 20) Source(1, 11) + SourceIndex(0) --- ->>> var x = v; +>>> var x = _v; 1 >^^^^ 2 > ^^^^ 3 > ^ 4 > ^^^ -5 > ^ -6 > ^ +5 > ^^ +6 > ^ 1 > of ['a', 'b', 'c']) { > 2 > var 3 > x 4 > = 5 > v -6 > ; +6 > ; 1 >Emitted(7, 5) Source(2, 5) + SourceIndex(0) 2 >Emitted(7, 9) Source(2, 9) + SourceIndex(0) 3 >Emitted(7, 10) Source(2, 10) + SourceIndex(0) 4 >Emitted(7, 13) Source(2, 13) + SourceIndex(0) -5 >Emitted(7, 14) Source(2, 14) + SourceIndex(0) -6 >Emitted(7, 15) Source(2, 15) + SourceIndex(0) +5 >Emitted(7, 15) Source(2, 14) + SourceIndex(0) +6 >Emitted(7, 16) Source(2, 15) + SourceIndex(0) --- >>>} 1 >^ diff --git a/tests/baselines/reference/ES5For-of14.js b/tests/baselines/reference/ES5For-of14.js index 1011bc3558c93..c1706d80b7a0f 100644 --- a/tests/baselines/reference/ES5For-of14.js +++ b/tests/baselines/reference/ES5For-of14.js @@ -5,6 +5,6 @@ for (const v of []) { //// [ES5For-of14.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { - var v = _a[_i]; - var x = v; + var _v = _a[_i]; + var x = _v; } diff --git a/tests/baselines/reference/ES5For-of15.js b/tests/baselines/reference/ES5For-of15.js index 46d3dbd1d6e3e..0f56cc015f5f1 100644 --- a/tests/baselines/reference/ES5For-of15.js +++ b/tests/baselines/reference/ES5For-of15.js @@ -8,10 +8,10 @@ for (let v of []) { //// [ES5For-of15.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { - var v = _a[_i]; - v; + var _v = _a[_i]; + _v; for (var _b = 0, _c = []; _b < _c.length; _b++) { - var _v = _c[_b]; - var x = _v; + var _v_1 = _c[_b]; + var x = _v_1; } } diff --git a/tests/baselines/reference/ES5For-of16.js b/tests/baselines/reference/ES5For-of16.js index 1649e4481f27d..0699bade0ce7e 100644 --- a/tests/baselines/reference/ES5For-of16.js +++ b/tests/baselines/reference/ES5For-of16.js @@ -9,11 +9,11 @@ for (let v of []) { //// [ES5For-of16.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { - var v = _a[_i]; - v; + var _v = _a[_i]; + _v; for (var _b = 0, _c = []; _b < _c.length; _b++) { - var _v = _c[_b]; - var x = _v; - _v++; + var _v_1 = _c[_b]; + var x = _v_1; + _v_1++; } } diff --git a/tests/baselines/reference/ES5For-of17.js b/tests/baselines/reference/ES5For-of17.js index b728074ae939d..d08ba263c762a 100644 --- a/tests/baselines/reference/ES5For-of17.js +++ b/tests/baselines/reference/ES5For-of17.js @@ -9,13 +9,13 @@ for (let v of []) { //// [ES5For-of17.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { - var v = _a[_i]; - v; + var _v = _a[_i]; + _v; for (var _b = 0, _c = [ v ]; _b < _c.length; _b++) { - var _v = _c[_b]; - var x = _v; - _v++; + var _v_1 = _c[_b]; + var x = _v_1; + _v_1++; } } diff --git a/tests/baselines/reference/ES5For-of18.js b/tests/baselines/reference/ES5For-of18.js index a135b8b04639e..45378e8125fb8 100644 --- a/tests/baselines/reference/ES5For-of18.js +++ b/tests/baselines/reference/ES5For-of18.js @@ -9,10 +9,10 @@ for (let v of []) { //// [ES5For-of18.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { - var v = _a[_i]; - v; + var _v = _a[_i]; + _v; } for (var _b = 0, _c = []; _b < _c.length; _b++) { - var _v = _c[_b]; - _v; + var _v_1 = _c[_b]; + _v_1; } diff --git a/tests/baselines/reference/ES5For-of19.js b/tests/baselines/reference/ES5For-of19.js index 7af9418f04f69..eaaf8b295ae41 100644 --- a/tests/baselines/reference/ES5For-of19.js +++ b/tests/baselines/reference/ES5For-of19.js @@ -11,12 +11,12 @@ for (let v of []) { //// [ES5For-of19.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { - var v = _a[_i]; - v; + var _v = _a[_i]; + _v; function foo() { - for (var _b = 0, _c = []; _b < _c.length; _b++) { - var _v = _c[_b]; - _v; + for (var _i = 0, _a = []; _i < _a.length; _i++) { + var _v_1 = _a[_i]; + _v_1; } } } diff --git a/tests/baselines/reference/ES5For-of20.js b/tests/baselines/reference/ES5For-of20.js index 3dd707805d8bc..168094a6197fa 100644 --- a/tests/baselines/reference/ES5For-of20.js +++ b/tests/baselines/reference/ES5For-of20.js @@ -8,12 +8,12 @@ for (let v of []) { //// [ES5For-of20.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { - var v = _a[_i]; - var _v; + var _v = _a[_i]; + var _v_1; for (var _b = 0, _c = [ v ]; _b < _c.length; _b++) { - var _v_1 = _c[_b]; - var _v_2; + var _v_2 = _c[_b]; + var _v_3; } } diff --git a/tests/baselines/reference/ES5For-of21.js b/tests/baselines/reference/ES5For-of21.js index 9356514ea6be5..ea12191623845 100644 --- a/tests/baselines/reference/ES5For-of21.js +++ b/tests/baselines/reference/ES5For-of21.js @@ -5,7 +5,7 @@ for (let v of []) { //// [ES5For-of21.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { - var v = _a[_i]; + var _v = _a[_i]; for (var _b = 0, _c = []; _b < _c.length; _b++) { var _i_1 = _c[_b]; } diff --git a/tests/baselines/reference/ES5For-of28.js b/tests/baselines/reference/ES5For-of28.js index f1fa44a84533c..14ee6956ce44b 100644 --- a/tests/baselines/reference/ES5For-of28.js +++ b/tests/baselines/reference/ES5For-of28.js @@ -9,7 +9,7 @@ for (var _i = 0, _a = [ 2, 3 ]; _i < _a.length; _i++) { - var _b = _a[_i], _c = _b[0], a = _c === void 0 ? 0 : _c, _d = _b[1], b = _d === void 0 ? 1 : _d; - a; - b; + var _b = _a[_i], _c = _b[0], _a_1 = _c === void 0 ? 0 : _c, _d = _b[1], _b_1 = _d === void 0 ? 1 : _d; + _a_1; + _b_1; } diff --git a/tests/baselines/reference/ES5For-of29.js b/tests/baselines/reference/ES5For-of29.js index 11f847262e988..276fc6e4a11e6 100644 --- a/tests/baselines/reference/ES5For-of29.js +++ b/tests/baselines/reference/ES5For-of29.js @@ -9,7 +9,7 @@ for (var _i = 0, _a = [ 2, 3 ]; _i < _a.length; _i++) { - var _b = _a[_i], _c = _b.x, a = _c === void 0 ? 0 : _c, _d = _b.y, b = _d === void 0 ? 1 : _d; - a; - b; + var _b = _a[_i], _c = _b.x, _a_1 = _c === void 0 ? 0 : _c, _d = _b.y, _b_1 = _d === void 0 ? 1 : _d; + _a_1; + _b_1; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck12.js b/tests/baselines/reference/ES5For-ofTypeCheck12.js index 6004990f6dc12..7191add21d3e8 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck12.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck12.js @@ -3,5 +3,5 @@ for (const v of 0) { } //// [ES5For-ofTypeCheck12.js] for (var _i = 0, _a = 0; _i < _a.length; _i++) { - var v = _a[_i]; + var _v = _a[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck4.js b/tests/baselines/reference/ES5For-ofTypeCheck4.js index 630bc869c5822..c066421a70577 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck4.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck4.js @@ -5,5 +5,5 @@ for (const v of union) { } //// [ES5For-ofTypeCheck4.js] var union; for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; + var _v = union[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck9.js b/tests/baselines/reference/ES5For-ofTypeCheck9.js index 6c7465d10ec62..c4289425a41a6 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck9.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck9.js @@ -5,5 +5,5 @@ for (let v of union) { } //// [ES5For-ofTypeCheck9.js] var union; for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; + var _v = union[_i]; } diff --git a/tests/baselines/reference/b.errors.txt b/tests/baselines/reference/b.errors.txt new file mode 100644 index 0000000000000..0fada20aa74b5 --- /dev/null +++ b/tests/baselines/reference/b.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/b.ts(2,1): error TS1148: Cannot compile external modules unless the '--module' flag is provided. + + +==== tests/cases/compiler/b.ts (1 errors) ==== + class D { } + export = D; + ~~~~~~~~~~~ +!!! error TS1148: Cannot compile external modules unless the '--module' flag is provided. + \ No newline at end of file diff --git a/tests/baselines/reference/b.js b/tests/baselines/reference/b.js new file mode 100644 index 0000000000000..7c73776ea62c1 --- /dev/null +++ b/tests/baselines/reference/b.js @@ -0,0 +1,12 @@ +//// [b.ts] +class D { } +export = D; + + +//// [b.js] +var D = (function () { + function D() { + } + return D; +})(); +module.exports = D; diff --git a/tests/baselines/reference/declarationEmitDestructuringObjectLiteralPattern.js b/tests/baselines/reference/declarationEmitDestructuringObjectLiteralPattern.js index de3045be1ccc5..9b48f418f5ad5 100644 --- a/tests/baselines/reference/declarationEmitDestructuringObjectLiteralPattern.js +++ b/tests/baselines/reference/declarationEmitDestructuringObjectLiteralPattern.js @@ -73,8 +73,8 @@ function f15() { var _f = f15(), a4 = _f.a4, b4 = _f.b4, c4 = _f.c4; var m; (function (m) { - _g = f15(), m.a4 = _g.a4, m.b4 = _g.b4, m.c4 = _g.c4; - var _g; + _a = f15(), m.a4 = _a.a4, m.b4 = _a.b4, m.c4 = _a.c4; + var _a; })(m || (m = {})); diff --git a/tests/baselines/reference/declarationEmitDestructuringObjectLiteralPattern2.js b/tests/baselines/reference/declarationEmitDestructuringObjectLiteralPattern2.js index 509edfa6c87f1..140fc03780a05 100644 --- a/tests/baselines/reference/declarationEmitDestructuringObjectLiteralPattern2.js +++ b/tests/baselines/reference/declarationEmitDestructuringObjectLiteralPattern2.js @@ -37,8 +37,8 @@ function f15() { var _c = f15(), a4 = _c.a4, b4 = _c.b4, c4 = _c.c4; var m; (function (m) { - _d = f15(), m.a4 = _d.a4, m.b4 = _d.b4, m.c4 = _d.c4; - var _d; + _a = f15(), m.a4 = _a.a4, m.b4 = _a.b4, m.c4 = _a.c4; + var _a; })(m || (m = {})); diff --git a/tests/baselines/reference/downlevelLetConst14.js b/tests/baselines/reference/downlevelLetConst14.js index ffe667eda3f4c..1da40c1d3f679 100644 --- a/tests/baselines/reference/downlevelLetConst14.js +++ b/tests/baselines/reference/downlevelLetConst14.js @@ -106,18 +106,18 @@ use(z6); var z = false; var z5 = 1; { - var _z = ""; - var _z5 = ([ + var _z_1 = ""; + var _z5_1 = ([ 5 ])[0]; { - var _z_1 = 1; - var _z5_1 = ({ + var _z_2 = 1; + var _z5_2 = ({ a: 1 }).a; // try to step on generated name - use(_z_1); + use(_z_2); } - use(_z); + use(_z_1); } use(y); diff --git a/tests/baselines/reference/downlevelLetConst15.js b/tests/baselines/reference/downlevelLetConst15.js index 94fcb1b03a008..373f2e746f8c6 100644 --- a/tests/baselines/reference/downlevelLetConst15.js +++ b/tests/baselines/reference/downlevelLetConst15.js @@ -110,18 +110,18 @@ use(z6); var z = false; var z5 = 1; { - var _z = ""; - var _z5 = ([ + var _z_1 = ""; + var _z5_1 = ([ 5 ])[0]; { - var _z_1 = 1; - var _z5_1 = ({ + var _z_2 = 1; + var _z5_2 = ({ a: 1 }).a; // try to step on generated name - use(_z_1); + use(_z_2); } - use(_z); + use(_z_1); } use(y); diff --git a/tests/baselines/reference/downlevelLetConst16.js b/tests/baselines/reference/downlevelLetConst16.js index f83e745c55403..658cc0b0868da 100644 --- a/tests/baselines/reference/downlevelLetConst16.js +++ b/tests/baselines/reference/downlevelLetConst16.js @@ -249,16 +249,16 @@ function foo1() { } function foo2() { { - var _x = 1; - use(_x); - var _y = ([ + var _x_1 = 1; + use(_x_1); + var _y_1 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_1); + var _z_1 = ({ a: 1 }).a; - use(_z); + use(_z_1); } use(x); } @@ -266,29 +266,29 @@ var A = (function () { function A() { } A.prototype.m1 = function () { - var _x = 1; - use(_x); - var _y = ([ + var _x_2 = 1; + use(_x_2); + var _y_2 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_2); + var _z_2 = ({ a: 1 }).a; - use(_z); + use(_z_2); }; A.prototype.m2 = function () { { - var _x = 1; - use(_x); - var _y = ([ + var _x_3 = 1; + use(_x_3); + var _y_3 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_3); + var _z_3 = ({ a: 1 }).a; - use(_z); + use(_z_3); } use(x); }; @@ -298,200 +298,200 @@ var B = (function () { function B() { } B.prototype.m1 = function () { - var _x = 1; - use(_x); - var _y = ([ + var _x_4 = 1; + use(_x_4); + var _y_4 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_4); + var _z_4 = ({ a: 1 }).a; - use(_z); + use(_z_4); }; B.prototype.m2 = function () { { - var _x = 1; - use(_x); - var _y = ([ + var _x_5 = 1; + use(_x_5); + var _y_5 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_5); + var _z_5 = ({ a: 1 }).a; - use(_z); + use(_z_5); } use(x); }; return B; })(); function bar1() { - var _x = 1; - use(_x); - var _y = ([ + var _x_6 = 1; + use(_x_6); + var _y_6 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_6); + var _z_6 = ({ a: 1 }).a; - use(_z); + use(_z_6); } function bar2() { { - var _x = 1; - use(_x); - var _y = ([ + var _x_7 = 1; + use(_x_7); + var _y_7 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_7); + var _z_7 = ({ a: 1 }).a; - use(_z); + use(_z_7); } use(x); } var M1; (function (M1) { - var _x = 1; - use(_x); - var _y = ([ + var _x_8 = 1; + use(_x_8); + var _y_8 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_8); + var _z_8 = ({ a: 1 }).a; - use(_z); + use(_z_8); })(M1 || (M1 = {})); var M2; (function (M2) { { - var _x = 1; - use(_x); - var _y = ([ + var _x_9 = 1; + use(_x_9); + var _y_9 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_9); + var _z_9 = ({ a: 1 }).a; - use(_z); + use(_z_9); } use(x); })(M2 || (M2 = {})); var M3; (function (M3) { - var _x = 1; - use(_x); - var _y = ([ + var _x_10 = 1; + use(_x_10); + var _y_10 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_10); + var _z_10 = ({ a: 1 }).a; - use(_z); + use(_z_10); })(M3 || (M3 = {})); var M4; (function (M4) { { - var _x = 1; - use(_x); - var _y = ([ + var _x_11 = 1; + use(_x_11); + var _y_11 = ([ 1 ])[0]; - use(_y); - var _z = ({ + use(_y_11); + var _z_11 = ({ a: 1 }).a; - use(_z); + use(_z_11); } use(x); use(y); use(z); })(M4 || (M4 = {})); function foo3() { - for (var _x = void 0;;) { - use(_x); + for (var _x_12 = void 0;;) { + use(_x_12); } - for (var _y = ([])[0];;) { - use(_y); + for (var _y_12 = ([])[0];;) { + use(_y_12); } - for (var _z = ({ + for (var _z_12 = ({ a: 1 }).a;;) { - use(_z); + use(_z_12); } use(x); } function foo4() { - for (var _x = 1;;) { - use(_x); + for (var _x_13 = 1;;) { + use(_x_13); } - for (var _y = ([])[0];;) { - use(_y); + for (var _y_13 = ([])[0];;) { + use(_y_13); } - for (var _z = ({ + for (var _z_13 = ({ a: 1 }).a;;) { - use(_z); + use(_z_13); } use(x); } function foo5() { - for (var _x in []) { - use(_x); + for (var _x_14 in []) { + use(_x_14); } use(x); } function foo6() { - for (var _x in []) { - use(_x); + for (var _x_15 in []) { + use(_x_15); } use(x); } function foo7() { for (var _i = 0, _a = []; _i < _a.length; _i++) { - var _x = _a[_i]; - use(_x); + var _x_16 = _a[_i]; + use(_x_16); } use(x); } function foo8() { for (var _i = 0, _a = []; _i < _a.length; _i++) { - var _x = _a[_i][0]; - use(_x); + var _x_17 = _a[_i][0]; + use(_x_17); } use(x); } function foo9() { for (var _i = 0, _a = []; _i < _a.length; _i++) { - var _x = _a[_i].a; - use(_x); + var _x_18 = _a[_i].a; + use(_x_18); } use(x); } function foo10() { for (var _i = 0, _a = []; _i < _a.length; _i++) { - var _x = _a[_i]; - use(_x); + var _x_19 = _a[_i]; + use(_x_19); } use(x); } function foo11() { for (var _i = 0, _a = []; _i < _a.length; _i++) { - var _x = _a[_i][0]; - use(_x); + var _x_20 = _a[_i][0]; + use(_x_20); } use(x); } function foo12() { for (var _i = 0, _a = []; _i < _a.length; _i++) { - var _x = _a[_i].a; - use(_x); + var _x_21 = _a[_i].a; + use(_x_21); } use(x); } diff --git a/tests/baselines/reference/downlevelLetConst18.js b/tests/baselines/reference/downlevelLetConst18.js index 0c025573e209b..c8ed13e3196a3 100644 --- a/tests/baselines/reference/downlevelLetConst18.js +++ b/tests/baselines/reference/downlevelLetConst18.js @@ -32,46 +32,46 @@ for (let x; ;) { //// [downlevelLetConst18.js] 'use strict'; -for (var x = void 0;;) { +for (var _x = void 0;;) { function foo() { - x; + _x; } ; } -for (var _x = void 0;;) { +for (var _x_1 = void 0;;) { function foo() { - _x; + _x_1; } ; } -for (var _x_1 = void 0;;) { +for (var _x_2 = void 0;;) { (function () { - _x_1; + _x_2; })(); } -for (var _x_2 = 1;;) { +for (var _x_3 = 1;;) { (function () { - _x_2; + _x_3; })(); } -for (var _x_3 = void 0;;) { +for (var _x_4 = void 0;;) { ({ foo: function () { - _x_3; + _x_4; } }); } -for (var _x_4 = void 0;;) { +for (var _x_5 = void 0;;) { ({ get foo() { - return _x_4; + return _x_5; } }); } -for (var _x_5 = void 0;;) { +for (var _x_6 = void 0;;) { ({ set foo(v) { - _x_5; + _x_6; } }); } diff --git a/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportDts.js b/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportDts.js index 6c85e281150de..8891bbf65153c 100644 --- a/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportDts.js +++ b/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportDts.js @@ -62,17 +62,17 @@ var x11 = (function () { })(); exports.x11 = x11; //// [client.js] +var _server = require("server"); +exports.x1 = new _server.a(); var _server_1 = require("server"); -exports.x1 = new _server_1.a(); +exports.x2 = new _server_1.a11(); var _server_2 = require("server"); -exports.x2 = new _server_2.a11(); +exports.x4 = new _server_2.x(); +exports.x5 = new _server_2.a12(); var _server_3 = require("server"); -exports.x4 = new _server_3.x(); -exports.x5 = new _server_3.a12(); +exports.x3 = new _server_3.x11(); var _server_4 = require("server"); -exports.x3 = new _server_4.x11(); -var _server_5 = require("server"); -exports.x6 = new _server_5.m(); +exports.x6 = new _server_4.m(); //// [server.d.ts] diff --git a/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportInEs5.js b/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportInEs5.js index 1c63005bb0680..cd45cfc75a604 100644 --- a/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportInEs5.js +++ b/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportInEs5.js @@ -26,17 +26,17 @@ exports.a = 10; exports.x = exports.a; exports.m = exports.a; //// [es6ImportDefaultBindingFollowedWithNamedImportInEs5_1.js] +var _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0 = require("es6ImportDefaultBindingFollowedWithNamedImportInEs5_0"); +var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0.a; var _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_1 = require("es6ImportDefaultBindingFollowedWithNamedImportInEs5_0"); var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_1.a; var _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_2 = require("es6ImportDefaultBindingFollowedWithNamedImportInEs5_0"); +var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_2.x; var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_2.a; var _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_3 = require("es6ImportDefaultBindingFollowedWithNamedImportInEs5_0"); var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_3.x; -var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_3.a; var _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_4 = require("es6ImportDefaultBindingFollowedWithNamedImportInEs5_0"); -var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_4.x; -var _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_5 = require("es6ImportDefaultBindingFollowedWithNamedImportInEs5_0"); -var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_5.m; +var x1 = _es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_4.m; //// [es6ImportDefaultBindingFollowedWithNamedImportInEs5_0.d.ts] diff --git a/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportWithExport.js b/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportWithExport.js index 5497a82b04151..5b22f0be58033 100644 --- a/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportWithExport.js +++ b/tests/baselines/reference/es6ImportDefaultBindingFollowedWithNamedImportWithExport.js @@ -28,13 +28,13 @@ define(["require", "exports"], function (require, exports) { exports.m = exports.a; }); //// [client.js] -define(["require", "exports", "server", "server", "server", "server", "server"], function (require, exports, _server_1, _server_2, _server_3, _server_4, _server_5) { +define(["require", "exports", "server", "server", "server", "server", "server"], function (require, exports, _server, _server_1, _server_2, _server_3, _server_4) { + exports.x1 = _server.a; exports.x1 = _server_1.a; + exports.x1 = _server_2.x; exports.x1 = _server_2.a; exports.x1 = _server_3.x; - exports.x1 = _server_3.a; - exports.x1 = _server_4.x; - exports.x1 = _server_5.m; + exports.x1 = _server_4.m; }); diff --git a/tests/baselines/reference/es6ImportNamedImportAmd.js b/tests/baselines/reference/es6ImportNamedImportAmd.js index 5e3ddc433083a..737d014ce4480 100644 --- a/tests/baselines/reference/es6ImportNamedImportAmd.js +++ b/tests/baselines/reference/es6ImportNamedImportAmd.js @@ -53,19 +53,19 @@ define(["require", "exports"], function (require, exports) { exports.aaaa = 10; }); //// [es6ImportNamedImportAmd_1.js] -define(["require", "exports", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0"], function (require, exports, _es6ImportNamedImportAmd_0_1, _es6ImportNamedImportAmd_0_2, _es6ImportNamedImportAmd_0_3, _es6ImportNamedImportAmd_0_4, _es6ImportNamedImportAmd_0_5, _es6ImportNamedImportAmd_0_6, _es6ImportNamedImportAmd_0_7, _es6ImportNamedImportAmd_0_8, _es6ImportNamedImportAmd_0_9) { +define(["require", "exports", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0", "es6ImportNamedImportAmd_0"], function (require, exports, _es6ImportNamedImportAmd_0, _es6ImportNamedImportAmd_0_1, _es6ImportNamedImportAmd_0_2, _es6ImportNamedImportAmd_0_3, _es6ImportNamedImportAmd_0_4, _es6ImportNamedImportAmd_0_5, _es6ImportNamedImportAmd_0_6, _es6ImportNamedImportAmd_0_7, _es6ImportNamedImportAmd_0_8) { + var xxxx = _es6ImportNamedImportAmd_0.a; var xxxx = _es6ImportNamedImportAmd_0_1.a; + var xxxx = _es6ImportNamedImportAmd_0_2.x; var xxxx = _es6ImportNamedImportAmd_0_2.a; var xxxx = _es6ImportNamedImportAmd_0_3.x; - var xxxx = _es6ImportNamedImportAmd_0_3.a; - var xxxx = _es6ImportNamedImportAmd_0_4.x; - var xxxx = _es6ImportNamedImportAmd_0_5.m; + var xxxx = _es6ImportNamedImportAmd_0_4.m; + var xxxx = _es6ImportNamedImportAmd_0_5.a1; + var xxxx = _es6ImportNamedImportAmd_0_5.x1; var xxxx = _es6ImportNamedImportAmd_0_6.a1; var xxxx = _es6ImportNamedImportAmd_0_6.x1; - var xxxx = _es6ImportNamedImportAmd_0_7.a1; - var xxxx = _es6ImportNamedImportAmd_0_7.x1; - var z111 = _es6ImportNamedImportAmd_0_8.z1; - var z2 = _es6ImportNamedImportAmd_0_9.z2; // z2 shouldn't give redeclare error + var z111 = _es6ImportNamedImportAmd_0_7.z1; + var z2 = _es6ImportNamedImportAmd_0_8.z2; // z2 shouldn't give redeclare error }); diff --git a/tests/baselines/reference/es6ImportNamedImportDts.js b/tests/baselines/reference/es6ImportNamedImportDts.js index 877ae6fab74f3..e5cff73b69147 100644 --- a/tests/baselines/reference/es6ImportNamedImportDts.js +++ b/tests/baselines/reference/es6ImportNamedImportDts.js @@ -132,27 +132,27 @@ var aaaa1 = (function () { })(); exports.aaaa1 = aaaa1; //// [client.js] +var _server = require("server"); +exports.xxxx = new _server.a(); var _server_1 = require("server"); -exports.xxxx = new _server_1.a(); +exports.xxxx1 = new _server_1.a11(); var _server_2 = require("server"); -exports.xxxx1 = new _server_2.a11(); +exports.xxxx2 = new _server_2.x(); +exports.xxxx3 = new _server_2.a12(); var _server_3 = require("server"); -exports.xxxx2 = new _server_3.x(); -exports.xxxx3 = new _server_3.a12(); +exports.xxxx4 = new _server_3.x11(); var _server_4 = require("server"); -exports.xxxx4 = new _server_4.x11(); +exports.xxxx5 = new _server_4.m(); var _server_5 = require("server"); -exports.xxxx5 = new _server_5.m(); +exports.xxxx6 = new _server_5.a1(); +exports.xxxx7 = new _server_5.x1(); var _server_6 = require("server"); -exports.xxxx6 = new _server_6.a1(); -exports.xxxx7 = new _server_6.x1(); +exports.xxxx8 = new _server_6.a111(); +exports.xxxx9 = new _server_6.x111(); var _server_7 = require("server"); -exports.xxxx8 = new _server_7.a111(); -exports.xxxx9 = new _server_7.x111(); +exports.z111 = new _server_7.z1(); var _server_8 = require("server"); -exports.z111 = new _server_8.z1(); -var _server_9 = require("server"); -exports.z2 = new _server_9.z2(); // z2 shouldn't give redeclare error +exports.z2 = new _server_8.z2(); // z2 shouldn't give redeclare error //// [server.d.ts] diff --git a/tests/baselines/reference/es6ImportNamedImportInEs5.js b/tests/baselines/reference/es6ImportNamedImportInEs5.js index fcb88d55b333a..2acf967ef30ce 100644 --- a/tests/baselines/reference/es6ImportNamedImportInEs5.js +++ b/tests/baselines/reference/es6ImportNamedImportInEs5.js @@ -51,27 +51,27 @@ exports.z1 = 10; exports.z2 = 10; exports.aaaa = 10; //// [es6ImportNamedImportInEs5_1.js] +var _es6ImportNamedImportInEs5_0 = require("es6ImportNamedImportInEs5_0"); +var xxxx = _es6ImportNamedImportInEs5_0.a; var _es6ImportNamedImportInEs5_0_1 = require("es6ImportNamedImportInEs5_0"); var xxxx = _es6ImportNamedImportInEs5_0_1.a; var _es6ImportNamedImportInEs5_0_2 = require("es6ImportNamedImportInEs5_0"); +var xxxx = _es6ImportNamedImportInEs5_0_2.x; var xxxx = _es6ImportNamedImportInEs5_0_2.a; var _es6ImportNamedImportInEs5_0_3 = require("es6ImportNamedImportInEs5_0"); var xxxx = _es6ImportNamedImportInEs5_0_3.x; -var xxxx = _es6ImportNamedImportInEs5_0_3.a; var _es6ImportNamedImportInEs5_0_4 = require("es6ImportNamedImportInEs5_0"); -var xxxx = _es6ImportNamedImportInEs5_0_4.x; +var xxxx = _es6ImportNamedImportInEs5_0_4.m; var _es6ImportNamedImportInEs5_0_5 = require("es6ImportNamedImportInEs5_0"); -var xxxx = _es6ImportNamedImportInEs5_0_5.m; +var xxxx = _es6ImportNamedImportInEs5_0_5.a1; +var xxxx = _es6ImportNamedImportInEs5_0_5.x1; var _es6ImportNamedImportInEs5_0_6 = require("es6ImportNamedImportInEs5_0"); var xxxx = _es6ImportNamedImportInEs5_0_6.a1; var xxxx = _es6ImportNamedImportInEs5_0_6.x1; var _es6ImportNamedImportInEs5_0_7 = require("es6ImportNamedImportInEs5_0"); -var xxxx = _es6ImportNamedImportInEs5_0_7.a1; -var xxxx = _es6ImportNamedImportInEs5_0_7.x1; +var z111 = _es6ImportNamedImportInEs5_0_7.z1; var _es6ImportNamedImportInEs5_0_8 = require("es6ImportNamedImportInEs5_0"); -var z111 = _es6ImportNamedImportInEs5_0_8.z1; -var _es6ImportNamedImportInEs5_0_9 = require("es6ImportNamedImportInEs5_0"); -var z2 = _es6ImportNamedImportInEs5_0_9.z2; // z2 shouldn't give redeclare error +var z2 = _es6ImportNamedImportInEs5_0_8.z2; // z2 shouldn't give redeclare error //// [es6ImportNamedImportInEs5_0.d.ts] diff --git a/tests/baselines/reference/es6ImportNamedImportWithExport.js b/tests/baselines/reference/es6ImportNamedImportWithExport.js index 71f4af721788c..5ac3a33cb9979 100644 --- a/tests/baselines/reference/es6ImportNamedImportWithExport.js +++ b/tests/baselines/reference/es6ImportNamedImportWithExport.js @@ -50,27 +50,27 @@ exports.z1 = 10; exports.z2 = 10; exports.aaaa = 10; //// [client.js] +var _server = require("server"); +exports.xxxx = _server.a; var _server_1 = require("server"); exports.xxxx = _server_1.a; var _server_2 = require("server"); +exports.xxxx = _server_2.x; exports.xxxx = _server_2.a; var _server_3 = require("server"); exports.xxxx = _server_3.x; -exports.xxxx = _server_3.a; var _server_4 = require("server"); -exports.xxxx = _server_4.x; +exports.xxxx = _server_4.m; var _server_5 = require("server"); -exports.xxxx = _server_5.m; +exports.xxxx = _server_5.a1; +exports.xxxx = _server_5.x1; var _server_6 = require("server"); exports.xxxx = _server_6.a1; exports.xxxx = _server_6.x1; var _server_7 = require("server"); -exports.xxxx = _server_7.a1; -exports.xxxx = _server_7.x1; +exports.z111 = _server_7.z1; var _server_8 = require("server"); -exports.z111 = _server_8.z1; -var _server_9 = require("server"); -exports.z2 = _server_9.z2; // z2 shouldn't give redeclare error +exports.z2 = _server_8.z2; // z2 shouldn't give redeclare error //// [server.d.ts] diff --git a/tests/baselines/reference/letCollidingNameInNestedScope.js b/tests/baselines/reference/letCollidingNameInNestedScope.js new file mode 100644 index 0000000000000..b56b2fef4c3e2 --- /dev/null +++ b/tests/baselines/reference/letCollidingNameInNestedScope.js @@ -0,0 +1,36 @@ +//// [letCollidingNameInNestedScope.ts] +declare function foo(a: any); +var x = 1; +{ + let x = true; + foo(x); + function bar() { + var _x = 1; + foo(_x); + foo(x); + { + let x = 1; + foo(x); + } + foo(_x); + } + foo(x); +} + +//// [letCollidingNameInNestedScope.js] +var x = 1; +{ + var _x_1 = true; + foo(_x_1); + function bar() { + var _x = 1; + foo(_x); + foo(_x_1); + { + var _x_2 = 1; + foo(_x_2); + } + foo(_x); + } + foo(_x_1); +} diff --git a/tests/baselines/reference/letCollidingNameInNestedScope.types b/tests/baselines/reference/letCollidingNameInNestedScope.types new file mode 100644 index 0000000000000..cb98106bf8726 --- /dev/null +++ b/tests/baselines/reference/letCollidingNameInNestedScope.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/letCollidingNameInNestedScope.ts === +declare function foo(a: any); +>foo : (a: any) => any +>a : any + +var x = 1; +>x : number +{ + let x = true; +>x : boolean + + foo(x); +>foo(x) : any +>foo : (a: any) => any +>x : boolean + + function bar() { +>bar : () => void + + var _x = 1; +>_x : number + + foo(_x); +>foo(_x) : any +>foo : (a: any) => any +>_x : number + + foo(x); +>foo(x) : any +>foo : (a: any) => any +>x : boolean + { + let x = 1; +>x : number + + foo(x); +>foo(x) : any +>foo : (a: any) => any +>x : number + } + foo(_x); +>foo(_x) : any +>foo : (a: any) => any +>_x : number + } + foo(x); +>foo(x) : any +>foo : (a: any) => any +>x : boolean +} diff --git a/tests/baselines/reference/letDeclarations-es5.js b/tests/baselines/reference/letDeclarations-es5.js index 5246e91edfb76..9bb674071ab94 100644 --- a/tests/baselines/reference/letDeclarations-es5.js +++ b/tests/baselines/reference/letDeclarations-es5.js @@ -22,5 +22,5 @@ var l8 = 23; var l9 = 0, l10 = "", l11 = null; for (var _l11 in {}) { } -for (var l12 = 0; l12 < 9; l12++) { +for (var _l12 = 0; _l12 < 9; _l12++) { } diff --git a/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js index d0ced9921469c..86e84ced58f0f 100644 --- a/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js +++ b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js @@ -39,8 +39,8 @@ var Bugs; } var result = message.replace(/\{(\d+)\}/g, function (match) { var rest = []; - for (var _a = 1; _a < arguments.length; _a++) { - rest[_a - 1] = arguments[_a]; + for (var _i = 1; _i < arguments.length; _i++) { + rest[_i - 1] = arguments[_i]; } var index = rest[0]; return typeof args[index] !== 'undefined' ? args[index] : match; diff --git a/tests/baselines/reference/parserES5ForOfStatement10.js b/tests/baselines/reference/parserES5ForOfStatement10.js index cac70523022ef..bfdb03956eee7 100644 --- a/tests/baselines/reference/parserES5ForOfStatement10.js +++ b/tests/baselines/reference/parserES5ForOfStatement10.js @@ -4,5 +4,5 @@ for (const v of X) { //// [parserES5ForOfStatement10.js] for (var _i = 0; _i < X.length; _i++) { - var v = X[_i]; + var _v = X[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement11.js b/tests/baselines/reference/parserES5ForOfStatement11.js index 40e4ca68d6bb9..eaa5b808d9709 100644 --- a/tests/baselines/reference/parserES5ForOfStatement11.js +++ b/tests/baselines/reference/parserES5ForOfStatement11.js @@ -4,5 +4,5 @@ for (const [a, b] of X) { //// [parserES5ForOfStatement11.js] for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a[0], b = _a[1]; + var _a = X[_i], _a_1 = _a[0], _b = _a[1]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement12.js b/tests/baselines/reference/parserES5ForOfStatement12.js index f877ebdb757be..b70b916e51176 100644 --- a/tests/baselines/reference/parserES5ForOfStatement12.js +++ b/tests/baselines/reference/parserES5ForOfStatement12.js @@ -4,5 +4,5 @@ for (const {a, b} of X) { //// [parserES5ForOfStatement12.js] for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a.a, b = _a.b; + var _a = X[_i], _a_1 = _a.a, _b = _a.b; } diff --git a/tests/baselines/reference/parserES5ForOfStatement13.js b/tests/baselines/reference/parserES5ForOfStatement13.js index 4519948051848..b6dac668161e2 100644 --- a/tests/baselines/reference/parserES5ForOfStatement13.js +++ b/tests/baselines/reference/parserES5ForOfStatement13.js @@ -4,5 +4,5 @@ for (let {a, b} of X) { //// [parserES5ForOfStatement13.js] for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a.a, b = _a.b; + var _a = X[_i], _a_1 = _a.a, _b = _a.b; } diff --git a/tests/baselines/reference/parserES5ForOfStatement14.js b/tests/baselines/reference/parserES5ForOfStatement14.js index d05fdb96e5728..61c6755808b09 100644 --- a/tests/baselines/reference/parserES5ForOfStatement14.js +++ b/tests/baselines/reference/parserES5ForOfStatement14.js @@ -4,5 +4,5 @@ for (let [a, b] of X) { //// [parserES5ForOfStatement14.js] for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a[0], b = _a[1]; + var _a = X[_i], _a_1 = _a[0], _b = _a[1]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement9.js b/tests/baselines/reference/parserES5ForOfStatement9.js index 6b63d58a88a92..a5561592b01b1 100644 --- a/tests/baselines/reference/parserES5ForOfStatement9.js +++ b/tests/baselines/reference/parserES5ForOfStatement9.js @@ -4,5 +4,5 @@ for (let v of X) { //// [parserES5ForOfStatement9.js] for (var _i = 0; _i < X.length; _i++) { - var v = X[_i]; + var _v = X[_i]; } diff --git a/tests/baselines/reference/recursiveClassReferenceTest.js b/tests/baselines/reference/recursiveClassReferenceTest.js index f565f8f23d08a..661ecb3a0e782 100644 --- a/tests/baselines/reference/recursiveClassReferenceTest.js +++ b/tests/baselines/reference/recursiveClassReferenceTest.js @@ -116,7 +116,7 @@ var Sample; var Actions; (function (Actions) { var Thing; - (function (_Thing_1) { + (function (_Thing) { var Find; (function (Find) { var StartFindAction = (function () { @@ -131,7 +131,7 @@ var Sample; return StartFindAction; })(); Find.StartFindAction = StartFindAction; - })(Find = _Thing_1.Find || (_Thing_1.Find = {})); + })(Find = _Thing.Find || (_Thing.Find = {})); })(Thing = Actions.Thing || (Actions.Thing = {})); })(Actions = Sample.Actions || (Sample.Actions = {})); })(Sample || (Sample = {})); diff --git a/tests/baselines/reference/recursiveClassReferenceTest.js.map b/tests/baselines/reference/recursiveClassReferenceTest.js.map index d77875f10e4a4..f179d3fc4876d 100644 --- a/tests/baselines/reference/recursiveClassReferenceTest.js.map +++ b/tests/baselines/reference/recursiveClassReferenceTest.js.map @@ -1,2 +1,2 @@ //// [recursiveClassReferenceTest.js.map] -{"version":3,"file":"recursiveClassReferenceTest.js","sourceRoot":"","sources":["recursiveClassReferenceTest.ts"],"names":["Sample","Sample.Actions","Sample.Actions.Thing","Sample.Actions.Thing.Find","Sample.Actions.Thing.Find.StartFindAction","Sample.Actions.Thing.Find.StartFindAction.constructor","Sample.Actions.Thing.Find.StartFindAction.getId","Sample.Actions.Thing.Find.StartFindAction.run","Sample.Thing","Sample.Thing.Widgets","Sample.Thing.Widgets.FindWidget","Sample.Thing.Widgets.FindWidget.constructor","Sample.Thing.Widgets.FindWidget.gar","Sample.Thing.Widgets.FindWidget.getDomNode","Sample.Thing.Widgets.FindWidget.destroy","AbstractMode","AbstractMode.constructor","AbstractMode.getInitialState","Sample.Thing.Languages","Sample.Thing.Languages.PlainText","Sample.Thing.Languages.PlainText.State","Sample.Thing.Languages.PlainText.State.constructor","Sample.Thing.Languages.PlainText.State.clone","Sample.Thing.Languages.PlainText.State.equals","Sample.Thing.Languages.PlainText.State.getMode","Sample.Thing.Languages.PlainText.Mode","Sample.Thing.Languages.PlainText.Mode.constructor","Sample.Thing.Languages.PlainText.Mode.getInitialState"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"recursiveClassReferenceTest.js","sourceRoot":"","sources":["recursiveClassReferenceTest.ts"],"names":["Sample","Sample.Actions","Sample.Actions.Thing","Sample.Actions.Thing.Find","Sample.Actions.Thing.Find.StartFindAction","Sample.Actions.Thing.Find.StartFindAction.constructor","Sample.Actions.Thing.Find.StartFindAction.getId","Sample.Actions.Thing.Find.StartFindAction.run","Sample.Thing","Sample.Thing.Widgets","Sample.Thing.Widgets.FindWidget","Sample.Thing.Widgets.FindWidget.constructor","Sample.Thing.Widgets.FindWidget.gar","Sample.Thing.Widgets.FindWidget.getDomNode","Sample.Thing.Widgets.FindWidget.destroy","AbstractMode","AbstractMode.constructor","AbstractMode.getInitialState","Sample.Thing.Languages","Sample.Thing.Languages.PlainText","Sample.Thing.Languages.PlainText.State","Sample.Thing.Languages.PlainText.State.constructor","Sample.Thing.Languages.PlainText.State.clone","Sample.Thing.Languages.PlainText.State.equals","Sample.Thing.Languages.PlainText.State.getMode","Sample.Thing.Languages.PlainText.Mode","Sample.Thing.Languages.PlainText.Mode.constructor","Sample.Thing.Languages.PlainText.Mode.getInitialState"],"mappings":"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"} \ No newline at end of file diff --git a/tests/baselines/reference/recursiveClassReferenceTest.sourcemap.txt b/tests/baselines/reference/recursiveClassReferenceTest.sourcemap.txt index 47bb3f2d18ab8..ed829e14804ab 100644 --- a/tests/baselines/reference/recursiveClassReferenceTest.sourcemap.txt +++ b/tests/baselines/reference/recursiveClassReferenceTest.sourcemap.txt @@ -139,7 +139,7 @@ sourceFile:recursiveClassReferenceTest.ts 2 > ^^^^ 3 > ^^^^^ 4 > ^ -5 > ^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^-> 1 >. 2 > 3 > Thing @@ -159,16 +159,16 @@ sourceFile:recursiveClassReferenceTest.ts 3 >Emitted(13, 18) Source(32, 28) + SourceIndex(0) name (Sample.Actions) 4 >Emitted(13, 19) Source(42, 2) + SourceIndex(0) name (Sample.Actions) --- ->>> (function (_Thing_1) { +>>> (function (_Thing) { 1->^^^^^^^^ 2 > ^^^^^^^^^^^ -3 > ^^^^^^^^ +3 > ^^^^^^ 1-> 2 > 3 > Thing 1->Emitted(14, 9) Source(32, 23) + SourceIndex(0) name (Sample.Actions) 2 >Emitted(14, 20) Source(32, 23) + SourceIndex(0) name (Sample.Actions) -3 >Emitted(14, 28) Source(32, 28) + SourceIndex(0) name (Sample.Actions) +3 >Emitted(14, 26) Source(32, 28) + SourceIndex(0) name (Sample.Actions) --- >>> var Find; 1 >^^^^^^^^^^^^ @@ -365,7 +365,7 @@ sourceFile:recursiveClassReferenceTest.ts 2 > ^^^^^^^^^^^^^^^^^^^^ 3 > ^^^^^^^^^^^^^^^^^^ 4 > ^ -5 > ^^^^^^^-> +5 > ^^^-> 1-> 2 > StartFindAction 3 > implements Sample.Thing.IAction { @@ -383,16 +383,17 @@ sourceFile:recursiveClassReferenceTest.ts 3 >Emitted(28, 55) Source(41, 3) + SourceIndex(0) name (Sample.Actions.Thing.Find) 4 >Emitted(28, 56) Source(41, 3) + SourceIndex(0) name (Sample.Actions.Thing.Find) --- ->>> })(Find = _Thing_1.Find || (_Thing_1.Find = {})); +>>> })(Find = _Thing.Find || (_Thing.Find = {})); 1->^^^^^^^^^^^^ 2 > ^ 3 > ^^ 4 > ^^^^ 5 > ^^^ -6 > ^^^^^^^^^^^^^ -7 > ^^^^^ -8 > ^^^^^^^^^^^^^ -9 > ^^^^^^^^ +6 > ^^^^^^^^^^^ +7 > ^^^^^ +8 > ^^^^^^^^^^^ +9 > ^^^^^^^^ +10> ^^-> 1-> > 2 > } @@ -400,31 +401,31 @@ sourceFile:recursiveClassReferenceTest.ts 4 > Find 5 > 6 > Find -7 > -8 > Find -9 > { - > export class StartFindAction implements Sample.Thing.IAction { - > - > public getId() { return "yo"; } - > - > public run(Thing:Sample.Thing.ICodeThing):boolean { - > - > return true; - > } - > } - > } +7 > +8 > Find +9 > { + > export class StartFindAction implements Sample.Thing.IAction { + > + > public getId() { return "yo"; } + > + > public run(Thing:Sample.Thing.ICodeThing):boolean { + > + > return true; + > } + > } + > } 1->Emitted(29, 13) Source(42, 1) + SourceIndex(0) name (Sample.Actions.Thing.Find) 2 >Emitted(29, 14) Source(42, 2) + SourceIndex(0) name (Sample.Actions.Thing.Find) 3 >Emitted(29, 16) Source(32, 29) + SourceIndex(0) name (Sample.Actions.Thing) 4 >Emitted(29, 20) Source(32, 33) + SourceIndex(0) name (Sample.Actions.Thing) 5 >Emitted(29, 23) Source(32, 29) + SourceIndex(0) name (Sample.Actions.Thing) -6 >Emitted(29, 36) Source(32, 33) + SourceIndex(0) name (Sample.Actions.Thing) -7 >Emitted(29, 41) Source(32, 29) + SourceIndex(0) name (Sample.Actions.Thing) -8 >Emitted(29, 54) Source(32, 33) + SourceIndex(0) name (Sample.Actions.Thing) -9 >Emitted(29, 62) Source(42, 2) + SourceIndex(0) name (Sample.Actions.Thing) +6 >Emitted(29, 34) Source(32, 33) + SourceIndex(0) name (Sample.Actions.Thing) +7 >Emitted(29, 39) Source(32, 29) + SourceIndex(0) name (Sample.Actions.Thing) +8 >Emitted(29, 50) Source(32, 33) + SourceIndex(0) name (Sample.Actions.Thing) +9 >Emitted(29, 58) Source(42, 2) + SourceIndex(0) name (Sample.Actions.Thing) --- >>> })(Thing = Actions.Thing || (Actions.Thing = {})); -1 >^^^^^^^^ +1->^^^^^^^^ 2 > ^ 3 > ^^ 4 > ^^^^^ @@ -434,7 +435,7 @@ sourceFile:recursiveClassReferenceTest.ts 8 > ^^^^^^^^^^^^^ 9 > ^^^^^^^^ 10> ^-> -1 > +1-> 2 > } 3 > 4 > Thing @@ -453,7 +454,7 @@ sourceFile:recursiveClassReferenceTest.ts > } > } > } -1 >Emitted(30, 9) Source(42, 1) + SourceIndex(0) name (Sample.Actions.Thing) +1->Emitted(30, 9) Source(42, 1) + SourceIndex(0) name (Sample.Actions.Thing) 2 >Emitted(30, 10) Source(42, 2) + SourceIndex(0) name (Sample.Actions.Thing) 3 >Emitted(30, 12) Source(32, 23) + SourceIndex(0) name (Sample.Actions) 4 >Emitted(30, 17) Source(32, 28) + SourceIndex(0) name (Sample.Actions) diff --git a/tests/cases/compiler/letCollidingNameInNestedScope.ts b/tests/cases/compiler/letCollidingNameInNestedScope.ts new file mode 100644 index 0000000000000..fb6325472b449 --- /dev/null +++ b/tests/cases/compiler/letCollidingNameInNestedScope.ts @@ -0,0 +1,17 @@ +declare function foo(a: any); +var x = 1; +{ + let x = true; + foo(x); + function bar() { + var _x = 1; + foo(_x); + foo(x); + { + let x = 1; + foo(x); + } + foo(_x); + } + foo(x); +} \ No newline at end of file