diff --git a/src/parser/rules.rs b/src/parser/rules.rs index e5d14f1..ce5df54 100644 --- a/src/parser/rules.rs +++ b/src/parser/rules.rs @@ -247,7 +247,11 @@ impl Parser { } self.match_token(TokenKind::BraceClose)?; - Ok(Expression::FunctionCall(name, args)) + let expr = Expression::FunctionCall(name, args); + match self.peek()?.kind { + TokenKind::Dot => self.parse_field_access(expr), + _ => Ok(expr) + } } fn parse_return(&mut self) -> Result { @@ -310,7 +314,6 @@ impl Parser { TokenKind::Dot => { let lhs = Expression::Variable(val); let expr = self.parse_field_access(lhs)?; - dbg!(&expr); match BinOp::try_from(self.peek()?.kind) { Ok(_) => self.parse_bin_op(Some(expr))?, Err(_) => expr, diff --git a/tests/structs.sb b/tests/structs.sb index cbaac73..c9082c7 100644 --- a/tests/structs.sb +++ b/tests/structs.sb @@ -38,8 +38,13 @@ fn test_field_access_in_function_call() { assert(user.username == "Bar") } +fn test_field_access_on_function() { + assert(user_stub().first_name == "Foo") +} + fn main() { test_initialization() test_simple_field_access() test_field_access_in_function_call() + test_field_access_on_function() } \ No newline at end of file