diff --git a/src/interpreter.rs b/src/interpreter.rs index 9312e30..9c7e79a 100644 --- a/src/interpreter.rs +++ b/src/interpreter.rs @@ -1610,6 +1610,7 @@ impl Interpreter { (Value::Int(a), Value::Int(b)) => Ok(Value::Bool(a < b)), (Value::Float(a), Value::Float(b)) => Ok(Value::Bool(a < b)), (Value::String(a), Value::String(b)) => Ok(Value::Bool(a < b)), + (Value::Char(a), Value::Char(b)) => Ok(Value::Bool(a < b)), (l, r) => Err(RuntimeError { message: format!("Cannot compare {} and {}", l.type_name(), r.type_name()), span: Some(span), @@ -1619,6 +1620,7 @@ impl Interpreter { (Value::Int(a), Value::Int(b)) => Ok(Value::Bool(a <= b)), (Value::Float(a), Value::Float(b)) => Ok(Value::Bool(a <= b)), (Value::String(a), Value::String(b)) => Ok(Value::Bool(a <= b)), + (Value::Char(a), Value::Char(b)) => Ok(Value::Bool(a <= b)), (l, r) => Err(RuntimeError { message: format!("Cannot compare {} and {}", l.type_name(), r.type_name()), span: Some(span), @@ -1628,6 +1630,7 @@ impl Interpreter { (Value::Int(a), Value::Int(b)) => Ok(Value::Bool(a > b)), (Value::Float(a), Value::Float(b)) => Ok(Value::Bool(a > b)), (Value::String(a), Value::String(b)) => Ok(Value::Bool(a > b)), + (Value::Char(a), Value::Char(b)) => Ok(Value::Bool(a > b)), (l, r) => Err(RuntimeError { message: format!("Cannot compare {} and {}", l.type_name(), r.type_name()), span: Some(span), @@ -1637,6 +1640,7 @@ impl Interpreter { (Value::Int(a), Value::Int(b)) => Ok(Value::Bool(a >= b)), (Value::Float(a), Value::Float(b)) => Ok(Value::Bool(a >= b)), (Value::String(a), Value::String(b)) => Ok(Value::Bool(a >= b)), + (Value::Char(a), Value::Char(b)) => Ok(Value::Bool(a >= b)), (l, r) => Err(RuntimeError { message: format!("Cannot compare {} and {}", l.type_name(), r.type_name()), span: Some(span), diff --git a/src/parser.rs b/src/parser.rs index 10af002..6c9f918 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1887,6 +1887,14 @@ impl Parser { span: token.span, })) } + TokenKind::Char(c) => { + let c = *c; + self.advance(); + Ok(Pattern::Literal(Literal { + kind: LiteralKind::Char(c), + span: token.span, + })) + } TokenKind::Ident(name) => { // Check if it starts with uppercase (constructor) or lowercase (variable) if name.chars().next().map_or(false, |c| c.is_uppercase()) {