|
103 | 103 | Call: 16,
|
104 | 104 | New: 17,
|
105 | 105 | TaggedTemplate: 18,
|
106 |
| - OptionalMember: 19, |
107 |
| - Member: 20, |
108 |
| - Primary: 21 |
| 106 | + Member: 19, |
| 107 | + Primary: 20 |
109 | 108 | };
|
110 | 109 |
|
111 | 110 | BinaryPrecedence = {
|
|
1899 | 1898 | },
|
1900 | 1899 |
|
1901 | 1900 | CallExpression: function (expr, precedence, flags) {
|
1902 |
| - var result, i, iz; |
1903 |
| - // F_ALLOW_UNPARATH_NEW becomes false. |
1904 |
| - result = [this.generateExpression(expr.callee, Precedence.Call, E_TTF)]; |
| 1901 | + var result, |
| 1902 | + i, |
| 1903 | + iz, |
| 1904 | + exprCalleeFlags = E_TTF; |
| 1905 | + |
| 1906 | + if (expr.callee.type === 'ChainExpression' && expr.callee.expression.optional) { |
| 1907 | + // F_ALLOW_UNPARATH_NEW becomes false. |
| 1908 | + result = [this.generateExpression(expr.callee, Precedence.Member, exprCalleeFlags)]; |
| 1909 | + } else { |
| 1910 | + // F_ALLOW_UNPARATH_NEW becomes false. |
| 1911 | + result = [this.generateExpression(expr.callee, Precedence.Call, exprCalleeFlags)]; |
| 1912 | + } |
1905 | 1913 |
|
1906 | 1914 | if (expr.optional) {
|
1907 | 1915 | result.push('?.');
|
|
1919 | 1927 | if (!(flags & F_ALLOW_CALL)) {
|
1920 | 1928 | return ['(', result, ')'];
|
1921 | 1929 | }
|
| 1930 | + |
1922 | 1931 | return parenthesize(result, Precedence.Call, precedence);
|
1923 | 1932 | },
|
1924 | 1933 |
|
|
1956 | 1965 | },
|
1957 | 1966 |
|
1958 | 1967 | MemberExpression: function (expr, precedence, flags) {
|
1959 |
| - var result, fragment; |
| 1968 | + var result, |
| 1969 | + fragment, |
| 1970 | + exprObjectFlags = (flags & F_ALLOW_CALL) ? E_TTF : E_TFF; |
1960 | 1971 |
|
1961 | 1972 | if (expr.object.type === 'ChainExpression' && expr.object.expression.optional) {
|
1962 | 1973 | // F_ALLOW_UNPARATH_NEW becomes false.
|
1963 |
| - result = [this.generateExpression(expr.object, Precedence.Member, (flags & F_ALLOW_CALL) ? E_TTF : E_TFF)]; |
| 1974 | + result = [this.generateExpression(expr.object, Precedence.Member, exprObjectFlags)]; |
1964 | 1975 | } else {
|
1965 | 1976 | // F_ALLOW_UNPARATH_NEW becomes false.
|
1966 |
| - result = [this.generateExpression(expr.object, Precedence.Call, (flags & F_ALLOW_CALL) ? E_TTF : E_TFF)]; |
| 1977 | + result = [this.generateExpression(expr.object, Precedence.Call, exprObjectFlags)]; |
1967 | 1978 | }
|
1968 | 1979 |
|
1969 | 1980 | if (expr.computed) {
|
|
1975 | 1986 | result.push(this.generateExpression(expr.property, Precedence.Sequence, flags & F_ALLOW_CALL ? E_TTT : E_TFT));
|
1976 | 1987 | result.push(']');
|
1977 | 1988 | } else {
|
1978 |
| - if (expr.object.type === Syntax.Literal && typeof expr.object.value === 'number') { |
| 1989 | + if (!expr.optional && expr.object.type === Syntax.Literal && typeof expr.object.value === 'number') { |
1979 | 1990 | fragment = toSourceNodeWhenNeeded(result).toString();
|
1980 | 1991 | // When the following conditions are all true,
|
1981 | 1992 | // 1. No floating point
|
|
1997 | 2008 | }
|
1998 | 2009 |
|
1999 | 2010 | if (precedence === Precedence.Member) {
|
2000 |
| - return parenthesize(result, Precedence.OptionalMember, precedence); |
| 2011 | + return parenthesize(result, Precedence.Call, precedence); |
2001 | 2012 | }
|
2002 | 2013 |
|
2003 | 2014 | return parenthesize(result, Precedence.Member, precedence);
|
|
0 commit comments