aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-02-26 19:19:46 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-02-26 19:19:46 +0100
commit3fff252fc457e86ac343a607de417e8c9fbc3f08 (patch)
treef4175fcb6a86fa28b9a1024207273674640b3f06 /src/lib.rs
parent2d7bbe3a28a641e8ed915ff0f99cb308ec05c666 (diff)
parent02d8f7592ff7bcdf356df7256db20fbd23c5afa9 (diff)
downloadsylt-3fff252fc457e86ac343a607de417e8c9fbc3f08.tar.gz
Merge remote-tracking branch 'origin/change-constants' into compiler-rewrite
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 97f555c..9463c73 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -4,6 +4,7 @@ use std::collections::hash_map::Entry;
use std::fmt::Debug;
use std::path::{Path, PathBuf};
use std::rc::Rc;
+use std::hash::{Hash, Hasher};
use owo_colors::OwoColorize;
@@ -199,6 +200,43 @@ impl Debug for Value {
}
}
+impl PartialEq<Value> for Value {
+ fn eq(&self, other: &Value) -> bool {
+ match (self, other) {
+ (Value::Float(a), Value::Float(b)) => a == b,
+ (Value::Int(a), Value::Int(b)) => a == b,
+ (Value::Bool(a), Value::Bool(b)) => a == b,
+ (Value::String(a), Value::String(b)) => a == b,
+ (Value::Tuple(a), Value::Tuple(b)) => {
+ a.len() == b.len() && a.iter().zip(b.iter()).all(|(a, b)| a == b)
+ }
+ (Value::Nil, Value::Nil) => true,
+ _ => false,
+ }
+ }
+}
+
+impl Eq for Value {}
+
+impl Hash for Value {
+ fn hash<H: Hasher>(&self, state: &mut H) {
+ match self {
+ Value::Float(a) => {
+ // We have to limit the values, because
+ // floats are wierd.
+ assert!(a.is_finite());
+ a.to_bits().hash(state);
+ },
+ Value::Int(a) => a.hash(state),
+ Value::Bool(a) => a.hash(state),
+ Value::String(a) => a.hash(state),
+ Value::Tuple(a) => a.hash(state),
+ Value::Nil => state.write_i8(0),
+ _ => {},
+ };
+ }
+}
+
impl Value {
fn identity(self) -> Self {
match self {
@@ -1217,6 +1255,11 @@ for i := 0, i < 10, i += 1 {
if i == 2 {
break
}
+
+ q
+ qq
+ qqq
+ qqqq
}
a <=> 3
",
@@ -1233,6 +1276,11 @@ for i := 0, i < 4, i += 1 {
continue
}
a = a + 1
+
+ q
+ qq
+ qqq
+ qqqq
}
a <=> 3
",
@@ -1274,7 +1322,9 @@ a := 0
b := 99999
{
a := 99999
+ a
}
+ b
a -= 1
}
a <=> -1