this in parameter initializers resolves to class

Accept baselines now that the test passes.
This commit is contained in:
Nathan Shively-Sanders 2016-06-09 12:29:13 -07:00
parent 9fac99e692
commit 0c64b0c24e
4 changed files with 88 additions and 1 deletions

View File

@ -8392,7 +8392,7 @@ namespace ts {
if (needToCaptureLexicalThis) {
captureLexicalThis(node, container);
}
if (isFunctionLike(container)) {
if (isFunctionLike(container) && !isInParameterInitializerBeforeContainingFunction(node)) {
// If this is a function in a JS file, it might be a class method. Check if it's the RHS
// of a x.prototype.y = function [name]() { .... }
if (container.kind === SyntaxKind.FunctionExpression &&

View File

@ -0,0 +1,30 @@
//// [inferParameterWithMethodCallInitializer.ts]
function getNumber(): number {
return 1;
}
class Example {
getNumber(): number {
return 1;
}
doSomething(a = this.getNumber()): typeof a {
return a;
}
}
//// [inferParameterWithMethodCallInitializer.js]
function getNumber() {
return 1;
}
var Example = (function () {
function Example() {
}
Example.prototype.getNumber = function () {
return 1;
};
Example.prototype.doSomething = function (a) {
if (a === void 0) { a = this.getNumber(); }
return a;
};
return Example;
}());

View File

@ -0,0 +1,27 @@
=== tests/cases/compiler/inferParameterWithMethodCallInitializer.ts ===
function getNumber(): number {
>getNumber : Symbol(getNumber, Decl(inferParameterWithMethodCallInitializer.ts, 0, 0))
return 1;
}
class Example {
>Example : Symbol(Example, Decl(inferParameterWithMethodCallInitializer.ts, 2, 1))
getNumber(): number {
>getNumber : Symbol(Example.getNumber, Decl(inferParameterWithMethodCallInitializer.ts, 3, 15))
return 1;
}
doSomething(a = this.getNumber()): typeof a {
>doSomething : Symbol(Example.doSomething, Decl(inferParameterWithMethodCallInitializer.ts, 6, 5))
>a : Symbol(a, Decl(inferParameterWithMethodCallInitializer.ts, 7, 16))
>this.getNumber : Symbol(Example.getNumber, Decl(inferParameterWithMethodCallInitializer.ts, 3, 15))
>this : Symbol(Example, Decl(inferParameterWithMethodCallInitializer.ts, 2, 1))
>getNumber : Symbol(Example.getNumber, Decl(inferParameterWithMethodCallInitializer.ts, 3, 15))
>a : Symbol(a, Decl(inferParameterWithMethodCallInitializer.ts, 7, 16))
return a;
>a : Symbol(a, Decl(inferParameterWithMethodCallInitializer.ts, 7, 16))
}
}

View File

@ -0,0 +1,30 @@
=== tests/cases/compiler/inferParameterWithMethodCallInitializer.ts ===
function getNumber(): number {
>getNumber : () => number
return 1;
>1 : number
}
class Example {
>Example : Example
getNumber(): number {
>getNumber : () => number
return 1;
>1 : number
}
doSomething(a = this.getNumber()): typeof a {
>doSomething : (a?: number) => number
>a : number
>this.getNumber() : number
>this.getNumber : () => number
>this : this
>getNumber : () => number
>a : number
return a;
>a : number
}
}