()
| 1874 | // ('(' [yield_expr | testlist_comp] ')' |
| 1875 | // testlist_comp: (test | star_expr) (comp_for | (',' (test | star_expr))* [',']) |
| 1876 | private _parseTupleAtom(): ExpressionNode { |
| 1877 | let startParen = this._getNextToken(); |
| 1878 | assert.equal(startParen.type, TokenType.OpenParenthesis); |
| 1879 | |
| 1880 | let yieldExpr = this._tryParseYieldExpression(); |
| 1881 | if (yieldExpr) { |
| 1882 | if (this._peekTokenType() !== TokenType.CloseParenthesis) { |
| 1883 | return this._handleExpressionParseError('Expected ")"'); |
| 1884 | } else { |
| 1885 | yieldExpr.extend(this._getNextToken()); |
| 1886 | } |
| 1887 | |
| 1888 | return yieldExpr; |
| 1889 | } |
| 1890 | |
| 1891 | let exprListResult = this._parseTestListWithComprehension(); |
| 1892 | let tupleOrExpression = this._makeExpressionOrTuple(exprListResult); |
| 1893 | |
| 1894 | if (this._peekTokenType() !== TokenType.CloseParenthesis) { |
| 1895 | return this._handleExpressionParseError('Expected ")"'); |
| 1896 | } else { |
| 1897 | tupleOrExpression.extend(this._getNextToken()); |
| 1898 | } |
| 1899 | |
| 1900 | return tupleOrExpression; |
| 1901 | } |
| 1902 | |
| 1903 | // '[' [testlist_comp] ']' |
| 1904 | // testlist_comp: (test | star_expr) (comp_for | (',' (test | star_expr))* [',']) |
no test coverage detected