in src/Parser.php [282:327]
private function isListTerminator(int $parseContext) {
$tokenKind = $this->getCurrentToken()->kind;
if ($tokenKind === TokenKind::EndOfFileToken) {
// Being at the end of the file ends all lists.
return true;
}
switch ($parseContext) {
case ParseContext::SourceElements:
return false;
case ParseContext::InterfaceMembers:
case ParseContext::ClassMembers:
case ParseContext::BlockStatements:
case ParseContext::TraitMembers:
case ParseContext::EnumMembers:
return $tokenKind === TokenKind::CloseBraceToken;
case ParseContext::SwitchStatementElements:
return $tokenKind === TokenKind::CloseBraceToken || $tokenKind === TokenKind::EndSwitchKeyword;
case ParseContext::IfClause2Elements:
return
$tokenKind === TokenKind::ElseIfKeyword ||
$tokenKind === TokenKind::ElseKeyword ||
$tokenKind === TokenKind::EndIfKeyword;
case ParseContext::WhileStatementElements:
return $tokenKind === TokenKind::EndWhileKeyword;
case ParseContext::CaseStatementElements:
return
$tokenKind === TokenKind::CaseKeyword ||
$tokenKind === TokenKind::DefaultKeyword;
case ParseContext::ForStatementElements:
return
$tokenKind === TokenKind::EndForKeyword;
case ParseContext::ForeachStatementElements:
return $tokenKind === TokenKind::EndForEachKeyword;
case ParseContext::DeclareStatementElements:
return $tokenKind === TokenKind::EndDeclareKeyword;
}
// TODO warn about unhandled parse context
return false;
}