mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 22:02:52 +01:00
Parse self in expressions. (#2697)
`self` wasn't being handled in expression logic, only parameter logic. This is needed for `self.x`. Also renames SelfDeducedParameter to SelfIdentifier because it's parsed fairly consistently with Identifier; this better represents the situations where `self` will need to be handled, it's where `Identifier` is allowed (although `Identifier` could also refer to a type... but I still think `SelfDeducedParameter` is a more difficult to understand name).
This commit is contained in:
@@ -948,6 +948,11 @@ auto Parser::HandleExpressionInPostfixState() -> void {
|
||||
PushState(ParserState::ParenExpression);
|
||||
break;
|
||||
}
|
||||
case TokenKind::SelfParameter: {
|
||||
AddLeafNode(ParseNodeKind::SelfIdentifier, Consume());
|
||||
PushState(state);
|
||||
break;
|
||||
}
|
||||
case TokenKind::SelfType: {
|
||||
AddLeafNode(ParseNodeKind::SelfType, Consume());
|
||||
PushState(state);
|
||||
@@ -1494,7 +1499,7 @@ auto Parser::HandlePattern(PatternKind pattern_kind) -> void {
|
||||
AddLeafNode(ParseNodeKind::DeclaredName, *identifier);
|
||||
} else if (pattern_kind == PatternKind::DeducedParameter) {
|
||||
if (auto self = ConsumeIf(TokenKind::SelfParameter)) {
|
||||
AddLeafNode(ParseNodeKind::SelfDeducedParameter, *self);
|
||||
AddLeafNode(ParseNodeKind::SelfIdentifier, *self);
|
||||
} else {
|
||||
on_error();
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user