Skip to content

Commit e1edf4a

Browse files
Merge branch 'master' of https://github.com/Microsoft/TypeScript
2 parents 6565c4b + 82a940d commit e1edf4a

File tree

8 files changed

+113
-3
lines changed

8 files changed

+113
-3
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11072,7 +11072,7 @@ module ts {
1107211072

1107311073
var symbol = declarationSymbol ||
1107411074
getNodeLinks(n).resolvedSymbol ||
11075-
resolveName(n, n.text, SymbolFlags.BlockScopedVariable | SymbolFlags.Alias, /*nodeNotFoundMessage*/ undefined, /*nameArg*/ undefined);
11075+
resolveName(n, n.text, SymbolFlags.Value | SymbolFlags.Alias, /*nodeNotFoundMessage*/ undefined, /*nameArg*/ undefined);
1107611076

1107711077
var isLetOrConst =
1107811078
symbol &&

src/compiler/parser.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2975,6 +2975,12 @@ module ts {
29752975
return !scanner.hasPrecedingLineBreak() && isIdentifier()
29762976
}
29772977

2978+
function nextTokenIsIdentifierOrStartOfDestructuringOnTheSameLine() {
2979+
nextToken();
2980+
return !scanner.hasPrecedingLineBreak() &&
2981+
(isIdentifier() || token === SyntaxKind.OpenBraceToken || token === SyntaxKind.OpenBracketToken);
2982+
}
2983+
29782984
function parseYieldExpression(): YieldExpression {
29792985
var node = <YieldExpression>createNode(SyntaxKind.YieldExpression);
29802986

@@ -4873,9 +4879,9 @@ module ts {
48734879
}
48744880

48754881
function isLetDeclaration() {
4876-
// It is let declaration if in strict mode or next token is identifier on same line.
4882+
// It is let declaration if in strict mode or next token is identifier\open bracket\open curly on same line.
48774883
// otherwise it needs to be treated like identifier
4878-
return inStrictModeContext() || lookAhead(nextTokenIsIdentifierOnSameLine);
4884+
return inStrictModeContext() || lookAhead(nextTokenIsIdentifierOrStartOfDestructuringOnTheSameLine);
48794885
}
48804886

48814887
function isDeclarationStart(): boolean {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//// [letConstMatchingParameterNames.ts]
2+
let parent = true;
3+
const parent2 = true;
4+
declare function use(a: any);
5+
6+
function a() {
7+
8+
let parent = 1;
9+
const parent2 = 2;
10+
11+
function b(parent: string, parent2: number) {
12+
use(parent);
13+
use(parent2);
14+
}
15+
}
16+
17+
18+
//// [letConstMatchingParameterNames.js]
19+
var parent = true;
20+
var parent2 = true;
21+
function a() {
22+
var _parent = 1;
23+
var _parent2 = 2;
24+
function b(parent, parent2) {
25+
use(parent);
26+
use(parent2);
27+
}
28+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/compiler/letConstMatchingParameterNames.ts ===
2+
let parent = true;
3+
>parent : boolean
4+
5+
const parent2 = true;
6+
>parent2 : boolean
7+
8+
declare function use(a: any);
9+
>use : (a: any) => any
10+
>a : any
11+
12+
function a() {
13+
>a : () => void
14+
15+
let parent = 1;
16+
>parent : number
17+
18+
const parent2 = 2;
19+
>parent2 : number
20+
21+
function b(parent: string, parent2: number) {
22+
>b : (parent: string, parent2: number) => void
23+
>parent : string
24+
>parent2 : number
25+
26+
use(parent);
27+
>use(parent) : any
28+
>use : (a: any) => any
29+
>parent : string
30+
31+
use(parent2);
32+
>use(parent2) : any
33+
>use : (a: any) => any
34+
>parent2 : number
35+
}
36+
}
37+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [letInNonStrictMode.ts]
2+
let [x] = [1];
3+
let {a: y} = {a: 1};
4+
5+
//// [letInNonStrictMode.js]
6+
var x = ([
7+
1
8+
])[0];
9+
var y = ({
10+
a: 1
11+
}).a;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/compiler/letInNonStrictMode.ts ===
2+
let [x] = [1];
3+
>x : number
4+
>[1] : [number]
5+
6+
let {a: y} = {a: 1};
7+
>a : unknown
8+
>y : number
9+
>{a: 1} : { a: number; }
10+
>a : number
11+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @target: es5
2+
let parent = true;
3+
const parent2 = true;
4+
declare function use(a: any);
5+
6+
function a() {
7+
8+
let parent = 1;
9+
const parent2 = 2;
10+
11+
function b(parent: string, parent2: number) {
12+
use(parent);
13+
use(parent2);
14+
}
15+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
let [x] = [1];
2+
let {a: y} = {a: 1};

0 commit comments

Comments
 (0)