Skip to content

Commit de81520

Browse files
committed
update emitter and more testcase
1 parent 9e3852e commit de81520

15 files changed

+105
-59
lines changed

src/compiler/transformers/esnext.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,17 @@ namespace ts {
3232

3333
function createNotNullCondition(node: Expression) {
3434
return createBinary(
35-
node,
36-
SyntaxKind.ExclamationEqualsToken,
37-
createNull()
35+
createBinary(
36+
node,
37+
createToken(SyntaxKind.ExclamationEqualsEqualsToken),
38+
createNull()
39+
),
40+
createToken(SyntaxKind.AmpersandAmpersandToken),
41+
createBinary(
42+
node,
43+
createToken(SyntaxKind.ExclamationEqualsEqualsToken),
44+
createVoidZero()
45+
)
3846
);
3947
}
4048

tests/baselines/reference/nullishCoalescingOperator1.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,19 @@ const dd4 = d4 ?? {b: 1};
4242

4343
//// [nullishCoalescingOperator1.js]
4444
"use strict";
45-
var aa1 = (a1 != null ? a1 : 'whatever');
46-
var aa2 = (a2 != null ? a2 : 'whatever');
47-
var aa3 = (a3 != null ? a3 : 'whatever');
48-
var aa4 = (a4 != null ? a4 : 'whatever');
49-
var bb1 = (b1 != null ? b1 : 1);
50-
var bb2 = (b2 != null ? b2 : 1);
51-
var bb3 = (b3 != null ? b3 : 1);
52-
var bb4 = (b4 != null ? b4 : 1);
53-
var cc1 = (c1 != null ? c1 : true);
54-
var cc2 = (c2 != null ? c2 : true);
55-
var cc3 = (c3 != null ? c3 : true);
56-
var cc4 = (c4 != null ? c4 : true);
57-
var dd1 = (d1 != null ? d1 : { b: 1 });
58-
var dd2 = (d2 != null ? d2 : { b: 1 });
59-
var dd3 = (d3 != null ? d3 : { b: 1 });
60-
var dd4 = (d4 != null ? d4 : { b: 1 });
45+
var aa1 = (a1 !== null && a1 !== void 0 ? a1 : 'whatever');
46+
var aa2 = (a2 !== null && a2 !== void 0 ? a2 : 'whatever');
47+
var aa3 = (a3 !== null && a3 !== void 0 ? a3 : 'whatever');
48+
var aa4 = (a4 !== null && a4 !== void 0 ? a4 : 'whatever');
49+
var bb1 = (b1 !== null && b1 !== void 0 ? b1 : 1);
50+
var bb2 = (b2 !== null && b2 !== void 0 ? b2 : 1);
51+
var bb3 = (b3 !== null && b3 !== void 0 ? b3 : 1);
52+
var bb4 = (b4 !== null && b4 !== void 0 ? b4 : 1);
53+
var cc1 = (c1 !== null && c1 !== void 0 ? c1 : true);
54+
var cc2 = (c2 !== null && c2 !== void 0 ? c2 : true);
55+
var cc3 = (c3 !== null && c3 !== void 0 ? c3 : true);
56+
var cc4 = (c4 !== null && c4 !== void 0 ? c4 : true);
57+
var dd1 = (d1 !== null && d1 !== void 0 ? d1 : { b: 1 });
58+
var dd2 = (d2 !== null && d2 !== void 0 ? d2 : { b: 1 });
59+
var dd3 = (d3 !== null && d3 !== void 0 ? d3 : { b: 1 });
60+
var dd4 = (d4 !== null && d4 !== void 0 ? d4 : { b: 1 });
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [nullishCoalescingOperator10.ts]
2+
declare function f(): string | undefined;
3+
4+
let gg = f() ?? 'foo'
5+
6+
7+
8+
//// [nullishCoalescingOperator10.js]
9+
"use strict";
10+
var _a;
11+
var gg = (_a = f(), (_a !== null && _a !== void 0 ? _a : 'foo'));
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
=== tests/cases/conformance/expressions/nullishCoalescingOperator/nullishCoalescingOperator10.ts ===
2+
declare function f(): string | undefined;
3+
>f : Symbol(f, Decl(nullishCoalescingOperator10.ts, 0, 0))
4+
5+
let gg = f() ?? 'foo'
6+
>gg : Symbol(gg, Decl(nullishCoalescingOperator10.ts, 2, 3))
7+
>f : Symbol(f, Decl(nullishCoalescingOperator10.ts, 0, 0))
8+
9+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/conformance/expressions/nullishCoalescingOperator/nullishCoalescingOperator10.ts ===
2+
declare function f(): string | undefined;
3+
>f : () => string | undefined
4+
5+
let gg = f() ?? 'foo'
6+
>gg : string
7+
>f() ?? 'foo' : string
8+
>f() : string | undefined
9+
>f : () => string | undefined
10+
>'foo' : "foo"
11+
12+

tests/baselines/reference/nullishCoalescingOperator2.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ const aa9 = a9 ?? 'whatever'
2222

2323
//// [nullishCoalescingOperator2.js]
2424
"use strict";
25-
var aa1 = (a1 != null ? a1 : 'whatever');
26-
var aa2 = (a2 != null ? a2 : 'whatever');
27-
var aa3 = (a3 != null ? a3 : 'whatever');
28-
var aa4 = (a4 != null ? a4 : 'whatever');
29-
var aa5 = (a5 != null ? a5 : 'whatever');
30-
var aa6 = (a6 != null ? a6 : 'whatever');
31-
var aa7 = (a7 != null ? a7 : 'whatever');
32-
var aa8 = (a8 != null ? a8 : 'whatever');
33-
var aa9 = (a9 != null ? a9 : 'whatever');
25+
var aa1 = (a1 !== null && a1 !== void 0 ? a1 : 'whatever');
26+
var aa2 = (a2 !== null && a2 !== void 0 ? a2 : 'whatever');
27+
var aa3 = (a3 !== null && a3 !== void 0 ? a3 : 'whatever');
28+
var aa4 = (a4 !== null && a4 !== void 0 ? a4 : 'whatever');
29+
var aa5 = (a5 !== null && a5 !== void 0 ? a5 : 'whatever');
30+
var aa6 = (a6 !== null && a6 !== void 0 ? a6 : 'whatever');
31+
var aa7 = (a7 !== null && a7 !== void 0 ? a7 : 'whatever');
32+
var aa8 = (a8 !== null && a8 !== void 0 ? a8 : 'whatever');
33+
var aa9 = (a9 !== null && a9 !== void 0 ? a9 : 'whatever');

tests/baselines/reference/nullishCoalescingOperator3.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ const aa1 = a1 ?? a2 ?? a3 ?? a4 ?? a5 ?? a6 ?? 'whatever'
1313
//// [nullishCoalescingOperator3.js]
1414
"use strict";
1515
var _a, _b, _c, _d, _e;
16-
var aa1 = (_e = (_d = (_c = (_b = (_a = (a1 != null ? a1 : a2), (_a != null ? _a : a3)), (_b != null ? _b : a4)), (_c != null ? _c : a5)), (_d != null ? _d : a6)), (_e != null ? _e : 'whatever'));
16+
var aa1 = (_e = (_d = (_c = (_b = (_a = (a1 !== null && a1 !== void 0 ? a1 : a2), (_a !== null && _a !== void 0 ? _a : a3)), (_b !== null && _b !== void 0 ? _b : a4)), (_c !== null && _c !== void 0 ? _c : a5)), (_d !== null && _d !== void 0 ? _d : a6)), (_e !== null && _e !== void 0 ? _e : 'whatever'));

tests/baselines/reference/nullishCoalescingOperator4.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ const aa2 = a1 || a1.toLocaleUpperCase()
66

77
//// [nullishCoalescingOperator4.js]
88
"use strict";
9-
var aa1 = (a1 != null ? a1 : a1.toLowerCase());
9+
var aa1 = (a1 !== null && a1 !== void 0 ? a1 : a1.toLowerCase());
1010
var aa2 = a1 || a1.toLocaleUpperCase();

tests/baselines/reference/nullishCoalescingOperator5.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,26 +44,26 @@ a && (b ?? c);
4444
"use strict";
4545
var _a, _b, _c, _d;
4646
// should be a syntax error
47-
(a != null ? a : b || c);
47+
(a !== null && a !== void 0 ? a : b || c);
4848
// should be a syntax error
49-
_a = a || b, (_a != null ? _a : c);
49+
_a = a || b, (_a !== null && _a !== void 0 ? _a : c);
5050
// should be a syntax error
51-
(a != null ? a : b && c);
51+
(a !== null && a !== void 0 ? a : b && c);
5252
// should be a syntax error
53-
_b = a && b, (_b != null ? _b : c);
53+
_b = a && b, (_b !== null && _b !== void 0 ? _b : c);
5454
// Valid according to spec
55-
(a != null ? a : (b || c));
55+
(a !== null && a !== void 0 ? a : (b || c));
5656
// Valid according to spec
57-
((a != null ? a : b)) || c;
57+
((a !== null && a !== void 0 ? a : b)) || c;
5858
// Valid according to spec
59-
_c = (a || b), (_c != null ? _c : c);
59+
_c = (a || b), (_c !== null && _c !== void 0 ? _c : c);
6060
// Valid according to spec
61-
a || ((b != null ? b : c));
61+
a || ((b !== null && b !== void 0 ? b : c));
6262
// Valid according to spec
63-
(a != null ? a : (b && c));
63+
(a !== null && a !== void 0 ? a : (b && c));
6464
// Valid according to spec
65-
((a != null ? a : b)) && c;
65+
((a !== null && a !== void 0 ? a : b)) && c;
6666
// Valid according to spec
67-
_d = (a && b), (_d != null ? _d : c);
67+
_d = (a && b), (_d !== null && _d !== void 0 ? _d : c);
6868
// Valid according to spec
69-
a && ((b != null ? b : c));
69+
a && ((b !== null && b !== void 0 ? b : c));

tests/baselines/reference/nullishCoalescingOperator6.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ function foo(foo: string, bar = foo ?? "bar") { }
55
//// [nullishCoalescingOperator6.js]
66
"use strict";
77
function foo(foo, bar) {
8-
if (bar === void 0) { bar = (foo != null ? foo : "bar"); }
8+
if (bar === void 0) { bar = (foo !== null && foo !== void 0 ? foo : "bar"); }
99
}

tests/baselines/reference/nullishCoalescingOperator7.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ function f () {
1515
//// [nullishCoalescingOperator7.js]
1616
"use strict";
1717
var foo1 = a ? 1 : 2;
18-
var foo2 = (a != null ? a : 'foo') ? 1 : 2;
19-
var foo3 = (a != null ? a : 'foo') ? ((b != null ? b : 'bar')) : ((c != null ? c : 'baz'));
18+
var foo2 = (a !== null && a !== void 0 ? a : 'foo') ? 1 : 2;
19+
var foo3 = (a !== null && a !== void 0 ? a : 'foo') ? ((b !== null && b !== void 0 ? b : 'bar')) : ((c !== null && c !== void 0 ? c : 'baz'));
2020
function f() {
21-
var foo4 = (a != null ? a : 'foo') ? (b != null ? b : 'bar') : (c != null ? c : 'baz');
21+
var foo4 = (a !== null && a !== void 0 ? a : 'foo') ? (b !== null && b !== void 0 ? b : 'bar') : (c !== null && c !== void 0 ? c : 'baz');
2222
}

tests/baselines/reference/nullishCoalescingOperator8.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const n3 = a.m() ?? b.p ?? b.m() ?? "default";;
1010
//// [nullishCoalescingOperator8.js]
1111
"use strict";
1212
var _a, _b, _c, _d, _e;
13-
var n1 = (_a = a.p, (_a != null ? _a : "default"));
14-
var n2 = (_b = a.m(), (_b != null ? _b : "default"));
15-
var n3 = (_e = (_d = (_c = a.m(), (_c != null ? _c : b.p)), (_d != null ? _d : b.m())), (_e != null ? _e : "default"));
13+
var n1 = (_a = a.p, (_a !== null && _a !== void 0 ? _a : "default"));
14+
var n2 = (_b = a.m(), (_b !== null && _b !== void 0 ? _b : "default"));
15+
var n3 = (_e = (_d = (_c = a.m(), (_c !== null && _c !== void 0 ? _c : b.p)), (_d !== null && _d !== void 0 ? _d : b.m())), (_e !== null && _e !== void 0 ? _e : "default"));
1616
;

tests/baselines/reference/nullishCoalescingOperator9.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ let gg = f ?? (abc => { void abc.toLowerCase() })
88
//// [nullishCoalescingOperator9.js]
99
"use strict";
1010
var g = f || (function (abc) { void abc.toLowerCase(); });
11-
var gg = (f != null ? f : (function (abc) { void abc.toLowerCase(); }));
11+
var gg = (f !== null && f !== void 0 ? f : (function (abc) { void abc.toLowerCase(); }));

tests/baselines/reference/nullishCoalescingOperator_not_strict.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ const aa8 = a8 ?? 'whatever'
2121
const aa9 = a9 ?? 'whatever'
2222

2323
//// [nullishCoalescingOperator_not_strict.js]
24-
var aa1 = (a1 != null ? a1 : 'whatever');
25-
var aa2 = (a2 != null ? a2 : 'whatever');
26-
var aa3 = (a3 != null ? a3 : 'whatever');
27-
var aa4 = (a4 != null ? a4 : 'whatever');
28-
var aa5 = (a5 != null ? a5 : 'whatever');
29-
var aa6 = (a6 != null ? a6 : 'whatever');
30-
var aa7 = (a7 != null ? a7 : 'whatever');
31-
var aa8 = (a8 != null ? a8 : 'whatever');
32-
var aa9 = (a9 != null ? a9 : 'whatever');
24+
var aa1 = (a1 !== null && a1 !== void 0 ? a1 : 'whatever');
25+
var aa2 = (a2 !== null && a2 !== void 0 ? a2 : 'whatever');
26+
var aa3 = (a3 !== null && a3 !== void 0 ? a3 : 'whatever');
27+
var aa4 = (a4 !== null && a4 !== void 0 ? a4 : 'whatever');
28+
var aa5 = (a5 !== null && a5 !== void 0 ? a5 : 'whatever');
29+
var aa6 = (a6 !== null && a6 !== void 0 ? a6 : 'whatever');
30+
var aa7 = (a7 !== null && a7 !== void 0 ? a7 : 'whatever');
31+
var aa8 = (a8 !== null && a8 !== void 0 ? a8 : 'whatever');
32+
var aa9 = (a9 !== null && a9 !== void 0 ? a9 : 'whatever');
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// @strict: true
2+
3+
declare function f(): string | undefined;
4+
5+
let gg = f() ?? 'foo'
6+

0 commit comments

Comments
 (0)