From 038f665171ffe59c2a483b4ef52c1390fb27ebbf Mon Sep 17 00:00:00 2001 From: Wenlu Wang Date: Thu, 30 Aug 2018 23:48:49 +0800 Subject: [PATCH] fix lookup regression again (#26762) * fix lookup regression again * add test case --- src/compiler/checker.ts | 2 +- ...meterInitializersForwardReferencing1.errors.txt | 2 ++ .../parameterInitializersForwardReferencing1.js | 5 +++++ ...arameterInitializersForwardReferencing1.symbols | 6 ++++++ .../parameterInitializersForwardReferencing1.types | 6 ++++++ ...rInitializersForwardReferencing1_es6.errors.txt | 2 ++ ...parameterInitializersForwardReferencing1_es6.js | 3 +++ ...eterInitializersForwardReferencing1_es6.symbols | 8 +++++++- ...ameterInitializersForwardReferencing1_es6.types | 14 ++++++++++---- .../parameterInitializersForwardReferencing1.ts | 2 ++ ...parameterInitializersForwardReferencing1_es6.ts | 2 ++ 11 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2ae4682b919..394a5a581cb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1212,7 +1212,7 @@ namespace ts { } if (meaning & SymbolFlags.Value && result.flags & SymbolFlags.Variable) { // expression inside parameter will lookup as normal variable scope when targeting es2015+ - if (compilerOptions.target && compilerOptions.target >= ScriptTarget.ES2015 && isParameter(lastLocation) && !isParameterPropertyDeclaration(lastLocation) && result.valueDeclaration !== lastLocation) { + if (compilerOptions.target && compilerOptions.target >= ScriptTarget.ES2015 && isParameter(lastLocation) && !isParameterPropertyDeclaration(lastLocation) && result.valueDeclaration.pos > lastLocation.end) { useResult = false; } else if (result.flags & SymbolFlags.FunctionScopedVariable) { diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt b/tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt index 94f4175f5e5..73f4f27d08b 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt @@ -55,4 +55,6 @@ tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(29 class Foo { constructor(public x = 12, public y = x) {} } + + function f8(foo1: string, bar = foo1) { } \ No newline at end of file diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1.js b/tests/baselines/reference/parameterInitializersForwardReferencing1.js index bb3a4c87e69..bd2b62e4216 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1.js +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1.js @@ -34,6 +34,8 @@ function f7({[foo]: bar}: any[]) { class Foo { constructor(public x = 12, public y = x) {} } + +function f8(foo1: string, bar = foo1) { } //// [parameterInitializersForwardReferencing1.js] @@ -81,3 +83,6 @@ var Foo = /** @class */ (function () { } return Foo; }()); +function f8(foo1, bar) { + if (bar === void 0) { bar = foo1; } +} diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1.symbols b/tests/baselines/reference/parameterInitializersForwardReferencing1.symbols index 10f94a2bd64..74b00fe04b8 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1.symbols +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1.symbols @@ -84,3 +84,9 @@ class Foo { >x : Symbol(x, Decl(parameterInitializersForwardReferencing1.ts, 33, 16)) } +function f8(foo1: string, bar = foo1) { } +>f8 : Symbol(f8, Decl(parameterInitializersForwardReferencing1.ts, 34, 1)) +>foo1 : Symbol(foo1, Decl(parameterInitializersForwardReferencing1.ts, 36, 12)) +>bar : Symbol(bar, Decl(parameterInitializersForwardReferencing1.ts, 36, 25)) +>foo1 : Symbol(foo1, Decl(parameterInitializersForwardReferencing1.ts, 36, 12)) + diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1.types b/tests/baselines/reference/parameterInitializersForwardReferencing1.types index d6eee6a9c30..2b80bfe87e0 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1.types +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1.types @@ -92,3 +92,9 @@ class Foo { >x : number } +function f8(foo1: string, bar = foo1) { } +>f8 : (foo1: string, bar?: string) => void +>foo1 : string +>bar : string +>foo1 : string + diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.errors.txt b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.errors.txt index d84519e406e..90390fbe3a4 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.errors.txt +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.errors.txt @@ -42,4 +42,6 @@ tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.t class Foo { constructor(public x = 12, public y = x) {} } + + function f8(foo1: string, bar = foo1) { } \ No newline at end of file diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.js b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.js index a5b00cfeb44..ecabb8ceba9 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.js +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.js @@ -34,6 +34,8 @@ function f7({[foo]: bar}: any[]) { class Foo { constructor(public x = 12, public y = x) {} } + +function f8(foo1: string, bar = foo1) { } //// [parameterInitializersForwardReferencing1_es6.js] @@ -67,3 +69,4 @@ class Foo { this.y = y; } } +function f8(foo1, bar = foo1) { } diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.symbols b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.symbols index 3d678a021ba..c0d42ab8b11 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.symbols +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.symbols @@ -42,7 +42,7 @@ function f4 (foo, bar = foo) { >f4 : Symbol(f4, Decl(parameterInitializersForwardReferencing1_es6.ts, 14, 1)) >foo : Symbol(foo, Decl(parameterInitializersForwardReferencing1_es6.ts, 16, 13)) >bar : Symbol(bar, Decl(parameterInitializersForwardReferencing1_es6.ts, 16, 17)) ->foo : Symbol(foo, Decl(parameterInitializersForwardReferencing1_es6.ts, 0, 3)) +>foo : Symbol(foo, Decl(parameterInitializersForwardReferencing1_es6.ts, 16, 13)) return bar >bar : Symbol(bar, Decl(parameterInitializersForwardReferencing1_es6.ts, 16, 17)) @@ -84,3 +84,9 @@ class Foo { >x : Symbol(x, Decl(parameterInitializersForwardReferencing1_es6.ts, 33, 16)) } +function f8(foo1: string, bar = foo1) { } +>f8 : Symbol(f8, Decl(parameterInitializersForwardReferencing1_es6.ts, 34, 1)) +>foo1 : Symbol(foo1, Decl(parameterInitializersForwardReferencing1_es6.ts, 36, 12)) +>bar : Symbol(bar, Decl(parameterInitializersForwardReferencing1_es6.ts, 36, 25)) +>foo1 : Symbol(foo1, Decl(parameterInitializersForwardReferencing1_es6.ts, 36, 12)) + diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.types b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.types index ca8ae55557e..009ec47ddb8 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.types +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.types @@ -45,13 +45,13 @@ function f3 (bar = foo, foo = 2) { // correct compiler error, error at runtime } function f4 (foo, bar = foo) { ->f4 : (foo: any, bar?: string) => string +>f4 : (foo: any, bar?: any) => any +>foo : any +>bar : any >foo : any ->bar : string ->foo : string return bar ->bar : string +>bar : any } function f5 (a = a) { @@ -92,3 +92,9 @@ class Foo { >x : number } +function f8(foo1: string, bar = foo1) { } +>f8 : (foo1: string, bar?: string) => void +>foo1 : string +>bar : string +>foo1 : string + diff --git a/tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts b/tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts index cf667840f20..a3b88150f4f 100644 --- a/tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts +++ b/tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts @@ -33,3 +33,5 @@ function f7({[foo]: bar}: any[]) { class Foo { constructor(public x = 12, public y = x) {} } + +function f8(foo1: string, bar = foo1) { } diff --git a/tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.ts b/tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.ts index 5643ea2cc0a..f83eb2dd34e 100644 --- a/tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.ts +++ b/tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.ts @@ -35,3 +35,5 @@ function f7({[foo]: bar}: any[]) { class Foo { constructor(public x = 12, public y = x) {} } + +function f8(foo1: string, bar = foo1) { }