Browse Source

feat: struct field access on function calls

structs
Garrit Franke 3 years ago
parent
commit
27b1ee1ef1
  1. 7
      src/parser/rules.rs
  2. 5
      tests/structs.sb

7
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<Statement, String> {
@ -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,

5
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()
}
Loading…
Cancel
Save