Merge branch 'master' into release-2.1

This commit is contained in:
Mohamed Hegazy
2016-12-14 13:58:01 -08:00
25 changed files with 179 additions and 22 deletions

View File

@@ -466,9 +466,7 @@ namespace ts {
// other kinds of value declarations take precedence over modules
target.valueDeclaration = source.valueDeclaration;
}
forEach(source.declarations, node => {
target.declarations.push(node);
});
addRange(target.declarations, source.declarations);
if (source.members) {
if (!target.members) target.members = createMap<Symbol>();
mergeSymbolTable(target.members, source.members);
@@ -1100,7 +1098,7 @@ namespace ts {
}
function getDeclarationOfAliasSymbol(symbol: Symbol): Declaration | undefined {
return forEach(symbol.declarations, d => isAliasSymbolDeclaration(d) ? d : undefined);
return find<Declaration>(symbol.declarations, isAliasSymbolDeclaration);
}
function getTargetOfImportEqualsDeclaration(node: ImportEqualsDeclaration): Symbol {

View File

@@ -1024,8 +1024,11 @@ namespace ts {
}
}
// Return the result if we have an immediate super() call on the last statement.
if (superCallExpression && statementOffset === ctorStatements.length - 1) {
// Return the result if we have an immediate super() call on the last statement,
// but only if the constructor itself doesn't use 'this' elsewhere.
if (superCallExpression
&& statementOffset === ctorStatements.length - 1
&& !(ctor.transformFlags & (TransformFlags.ContainsLexicalThis | TransformFlags.ContainsCapturedLexicalThis))) {
const returnStatement = createReturn(superCallExpression);
if (superCallExpression.kind !== SyntaxKind.BinaryExpression

View File

@@ -23,6 +23,7 @@ namespace ts.JsDoc {
"lends",
"link",
"memberOf",
"method",
"name",
"namespace",
"param",

View File

@@ -616,9 +616,8 @@ namespace ts {
else {
declarations.push(functionDeclaration);
}
forEachChild(node, visit);
}
forEachChild(node, visit);
break;
case SyntaxKind.ClassDeclaration:

View File

@@ -116,7 +116,8 @@ var Base = (function () {
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
return _super.call(this, function () { return _this; }) || this;
var _this = _super.call(this, function () { return _this; }) || this;
return _this;
}
return Derived;
}(Base));
@@ -157,7 +158,8 @@ var M2;
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
return _super.call(this, function () { return _this; }) || this;
var _this = _super.call(this, function () { return _this; }) || this;
return _this;
}
return Derived;
}(Base));

View File

@@ -0,0 +1,17 @@
tests/cases/compiler/captureSuperPropertyAccessInSuperCall01.ts(9,24): error TS17011: 'super' must be called before accessing a property of 'super' in the constructor of a derived class.
==== tests/cases/compiler/captureSuperPropertyAccessInSuperCall01.ts (1 errors) ====
class A {
constructor(f: () => string) {
}
public blah(): string { return ""; }
}
class B extends A {
constructor() {
super(() => { return super.blah(); })
~~~~~
!!! error TS17011: 'super' must be called before accessing a property of 'super' in the constructor of a derived class.
}
}

View File

@@ -0,0 +1,33 @@
//// [captureSuperPropertyAccessInSuperCall01.ts]
class A {
constructor(f: () => string) {
}
public blah(): string { return ""; }
}
class B extends A {
constructor() {
super(() => { return super.blah(); })
}
}
//// [captureSuperPropertyAccessInSuperCall01.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var A = (function () {
function A(f) {
}
A.prototype.blah = function () { return ""; };
return A;
}());
var B = (function (_super) {
__extends(B, _super);
function B() {
var _this = _super.call(this, function () { return _super.blah.call(_this); }) || this;
return _this;
}
return B;
}(A));

View File

