Merge pull request #5566 from jeffreymorlan/fix5444

Fix issue #5444
This commit is contained in:
Daniel Rosenwasser
2015-11-28 12:00:26 -08:00
4 changed files with 104 additions and 1 deletions

View File

@@ -11439,7 +11439,9 @@ namespace ts {
seen = c === node;
}
});
if (subsequentNode) {
// We may be here because of some extra junk between overloads that could not be parsed into a valid node.
// In this case the subsequent node is not really consecutive (.pos !== node.end), and we must ignore it here.
if (subsequentNode && subsequentNode.pos === node.end) {
if (subsequentNode.kind === node.kind) {
const errorNode: Node = (<FunctionLikeDeclaration>subsequentNode).name || subsequentNode;
// TODO(jfreeman): These are methods, so handle computed name case

View File

@@ -0,0 +1,63 @@
tests/cases/compiler/overloadConsecutiveness.ts(3,10): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(3,14): error TS1144: '{' or ';' expected.
tests/cases/compiler/overloadConsecutiveness.ts(3,25): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(4,10): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(4,14): error TS1144: '{' or ';' expected.
tests/cases/compiler/overloadConsecutiveness.ts(5,10): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(5,17): error TS1128: Declaration or statement expected.
tests/cases/compiler/overloadConsecutiveness.ts(5,28): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(8,2): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(8,6): error TS1144: '{' or ';' expected.
tests/cases/compiler/overloadConsecutiveness.ts(8,8): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(9,2): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(9,6): error TS1144: '{' or ';' expected.
tests/cases/compiler/overloadConsecutiveness.ts(10,2): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/overloadConsecutiveness.ts(10,9): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected.
tests/cases/compiler/overloadConsecutiveness.ts(10,11): error TS2391: Function implementation is missing or not immediately following the declaration.
==== tests/cases/compiler/overloadConsecutiveness.ts (16 errors) ====
// Making sure compiler won't break with declarations that are consecutive in the AST but not consecutive in the source. Syntax errors intentional.
function f1(), function f1();
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
~
!!! error TS1144: '{' or ';' expected.
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
function f2(), function f2() {}
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
~
!!! error TS1144: '{' or ';' expected.
function f3() {}, function f3();
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
~
!!! error TS1128: Declaration or statement expected.
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
class C {
m1(), m1();
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
~
!!! error TS1144: '{' or ';' expected.
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
m2(), m2() {}
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
~
!!! error TS1144: '{' or ';' expected.
m3() {}, m3();
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
~
!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected.
~~
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
}

View File

@@ -0,0 +1,27 @@
//// [overloadConsecutiveness.ts]
// Making sure compiler won't break with declarations that are consecutive in the AST but not consecutive in the source. Syntax errors intentional.
function f1(), function f1();
function f2(), function f2() {}
function f3() {}, function f3();
class C {
m1(), m1();
m2(), m2() {}
m3() {}, m3();
}
//// [overloadConsecutiveness.js]
// Making sure compiler won't break with declarations that are consecutive in the AST but not consecutive in the source. Syntax errors intentional.
function f2() { }
function f3() { }
var C = (function () {
function C() {
}
C.prototype.m1 = ;
C.prototype.m2 = ;
C.prototype.m2 = function () { };
C.prototype.m3 = function () { };
return C;
})();

View File

@@ -0,0 +1,11 @@
// Making sure compiler won't break with declarations that are consecutive in the AST but not consecutive in the source. Syntax errors intentional.
function f1(), function f1();
function f2(), function f2() {}
function f3() {}, function f3();
class C {
m1(), m1();
m2(), m2() {}
m3() {}, m3();
}