Skip to content

Commit 121f9a8

Browse files
author
sanex3339
committed
Nullish coalescing support
1 parent ab53cd5 commit 121f9a8

File tree

4 files changed

+55
-2
lines changed

4 files changed

+55
-2
lines changed

escodegen.js

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
Assignment: 1,
8686
Conditional: 2,
8787
ArrowFunction: 2,
88+
NullishCoalescing: 3,
8889
LogicalOR: 3,
8990
LogicalAND: 4,
9091
BitwiseOR: 5,
@@ -108,6 +109,7 @@
108109
};
109110

110111
BinaryPrecedence = {
112+
'??': Precedence.NullishCoalescing,
111113
'||': Precedence.LogicalOR,
112114
'&&': Precedence.LogicalAND,
113115
'|': Precedence.BitwiseOR,
@@ -1836,8 +1838,34 @@
18361838
BinaryExpression: function (expr, precedence, flags) {
18371839
var result, leftPrecedence, rightPrecedence, currentPrecedence, fragment, leftSource;
18381840
currentPrecedence = BinaryPrecedence[expr.operator];
1839-
leftPrecedence = expr.operator === '**' ? Precedence.Postfix : currentPrecedence;
1840-
rightPrecedence = expr.operator === '**' ? currentPrecedence : currentPrecedence + 1;
1841+
1842+
leftPrecedence = currentPrecedence;
1843+
rightPrecedence = currentPrecedence + 1;
1844+
1845+
switch (expr.operator) {
1846+
case '**':
1847+
leftPrecedence = Precedence.Postfix;
1848+
rightPrecedence = currentPrecedence;
1849+
break;
1850+
1851+
case '??':
1852+
if (expr.left.operator === '||' || expr.left.operator === '&&') {
1853+
leftPrecedence = BinaryPrecedence[expr.left.operator] + 1;
1854+
}
1855+
1856+
if (expr.right.operator === '||' || expr.right.operator === '&&') {
1857+
rightPrecedence = BinaryPrecedence[expr.right.operator] + 1;
1858+
}
1859+
1860+
break;
1861+
1862+
case '||':
1863+
if (expr.left.operator === '??') {
1864+
leftPrecedence = BinaryPrecedence[expr.left.operator] + 1;
1865+
}
1866+
1867+
break;
1868+
}
18411869

18421870
if (currentPrecedence < precedence) {
18431871
flags |= F_ALLOW_IN;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
a ?? b;
2+
a ?? b ?? c;
3+
a | b ?? c | d;
4+
a ?? b ? c : d;
5+
(a || b) ?? c;
6+
a || (b ?? c);
7+
(a && b) ?? c;
8+
a && (b ?? c);
9+
(a ?? b) || c;
10+
a ?? (b || c);
11+
(a ?? b) && c;
12+
a ?? (b && c);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a??b;a??b??c;a|b??c|d;a??b?c:d;(a||b)??c;a||(b??c);(a&&b)??c;a&&(b??c);(a??b)||c;a??(b||c);(a??b)&&c;a??(b&&c)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
a ?? b;
2+
a ?? b ?? c;
3+
a | b ?? c | d;
4+
a ?? b ? c : d;
5+
(a || b) ?? c;
6+
a || (b ?? c);
7+
(a && b) ?? c;
8+
a && (b ?? c);
9+
(a ?? b) || c;
10+
a ?? (b || c);
11+
(a ?? b) && c;
12+
a ?? (b && c);

0 commit comments

Comments
 (0)