if behaviour.is_none() { returnErr("Expected '=', '->' or '<-' after the parameter name".into()); }
letbhv: Behaviour = match behaviour.unwrap() { BinaryOp::Assign => Behaviour::Copy, BinaryOp::Ref => Behaviour::Ref, BinaryOp::Move => Behaviour::Move, _ => returnErr("Expected '=', '->' or '<-' after the parameter name".into()), };
letty = self.parse_ident()?;
(param_name.content, bhv, ty.content) };
params.push(param); }
self.eat(); // eat ')'.
ifself.lookahead().kind != TokenKind::LeftBrace { returnErr("Expected a block as function body after function signature.".into()); }
self.eat(); // eat '{'.
ifletOk(Statement::Block(body)) = self.parse_block() { Ok(Statement::FuncDecl { ident: name.content, params, body, }) } else { Err("Expected a block as function body after function signature.".into()) } }
差不多就是这样。
然后,测试用的代码:
1 2 3
fn function(a <- int32, b <- int32) { return a + b; }