void () { assertCurrentToken(PyTokenTypes.LPAR); final SyntaxTreeBuilder.Marker tuple = myBuilder.mark(); myBuilder.advanceLexer(); while (true) { if (myBuilder.getTokenType() == PyTokenTypes.IDENTIFIER) { final SyntaxTreeBuilder.Marker parameter = myBuilder.mark(); myBuilder.advanceLexer(); parameter.done(PyElementTypes.NAMED_PARAMETER); } else if (myBuilder.getTokenType() == PyTokenTypes.LPAR) { parseParameterSubList(); } if (myBuilder.getTokenType() == PyTokenTypes.RPAR) { myBuilder.advanceLexer(); break; } if (myBuilder.getTokenType() != PyTokenTypes.COMMA) { myBuilder.error(message("PARSE.expected.comma.lpar.rpar")); break; } myBuilder.advanceLexer(); } if (myBuilder.getTokenType() == PyTokenTypes.EQ) { myBuilder.advanceLexer(); getExpressionParser().parseSingleExpression(false); } tuple.done(PyElementTypes.TUPLE_PARAMETER); }