@@ -2336,7 +2336,7 @@ namespace ts {
2336
2336
// For `f.prototype.m = function() { this.x = 0; }`, `this.x = 0` should modify `f`'s members, not the function expression.
2337
2337
if ( isBinaryExpression ( thisContainer . parent ) && thisContainer . parent . operatorToken . kind === SyntaxKind . EqualsToken ) {
2338
2338
const l = thisContainer . parent . left ;
2339
- if ( isPropertyAccessExpression ( l ) && isPropertyAccessExpression ( l . expression ) && l . expression . name . escapedText === "prototype" && isEntityNameExpression ( l . expression . expression ) ) {
2339
+ if ( isPropertyAccessEntityNameExpression ( l ) && isPrototypeAccess ( l . expression ) ) {
2340
2340
constructorSymbol = getJSInitializerSymbolFromName ( l . expression . expression , containerContainer ) ;
2341
2341
}
2342
2342
}
@@ -2368,12 +2368,12 @@ namespace ts {
2368
2368
if ( node . expression . kind === SyntaxKind . ThisKeyword ) {
2369
2369
bindThisPropertyAssignment ( node ) ;
2370
2370
}
2371
- else if ( isEntityNameExpression ( node ) && node . parent . parent . kind === SyntaxKind . SourceFile ) {
2372
- if ( isPropertyAccessExpression ( node . expression ) && node . expression . name . escapedText === "prototype" ) {
2373
- bindPrototypePropertyAssignment ( node as PropertyAccessEntityNameExpression , node . parent ) ;
2371
+ else if ( isPropertyAccessEntityNameExpression ( node ) && node . parent . parent . kind === SyntaxKind . SourceFile ) {
2372
+ if ( isPrototypeAccess ( node . expression ) ) {
2373
+ bindPrototypePropertyAssignment ( node , node . parent ) ;
2374
2374
}
2375
2375
else {
2376
- bindStaticPropertyAssignment ( node as PropertyAccessEntityNameExpression ) ;
2376
+ bindStaticPropertyAssignment ( node ) ;
2377
2377
}
2378
2378
}
2379
2379
}
@@ -2436,15 +2436,10 @@ namespace ts {
2436
2436
2437
2437
function bindPropertyAssignment ( name : EntityNameExpression , propertyAccess : PropertyAccessEntityNameExpression , isPrototypeProperty : boolean ) {
2438
2438
let symbol = getJSInitializerSymbolFromName ( name ) ;
2439
- let isToplevelNamespaceableInitializer : boolean ;
2440
- if ( isBinaryExpression ( propertyAccess . parent ) ) {
2441
- const isPrototypeAssignment = isPropertyAccessExpression ( propertyAccess . parent . left ) && propertyAccess . parent . left . name . escapedText === "prototype" ;
2442
- isToplevelNamespaceableInitializer = propertyAccess . parent . parent . parent . kind === SyntaxKind . SourceFile &&
2443
- ! ! getJavascriptInitializer ( propertyAccess . parent . right , isPrototypeAssignment ) ;
2444
- }
2445
- else {
2446
- isToplevelNamespaceableInitializer = propertyAccess . parent . parent . kind === SyntaxKind . SourceFile ;
2447
- }
2439
+ const isToplevelNamespaceableInitializer = isBinaryExpression ( propertyAccess . parent )
2440
+ ? propertyAccess . parent . parent . parent . kind === SyntaxKind . SourceFile &&
2441
+ ! ! getJavascriptInitializer ( propertyAccess . parent . right , isPrototypeAccess ( propertyAccess . parent . left ) )
2442
+ : propertyAccess . parent . parent . kind === SyntaxKind . SourceFile ;
2448
2443
if ( ! isPrototypeProperty && ( ! symbol || ! ( symbol . flags & SymbolFlags . Namespace ) ) && isToplevelNamespaceableInitializer ) {
2449
2444
// make symbols or add declarations for intermediate containers
2450
2445
const flags = SymbolFlags . Module | SymbolFlags . JSContainer ;
0 commit comments