@@ -39,7 +39,7 @@ function main(): void {
3939function buildUniqueNameMap ( names : string [ ] ) : IIndexable < string > {
4040 var nameMap : IIndexable < string > = { } ;
4141
42- var uniqueNames = NameGenerator . ensureUniqueness ( names , /*isFixed */ undefined , /* isCaseSensitive */ false ) ;
42+ var uniqueNames = NameGenerator . ensureUniqueness ( names , /* isCaseSensitive */ false , /* isFixed */ undefined ) ;
4343
4444 for ( var i = 0 ; i < names . length ; i ++ ) {
4545 nameMap [ names [ i ] ] = uniqueNames [ i ] ;
@@ -94,14 +94,17 @@ function convertPropertyName(origName: string): string {
9494}
9595
9696module NameGenerator {
97- export function ensureUniqueness ( names : string [ ] , isFixed : boolean [ ] = names . map ( ( ) => false ) , isCaseSensitive : boolean = false ) : string [ ] {
97+ export function ensureUniqueness ( names : string [ ] , isCaseSensitive : boolean , isFixed ?: boolean [ ] ) : string [ ] {
98+ if ( ! isFixed ) {
99+ isFixed = names . map ( ( ) => false )
100+ }
98101
99- var names = names . map ( x => x ) ;
100- ensureUniquenessInPlace ( names , isFixed , isCaseSensitive ) ;
102+ var names = names . slice ( ) ;
103+ ensureUniquenessInPlace ( names , isCaseSensitive , isFixed ) ;
101104 return names ;
102105 }
103106
104- function ensureUniquenessInPlace ( names : string [ ] , isFixed : boolean [ ] , isCaseSensitive : boolean ) : void {
107+ function ensureUniquenessInPlace ( names : string [ ] , isCaseSensitive : boolean , isFixed : boolean [ ] ) : void {
105108 for ( var i = 0 ; i < names . length ; i ++ ) {
106109 var name = names [ i ] ;
107110 var collisionIndices = Utilities . collectMatchingIndices ( name , names , isCaseSensitive ) ;
@@ -128,9 +131,12 @@ module NameGenerator {
128131 }
129132
130133 while ( true ) {
131- var newName = name + suffix ++ ;
134+ var newName = name + suffix ;
135+ suffix ++ ;
132136
133- if ( ! proposedNames . some ( ( name ) => Utilities . stringEquals ( name , newName , isCaseSensitive ) ) ) {
137+ // Check if we've synthesized a unique name, and if so
138+ // replace the conflicting name with the new one.
139+ if ( ! proposedNames . some ( name => Utilities . stringEquals ( name , newName , isCaseSensitive ) ) ) {
134140 proposedNames [ collisionIndex ] = newName ;
135141 break ;
136142 }
@@ -141,7 +147,7 @@ module NameGenerator {
141147
142148module Utilities {
143149 /// Return a list of all indices where a string occurs.
144- export function collectMatchingIndices ( name : string , proposedNames : string [ ] , isCaseSensitive : boolean = false ) : number [ ] {
150+ export function collectMatchingIndices ( name : string , proposedNames : string [ ] , isCaseSensitive : boolean ) : number [ ] {
145151 var matchingIndices : number [ ] = [ ] ;
146152
147153 for ( var i = 0 ; i < proposedNames . length ; i ++ ) {
@@ -153,7 +159,7 @@ module Utilities {
153159 return matchingIndices ;
154160 }
155161
156- export function stringEquals ( s1 : string , s2 : string , caseSensitive : boolean = false ) : boolean {
162+ export function stringEquals ( s1 : string , s2 : string , caseSensitive : boolean ) : boolean {
157163 if ( caseSensitive ) {
158164 s1 = s1 . toLowerCase ( ) ;
159165 s2 = s2 . toLowerCase ( ) ;
0 commit comments