diff --git a/dummy.cl b/dummy.cl index 351ff76..0e5b318 100644 --- a/dummy.cl +++ b/dummy.cl @@ -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}" diff --git a/libconlang/src/parser.rs b/libconlang/src/parser.rs index 09b0cfe..91a8b25 100644 --- a/libconlang/src/parser.rs +++ b/libconlang/src/parser.rs @@ -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; }