aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler.rs
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-03-08 19:15:23 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-03-08 19:15:23 +0100
commitea6adb4ca98d5b272db010ca4de87210abf4b49e (patch)
tree4b437629f2c28dd42844931d72d754780c7206c9 /src/compiler.rs
parente0cde67ed427a46be3adfd0938a4020d494d692f (diff)
downloadsylt-ea6adb4ca98d5b272db010ca4de87210abf4b49e.tar.gz
parse nullable types
Diffstat (limited to 'src/compiler.rs')
-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();