boolean () { SyntaxTreeBuilder.Marker expr = myBuilder.mark(); if (!parseStarExpression(true)) { myBuilder.error(message("PARSE.expected.expression")); expr.drop(); return false; } if (myBuilder.getTokenType() == PyTokenTypes.COMMA) { while (myBuilder.getTokenType() == PyTokenTypes.COMMA) { myBuilder.advanceLexer(); SyntaxTreeBuilder.Marker expr2 = myBuilder.mark(); if (!parseStarExpression(true)) { myBuilder.error(message("PARSE.expected.expression")); expr2.rollbackTo(); break; } expr2.drop(); } expr.done(PyElementTypes.TUPLE_EXPRESSION); } else { expr.drop(); } return true; }