Parse field accesses

This commit is contained in:
Sofia 2026-04-15 20:04:07 +03:00
parent a12cf52c48
commit 21d17bb02d

View File

@ -250,7 +250,7 @@ namespace parsing {
} }
auto plain_expr = parse_plain_expression(inner, scope); auto plain_expr = parse_plain_expression(inner, scope);
while (inner.peek().content == "(" || inner.peek().content == "[") { while (inner.peek().content == "(" || inner.peek().content == "[" || inner.peek().content == ".") {
if (inner.peek().content == "(") { if (inner.peek().content == "(") {
inner.next(); inner.next();
@ -273,6 +273,14 @@ namespace parsing {
before_meta + inner.metadata(), plain_expr.unwrap(), *postfix.unwrap() }; before_meta + inner.metadata(), plain_expr.unwrap(), *postfix.unwrap() };
plain_expr = std::unique_ptr<AST::Expression>{ idx_expr }; plain_expr = std::unique_ptr<AST::Expression>{ idx_expr };
} }
else if (inner.peek().content == ".") {
inner.next();
std::string field_name = inner.expect(token::Type::Ident).content;
plain_expr = std::unique_ptr<AST::Expression>{
new AST::FieldAccessExpression{before_meta + inner.metadata(), plain_expr.unwrap(), field_name}
};
}
} }