Skip to content

Commit 0f21db3

Browse files
committed
fix break change
1 parent 31dda88 commit 0f21db3

7 files changed

Lines changed: 43 additions & 37 deletions

src/compiler/checker.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,13 +1262,10 @@ namespace ts {
12621262
if (meaning & result.flags & SymbolFlags.Variable) {
12631263
// expression inside parameter will lookup as normal variable scope when targeting es2015+
12641264
const functionLocation = <FunctionLikeDeclaration>location;
1265-
if (functionLocation.body && result.valueDeclaration.pos >= functionLocation.body.pos && result.valueDeclaration.end <= functionLocation.body.end) {
1266-
if (findAncestor(originalLocation, isFunctionLikeDeclaration) !== functionLocation) {
1267-
useResult = false
1268-
}
1269-
else if (compilerOptions.target && compilerOptions.target >= ScriptTarget.ES2015 && isParameter(lastLocation)) {
1270-
useResult = false;
1271-
}
1265+
if (compilerOptions.target && compilerOptions.target >= ScriptTarget.ES2015 &&
1266+
functionLocation.body && result.valueDeclaration.pos >= functionLocation.body.pos && result.valueDeclaration.end <= functionLocation.body.end &&
1267+
((findAncestor(originalLocation, isFunctionLikeDeclaration) !== functionLocation) || isParameter(lastLocation))) {
1268+
useResult = false;
12721269
}
12731270
else if (result.flags & SymbolFlags.FunctionScopedVariable) {
12741271
// parameters are visible only inside function body, parameter list and return type

tests/baselines/reference/functionLikeInParameterInitializer.errors.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
tests/cases/compiler/functionLikeInParameterInitializer.ts(2,34): error TS2304: Cannot find name 'foo'.
2-
tests/cases/compiler/functionLikeInParameterInitializer.ts(6,44): error TS2304: Cannot find name 'foo'.
3-
tests/cases/compiler/functionLikeInParameterInitializer.ts(11,50): error TS2304: Cannot find name 'foo'.
1+
tests/cases/compiler/functionLikeInParameterInitializer.ts(2,34): error TS2373: Initializer of parameter 'func' cannot reference identifier 'foo' declared after it.
2+
tests/cases/compiler/functionLikeInParameterInitializer.ts(6,44): error TS2373: Initializer of parameter 'func' cannot reference identifier 'foo' declared after it.
3+
tests/cases/compiler/functionLikeInParameterInitializer.ts(11,50): error TS2373: Initializer of parameter 'func' cannot reference identifier 'foo' declared after it.
44
tests/cases/compiler/functionLikeInParameterInitializer.ts(16,41): error TS2373: Initializer of parameter 'func' cannot reference identifier 'foo' declared after it.
55

66

77
==== tests/cases/compiler/functionLikeInParameterInitializer.ts (4 errors) ====
88
// error
99
export function bar(func = () => foo) {
1010
~~~
11-
!!! error TS2304: Cannot find name 'foo'.
11+
!!! error TS2373: Initializer of parameter 'func' cannot reference identifier 'foo' declared after it.
1212
let foo = "in";
1313
}
1414
// error
1515
export function baz1(func = { f() { return foo } }) {
1616
~~~
17-
!!! error TS2304: Cannot find name 'foo'.
17+
!!! error TS2373: Initializer of parameter 'func' cannot reference identifier 'foo' declared after it.
1818
let foo = "in";
1919
}
2020

2121
// error
2222
export function baz2(func = function () { return foo }) {
2323
~~~
24-
!!! error TS2304: Cannot find name 'foo'.
24+
!!! error TS2373: Initializer of parameter 'func' cannot reference identifier 'foo' declared after it.
2525
let foo = "in";
2626
}
2727

tests/baselines/reference/functionLikeInParameterInitializer.symbols

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
export function bar(func = () => foo) {
44
>bar : Symbol(bar, Decl(functionLikeInParameterInitializer.ts, 0, 0))
55
>func : Symbol(func, Decl(functionLikeInParameterInitializer.ts, 1, 20))
6+
>foo : Symbol(foo, Decl(functionLikeInParameterInitializer.ts, 2, 7))
67

78
let foo = "in";
89
>foo : Symbol(foo, Decl(functionLikeInParameterInitializer.ts, 2, 7))
@@ -12,6 +13,7 @@ export function baz1(func = { f() { return foo } }) {
1213
>baz1 : Symbol(baz1, Decl(functionLikeInParameterInitializer.ts, 3, 1))
1314
>func : Symbol(func, Decl(functionLikeInParameterInitializer.ts, 5, 21))
1415
>f : Symbol(f, Decl(functionLikeInParameterInitializer.ts, 5, 29))
16+
>foo : Symbol(foo, Decl(functionLikeInParameterInitializer.ts, 6, 7))
1517

1618
let foo = "in";
1719
>foo : Symbol(foo, Decl(functionLikeInParameterInitializer.ts, 6, 7))
@@ -21,6 +23,7 @@ export function baz1(func = { f() { return foo } }) {
2123
export function baz2(func = function () { return foo }) {
2224
>baz2 : Symbol(baz2, Decl(functionLikeInParameterInitializer.ts, 7, 1))
2325
>func : Symbol(func, Decl(functionLikeInParameterInitializer.ts, 10, 21))
26+
>foo : Symbol(foo, Decl(functionLikeInParameterInitializer.ts, 11, 7))
2427

2528
let foo = "in";
2629
>foo : Symbol(foo, Decl(functionLikeInParameterInitializer.ts, 11, 7))

tests/baselines/reference/functionLikeInParameterInitializer.types

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
=== tests/cases/compiler/functionLikeInParameterInitializer.ts ===
22
// error
33
export function bar(func = () => foo) {
4-
>bar : (func?: () => any) => void
5-
>func : () => any
6-
>() => foo : () => any
7-
>foo : any
4+
>bar : (func?: () => string) => void
5+
>func : () => string
6+
>() => foo : () => string
7+
>foo : string
88

99
let foo = "in";
1010
>foo : string
1111
>"in" : "in"
1212
}
1313
// error
1414
export function baz1(func = { f() { return foo } }) {
15-
>baz1 : (func?: { f(): any; }) => void
16-
>func : { f(): any; }
17-
>{ f() { return foo } } : { f(): any; }
18-
>f : () => any
19-
>foo : any
15+
>baz1 : (func?: { f(): string; }) => void
16+
>func : { f(): string; }
17+
>{ f() { return foo } } : { f(): string; }
18+
>f : () => string
19+
>foo : string
2020

2121
let foo = "in";
2222
>foo : string
@@ -25,10 +25,10 @@ export function baz1(func = { f() { return foo } }) {
2525

2626
// error
2727
export function baz2(func = function () { return foo }) {
28-
>baz2 : (func?: () => any) => void
29-
>func : () => any
30-
>function () { return foo } : () => any
31-
>foo : any
28+
>baz2 : (func?: () => string) => void
29+
>func : () => string
30+
>function () { return foo } : () => string
31+
>foo : string
3232

3333
let foo = "in";
3434
>foo : string

tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(3,20): error TS2373: Initializer of parameter 'bar' cannot reference identifier 'foo' declared after it.
2+
tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(8,27): error TS2373: Initializer of parameter 'bar' cannot reference identifier 'foo' declared after it.
23
tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(13,20): error TS2373: Initializer of parameter 'bar' cannot reference identifier 'foo' declared after it.
34
tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(21,18): error TS2372: Parameter 'a' cannot be referenced in its initializer.
45
tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(25,22): error TS2372: Parameter 'async' cannot be referenced in its initializer.
56
tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(29,15): error TS2448: Block-scoped variable 'foo' used before its declaration.
7+
tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(40,25): error TS2373: Initializer of parameter 'bar' cannot reference identifier 'bazzzz' declared after it.
68

79

8-
==== tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts (5 errors) ====
10+
==== tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts (7 errors) ====
911
let foo: string = "";
1012

1113
function f1 (bar = foo) { // unexpected compiler error; works at runtime
@@ -16,6 +18,8 @@ tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(29
1618
}
1719

1820
function f2 (bar = (baz = foo) => baz) { // unexpected compiler error; works at runtime
21+
~~~
22+
!!! error TS2373: Initializer of parameter 'bar' cannot reference identifier 'foo' declared after it.
1923
var foo: number = 2;
2024
return bar(); // returns 1
2125
}
@@ -57,6 +61,8 @@ tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(29
5761

5862
let bazzzz = 2;
5963
function f9(bar = () => bazzzz) {
64+
~~~~~~
65+
!!! error TS2373: Initializer of parameter 'bar' cannot reference identifier 'bazzzz' declared after it.
6066
var bazzzz = 1;
6167
return bar();
6268
}

tests/baselines/reference/parameterInitializersForwardReferencing1.symbols

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function f2 (bar = (baz = foo) => baz) { // unexpected compiler error; works at
1818
>f2 : Symbol(f2, Decl(parameterInitializersForwardReferencing1.ts, 5, 1))
1919
>bar : Symbol(bar, Decl(parameterInitializersForwardReferencing1.ts, 7, 13))
2020
>baz : Symbol(baz, Decl(parameterInitializersForwardReferencing1.ts, 7, 20))
21-
>foo : Symbol(foo, Decl(parameterInitializersForwardReferencing1.ts, 0, 3))
21+
>foo : Symbol(foo, Decl(parameterInitializersForwardReferencing1.ts, 8, 7))
2222
>baz : Symbol(baz, Decl(parameterInitializersForwardReferencing1.ts, 7, 20))
2323

2424
var foo: number = 2;
@@ -96,7 +96,7 @@ let bazzzz = 2;
9696
function f9(bar = () => bazzzz) {
9797
>f9 : Symbol(f9, Decl(parameterInitializersForwardReferencing1.ts, 38, 15))
9898
>bar : Symbol(bar, Decl(parameterInitializersForwardReferencing1.ts, 39, 12))
99-
>bazzzz : Symbol(bazzzz, Decl(parameterInitializersForwardReferencing1.ts, 38, 3))
99+
>bazzzz : Symbol(bazzzz, Decl(parameterInitializersForwardReferencing1.ts, 40, 7))
100100

101101
var bazzzz = 1;
102102
>bazzzz : Symbol(bazzzz, Decl(parameterInitializersForwardReferencing1.ts, 40, 7))

tests/baselines/reference/parameterInitializersForwardReferencing1.types

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,20 @@ function f1 (bar = foo) { // unexpected compiler error; works at runtime
1717
}
1818

1919
function f2 (bar = (baz = foo) => baz) { // unexpected compiler error; works at runtime
20-
>f2 : (bar?: (baz?: string) => string) => string
21-
>bar : (baz?: string) => string
22-
>(baz = foo) => baz : (baz?: string) => string
23-
>baz : string
24-
>foo : string
25-
>baz : string
20+
>f2 : (bar?: (baz?: number) => number) => number
21+
>bar : (baz?: number) => number
22+
>(baz = foo) => baz : (baz?: number) => number
23+
>baz : number
24+
>foo : number
25+
>baz : number
2626

2727
var foo: number = 2;
2828
>foo : number
2929
>2 : 2
3030

3131
return bar(); // returns 1
32-
>bar() : string
33-
>bar : (baz?: string) => string
32+
>bar() : number
33+
>bar : (baz?: number) => number
3434
}
3535

3636
function f3 (bar = foo, foo = 2) { // correct compiler error, error at runtime

0 commit comments

Comments
 (0)