mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 08:11:30 -06:00
do not crash when variable and function declarations collide
This commit is contained in:
parent
9857e7f64e
commit
e49e55287a
@ -11360,12 +11360,14 @@ namespace ts {
|
||||
const errorNode: Node = (<FunctionLikeDeclaration>subsequentNode).name || subsequentNode;
|
||||
// TODO(jfreeman): These are methods, so handle computed name case
|
||||
if (node.name && (<FunctionLikeDeclaration>subsequentNode).name && (<Identifier>node.name).text === (<Identifier>(<FunctionLikeDeclaration>subsequentNode).name).text) {
|
||||
Debug.assert(node.kind === SyntaxKind.MethodDeclaration || node.kind === SyntaxKind.MethodSignature);
|
||||
const reportError =
|
||||
(node.kind === SyntaxKind.MethodDeclaration || node.kind === SyntaxKind.MethodSignature) &&
|
||||
(node.flags & NodeFlags.Static) !== (subsequentNode.flags & NodeFlags.Static);
|
||||
// we can get here in two cases
|
||||
// 1. mixed static and instance class members
|
||||
// 2. something with the same name was defined before the set of overloads that prevents them from merging
|
||||
// here we'll report error only for the first case since for second we should already report error in binder
|
||||
if ((node.flags & NodeFlags.Static) !== (subsequentNode.flags & NodeFlags.Static)) {
|
||||
if (reportError) {
|
||||
const diagnostic = node.flags & NodeFlags.Static ? Diagnostics.Function_overload_must_be_static : Diagnostics.Function_overload_must_not_be_static;
|
||||
error(errorNode, diagnostic);
|
||||
}
|
||||
|
||||
20
tests/baselines/reference/nonMergedOverloads.errors.txt
Normal file
20
tests/baselines/reference/nonMergedOverloads.errors.txt
Normal file
@ -0,0 +1,20 @@
|
||||
tests/cases/compiler/nonMergedOverloads.ts(1,5): error TS2300: Duplicate identifier 'f'.
|
||||
tests/cases/compiler/nonMergedOverloads.ts(3,17): error TS1148: Cannot compile modules unless the '--module' flag is provided.
|
||||
tests/cases/compiler/nonMergedOverloads.ts(3,17): error TS2300: Duplicate identifier 'f'.
|
||||
tests/cases/compiler/nonMergedOverloads.ts(4,17): error TS2300: Duplicate identifier 'f'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/nonMergedOverloads.ts (4 errors) ====
|
||||
var f = 10;
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'f'.
|
||||
|
||||
export function f();
|
||||
~
|
||||
!!! error TS1148: Cannot compile modules unless the '--module' flag is provided.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'f'.
|
||||
export function f() {
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'f'.
|
||||
}
|
||||
12
tests/baselines/reference/nonMergedOverloads.js
Normal file
12
tests/baselines/reference/nonMergedOverloads.js
Normal file
@ -0,0 +1,12 @@
|
||||
//// [nonMergedOverloads.ts]
|
||||
var f = 10;
|
||||
|
||||
export function f();
|
||||
export function f() {
|
||||
}
|
||||
|
||||
//// [nonMergedOverloads.js]
|
||||
var f = 10;
|
||||
function f() {
|
||||
}
|
||||
exports.f = f;
|
||||
5
tests/cases/compiler/nonMergedOverloads.ts
Normal file
5
tests/cases/compiler/nonMergedOverloads.ts
Normal file
@ -0,0 +1,5 @@
|
||||
var f = 10;
|
||||
|
||||
export function f();
|
||||
export function f() {
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user