boolean (boolean falseAsync) { if (!falseAsync) { assertCurrentToken(PyTokenTypes.ASYNC_KEYWORD); } final SyntaxTreeBuilder.Marker marker = myBuilder.mark(); advanceAsync(falseAsync); final IElementType token = myBuilder.getTokenType(); if (token == PyTokenTypes.DEF_KEYWORD) { getFunctionParser().parseFunctionDeclaration(marker, true); return true; } else if (token == PyTokenTypes.WITH_KEYWORD) { parseWithStatement(marker); return true; } else if (token == PyTokenTypes.FOR_KEYWORD) { parseForStatement(marker); return true; } else { if (falseAsync) { marker.rollbackTo(); } else { marker.drop(); myBuilder.error(PyParsingBundle.message("def.or.with.or.for.expected")); } return false; } }