add dot operator for member access

main
anna 2 years ago
parent d9df6df402
commit bdb5f9ad4b
Signed by: fef
GPG Key ID: EC22E476DC2D3D84

@ -570,6 +570,16 @@ impl Parser {
index: Box::new(index),
})
}
token::Kind::Dot => {
// member access
self.lexer.next();
let member = self.lexer.expect_kind(token::Kind::Ident)?;
self.parse_primary_expr_rest(tree::Node::BinaryExpr {
op: Operator::Dot,
lhs: Box::new(start),
rhs: Box::new(tree::Node::Ident(member.raw)),
})
}
_ => Ok(start),
}
} else {

@ -74,6 +74,7 @@ pub enum Node {
#[derive(Debug, PartialEq)]
pub enum Operator {
Dot,
Eq,
EqEq,
Bang,
@ -284,6 +285,7 @@ impl Operator {
pub fn raw(&self) -> &'static str {
match self {
Operator::Dot => ".",
Operator::Eq => "=",
Operator::EqEq => "==",
Operator::BangEq => "!=",

@ -79,6 +79,7 @@ impl Iterator for Lexer {
']' => self.token_ok(token::Kind::CBracket),
'(' => self.token_ok(token::Kind::OParen),
')' => self.token_ok(token::Kind::CParen),
'.' => self.token_ok(token::Kind::Dot),
'=' if self.skip_if_match("=") => self.token_ok(token::Kind::EqEq),
'=' => self.token_ok(token::Kind::Eq),

@ -33,6 +33,7 @@ pub enum Kind {
CParen,
Comma,
Semi,
Dot,
Eq,
EqEq,
@ -183,6 +184,7 @@ impl fmt::Display for Kind {
Kind::CParen => "cparen",
Kind::Comma => "comma",
Kind::Semi => "semi",
Kind::Dot => "dot",
Kind::Eq => "eq",
Kind::EqEq => "eqeq",

Loading…
Cancel
Save