@@ -22,7 +22,8 @@ var A = (function () {
var B = (function (_super) {
__extends(B, _super);
function B() {
return _super.call(this, { test: function () { return _this.someMethod(); } }) || this;
var _this = _super.call(this, { test: function () { return _this.someMethod(); } }) || this;
return _this;
}
B.prototype.someMethod = function () { };
return B;

View File

@@ -25,7 +25,8 @@ var Based = (function () {
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
return _super.call(this, this.x) || this;
var _this = _super.call(this, _this.x) || this;
return _this;
}
return Derived;
}(Based));

View File

@@ -23,7 +23,8 @@ var Base = (function () {
var Super = (function (_super) {
__extends(Super, _super);
function Super() {
return _super.call(this, (function () { return _this; })) || this;
var _this = _super.call(this, (function () { return _this; })) || this;
return _this;
}
return Super;
}(Base));

View File

@@ -42,7 +42,8 @@ var Base = (function () {
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
return _super.call(this, _this) || this;
var _this = _super.call(this, _this) || this;
return _this;
}
return Derived;
}(Base));

View File

@@ -24,7 +24,8 @@ var Base = (function () {
var D = (function (_super) {
__extends(D, _super);
function D() {
return _super.call(this, function () { _this._t; }) || this;
var _this = _super.call(this, function () { _this._t; }) || this;
return _this;
}
return D;
}(Base));

View File

@@ -24,7 +24,8 @@ var Base = (function () {
var D = (function (_super) {
__extends(D, _super);
function D() {
return _super.call(this, this) || this;
var _this = _super.call(this, _this) || this;
return _this;
}
return D;
}(Base));

View File

@@ -0,0 +1,17 @@
tests/cases/compiler/superPropertyAccessInSuperCall01.ts(9,9): error TS17011: 'super' must be called before accessing a property of 'super' in the constructor of a derived class.
==== tests/cases/compiler/superPropertyAccessInSuperCall01.ts (1 errors) ====
class A {
constructor(f: string) {
}
public blah(): string { return ""; }
}
class B extends A {
constructor() {
super(super.blah())
~~~~~
!!! error TS17011: 'super' must be called before accessing a property of 'super' in the constructor of a derived class.
}
}

View File

@@ -0,0 +1,33 @@
//// [superPropertyAccessInSuperCall01.ts]
class A {
constructor(f: string) {
}
public blah(): string { return ""; }
}
class B extends A {
constructor() {
super(super.blah())
}
}
//// [superPropertyAccessInSuperCall01.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var A = (function () {
function A(f) {
}
A.prototype.blah = function () { return ""; };
return A;
}());
var B = (function (_super) {
__extends(B, _super);
function B() {
var _this = _super.call(this, _super.blah.call(_this)) || this;
return _this;
}
return B;
}(A));

View File

@@ -40,7 +40,8 @@ var C1 = (function (_super) {
var C2 = (function (_super) {
__extends(C2, _super);
function C2() {
return _super.call(this, _super.x.call(_this)) || this;
var _this = _super.call(this, _super.x.call(_this)) || this;
return _this;
}
return C2;
}(B));

View File

@@ -70,7 +70,8 @@ var ClassWithNoInitializer = (function (_super) {
__extends(ClassWithNoInitializer, _super);
//'this' in optional super call
function ClassWithNoInitializer() {
return _super.call(this, _this) || this;
var _this = _super.call(this, _this) || this;
return _this;
}
return ClassWithNoInitializer;
}(BaseErrClass));

View File

@@ -71,7 +71,8 @@ var ClassWithNoInitializer = (function (_super) {
__extends(ClassWithNoInitializer, _super);
//'this' in optional super call
function ClassWithNoInitializer() {
return _super.call(this, _this) || this;
var _this = _super.call(this, _this) || this;
return _this;
}
return ClassWithNoInitializer;
}(BaseErrClass));

View File

@@ -36,7 +36,8 @@ var Base = (function () {
var Foo = (function (_super) {
__extends(Foo, _super);
function Foo() {
return _super.call(this, _this) || this;
var _this = _super.call(this, _this) || this;
return _this;
}
return Foo;
}(Base));

View File

@@ -33,7 +33,8 @@ var Base = (function () {
var Foo = (function (_super) {
__extends(Foo, _super);
function Foo() {
return _super.call(this, _this) || this;
var _this = _super.call(this, _this) || this;
return _this;
}
return Foo;
}(Base));

View File

@@ -24,7 +24,8 @@ var Base = (function () {
var Super = (function (_super) {
__extends(Super, _super);
function Super() {
return _super.call(this, (function () { return _this; })()) || this;
var _this = _super.call(this, (function () { return _this; })()) || this;
return _this;
}
return Super;
}(Base));

View File

@@ -0,0 +1,11 @@
class A {
constructor(f: () => string) {
}
public blah(): string { return ""; }
}
class B extends A {
constructor() {
super(() => { return super.blah(); })
}
}

View File

@@ -0,0 +1,11 @@
class A {
constructor(f: string) {
}
public blah(): string { return ""; }
}
class B extends A {
constructor() {
super(super.blah())
}
}

View File

@@ -30,6 +30,7 @@ goTo.marker('1');
verify.completionListContains("constructor");
verify.completionListContains("param");
verify.completionListContains("type");
verify.completionListContains("method");
goTo.marker('2');
verify.completionListContains("constructor");

View File

@@ -0,0 +1,19 @@
/// <reference path="fourslash.ts" />
// @Filename: file1.ts
/////*1*/(function () {
//// "use strict";
//// function onResume() {
//// };
////} )();
// @Filename: file2.ts
/////*2*/class EventManager {
//// public onResume(name: string) { }
////}
////class MyOtherEventManager {
//// public onResume(name: string) { }
////}
verify.navigationItemsListCount(3, "onResume");
verify.navigationItemsListCount(1, "onResume", undefined, test.marker("1").fileName);
verify.navigationItemsListContains("onResume", "function", "onResume", "exact", test.marker("1").fileName);
verify.navigationItemsListCount(2, "onResume", undefined, test.marker("2").fileName);