fix: add Char pattern matching and Char comparison operators
- Parser: support Char literals in match patterns (e.g., 'x' => ...) - Interpreter: add Char comparison for <, <=, >, >= operators Previously only Int, Float, and String supported ordering comparisons. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user