@@ -6049,6 +6049,49 @@ module ts {
60496049 Debug . fail ( "getLocalNameForSymbol failed" ) ;
60506050 }
60516051
6052+ function isNodeParentedBy ( node : Node , parent : Node ) : boolean {
6053+ while ( node ) {
6054+ if ( node === parent ) return true ;
6055+ node = node . parent ;
6056+ }
6057+ return false ;
6058+ }
6059+
6060+ function isUniqueLocalName ( name : string , container : Node ) : boolean {
6061+ name = escapeIdentifier ( name ) ;
6062+ if ( container . locals ) {
6063+ for ( var node = container ; isNodeParentedBy ( node , container ) ; node = node . nextLocals ) {
6064+ if ( hasProperty ( node . locals , name ) && node . locals [ name ] . flags & ( SymbolFlags . Value | SymbolFlags . ExportValue ) ) {
6065+ return false ;
6066+ }
6067+ }
6068+ }
6069+ return true ;
6070+ }
6071+
6072+ function getLocalNameOfContainer ( container : Declaration ) : string {
6073+ var links = getNodeLinks ( container ) ;
6074+ if ( ! links . localModuleName ) {
6075+ var name = container . name . text ? unescapeIdentifier ( container . name . text ) : "M" ;
6076+ while ( ! isUniqueLocalName ( name , container ) ) {
6077+ name = "_" + name ;
6078+ }
6079+ links . localModuleName = name ;
6080+ }
6081+ return links . localModuleName ;
6082+ }
6083+
6084+ function getLocalNameForSymbol ( symbol : Symbol , location : Node ) : string {
6085+ var node = location ;
6086+ while ( node ) {
6087+ if ( ( node . kind === SyntaxKind . ModuleDeclaration || node . kind === SyntaxKind . EnumDeclaration ) && getSymbolOfNode ( node ) === symbol ) {
6088+ return getLocalNameOfContainer ( node ) ;
6089+ }
6090+ node = node . parent ;
6091+ }
6092+ Debug . fail ( "getLocalNameForSymbol failed" ) ;
6093+ }
6094+
60526095 function getExpressionNamePrefix ( node : Identifier ) : string {
60536096 var symbol = getNodeLinks ( node ) . resolvedSymbol ;
60546097 if ( symbol ) {
0 commit comments