diff --git a/src/parsing.cpp b/src/parsing.cpp index 1c56f88..c98df24 100644 --- a/src/parsing.cpp +++ b/src/parsing.cpp @@ -250,7 +250,7 @@ namespace parsing { } 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 == "(") { inner.next(); @@ -273,6 +273,14 @@ namespace parsing { before_meta + inner.metadata(), plain_expr.unwrap(), *postfix.unwrap() }; plain_expr = std::unique_ptr{ idx_expr }; } + else if (inner.peek().content == ".") { + inner.next(); + std::string field_name = inner.expect(token::Type::Ident).content; + + plain_expr = std::unique_ptr{ + new AST::FieldAccessExpression{before_meta + inner.metadata(), plain_expr.unwrap(), field_name} + }; + } }