parser: Mockup type-expression syntax

- Allow `name: Type` notation for parameters
- Allow `fn x() -> RetVal` notation for return values
- TODO: Create syntax for type-expressions/paths
This commit is contained in:
John 2023-10-30 00:07:27 -05:00
parent 374017d5e3
commit c1c834701a
2 changed files with 6 additions and 2 deletions

View File

@ -2,7 +2,7 @@
// This is a function. It can be called with the call operator.
// The function called `main` is the program's entrypoint
fn main() {
fn main() -> (&str, bool, i128) {
// An if expression is like the ternary conditional operator in C
let y = if 10 < 50 {
"\u{1f988}"

View File

@ -393,7 +393,7 @@ impl Parser {
self.consume_type(Type::LParen)?;
let args = self.params()?;
self.consume_type(Type::RParen)?;
// Discard return type, for now
// TODO: Parse type-expressions and store return types in the AST
if self.consume_type(Type::Arrow).is_ok() {
self.expr()?;
}
@ -404,6 +404,10 @@ impl Parser {
let mut args = vec![];
while let Ok(ident) = self.identifier() {
args.push(ident);
if self.consume_type(Type::Colon).is_ok() {
// TODO: Parse type-expressions and make this mandatory
self.expr()?;
}
if self.consume_type(Type::Comma).is_err() {
break;
}