Skip to content

Commit a3e83be

Browse files
authored
fix(44466): Fixes parsing contextual keyword casts as arrow functions
Use all modifiers test
1 parent e8216af commit a3e83be

File tree

5 files changed

+112
-0
lines changed

5 files changed

+112
-0
lines changed

src/compiler/parser.ts

+4
Original file line numberDiff line numberDiff line change
@@ -4538,6 +4538,10 @@ namespace ts {
45384538
// isn't actually allowed, but we want to treat it as a lambda so we can provide
45394539
// a good error message.
45404540
if (isModifierKind(second) && second !== SyntaxKind.AsyncKeyword && lookAhead(nextTokenIsIdentifier)) {
4541+
if (lookAhead(() => nextToken() === SyntaxKind.AsKeyword)) {
4542+
// https://github.com/microsoft/TypeScript/issues/44466
4543+
return Tristate.False;
4544+
}
45414545
return Tristate.True;
45424546
}
45434547

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//// [modifierParenCast.ts]
2+
let readonly: any = undefined;
3+
let override: any = undefined;
4+
let out: any = undefined;
5+
let declare: any = undefined;
6+
7+
export const a = (readonly as number);
8+
export const b = (override as number);
9+
export const c = (out as number);
10+
export const d = (declare as number);
11+
12+
//// [modifierParenCast.js]
13+
"use strict";
14+
Object.defineProperty(exports, "__esModule", { value: true });
15+
exports.d = exports.c = exports.b = exports.a = void 0;
16+
var readonly = undefined;
17+
var override = undefined;
18+
var out = undefined;
19+
var declare = undefined;
20+
exports.a = readonly;
21+
exports.b = override;
22+
exports.c = out;
23+
exports.d = declare;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
=== tests/cases/compiler/modifierParenCast.ts ===
2+
let readonly: any = undefined;
3+
>readonly : Symbol(readonly, Decl(modifierParenCast.ts, 0, 3))
4+
>undefined : Symbol(undefined)
5+
6+
let override: any = undefined;
7+
>override : Symbol(override, Decl(modifierParenCast.ts, 1, 3))
8+
>undefined : Symbol(undefined)
9+
10+
let out: any = undefined;
11+
>out : Symbol(out, Decl(modifierParenCast.ts, 2, 3))
12+
>undefined : Symbol(undefined)
13+
14+
let declare: any = undefined;
15+
>declare : Symbol(declare, Decl(modifierParenCast.ts, 3, 3))
16+
>undefined : Symbol(undefined)
17+
18+
export const a = (readonly as number);
19+
>a : Symbol(a, Decl(modifierParenCast.ts, 5, 12))
20+
>readonly : Symbol(readonly, Decl(modifierParenCast.ts, 0, 3))
21+
22+
export const b = (override as number);
23+
>b : Symbol(b, Decl(modifierParenCast.ts, 6, 12))
24+
>override : Symbol(override, Decl(modifierParenCast.ts, 1, 3))
25+
26+
export const c = (out as number);
27+
>c : Symbol(c, Decl(modifierParenCast.ts, 7, 12))
28+
>out : Symbol(out, Decl(modifierParenCast.ts, 2, 3))
29+
30+
export const d = (declare as number);
31+
>d : Symbol(d, Decl(modifierParenCast.ts, 8, 12))
32+
>declare : Symbol(declare, Decl(modifierParenCast.ts, 3, 3))
33+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
=== tests/cases/compiler/modifierParenCast.ts ===
2+
let readonly: any = undefined;
3+
>readonly : any
4+
>undefined : undefined
5+
6+
let override: any = undefined;
7+
>override : any
8+
>undefined : undefined
9+
10+
let out: any = undefined;
11+
>out : any
12+
>undefined : undefined
13+
14+
let declare: any = undefined;
15+
>declare : any
16+
>undefined : undefined
17+
18+
export const a = (readonly as number);
19+
>a : number
20+
>(readonly as number) : number
21+
>readonly as number : number
22+
>readonly : any
23+
24+
export const b = (override as number);
25+
>b : number
26+
>(override as number) : number
27+
>override as number : number
28+
>override : any
29+
30+
export const c = (out as number);
31+
>c : number
32+
>(out as number) : number
33+
>out as number : number
34+
>out : any
35+
36+
export const d = (declare as number);
37+
>d : number
38+
>(declare as number) : number
39+
>declare as number : number
40+
>declare : any
41+
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//@target: ES5
2+
3+
let readonly: any = undefined;
4+
let override: any = undefined;
5+
let out: any = undefined;
6+
let declare: any = undefined;
7+
8+
export const a = (readonly as number);
9+
export const b = (override as number);
10+
export const c = (out as number);
11+
export const d = (declare as number);

0 commit comments

Comments
 (0)