aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/compiler.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/compiler.rs b/src/compiler.rs
index b45d47e..47b8b84 100644
--- a/src/compiler.rs
+++ b/src/compiler.rs
@@ -1401,8 +1401,17 @@ impl Compiler {
}
fn parse_type(&mut self) -> Result<Type, ()> {
- match self.peek() {
+ let ty = self.parse_simple_type();
+ if self.peek() == Token::Questionmark {
+ self.eat();
+ ty.map(|x| Type::Union(vec![x, Type::Void]))
+ } else {
+ ty
+ }
+ }
+ fn parse_simple_type(&mut self) -> Result<Type, ()> {
+ match self.peek() {
Token::Fn => {
self.eat();
let mut params = Vec::new();