diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-02-26 19:19:46 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-02-26 19:19:46 +0100 |
| commit | 3fff252fc457e86ac343a607de417e8c9fbc3f08 (patch) | |
| tree | f4175fcb6a86fa28b9a1024207273674640b3f06 /src/lib.rs | |
| parent | 2d7bbe3a28a641e8ed915ff0f99cb308ec05c666 (diff) | |
| parent | 02d8f7592ff7bcdf356df7256db20fbd23c5afa9 (diff) | |
| download | sylt-3fff252fc457e86ac343a607de417e8c9fbc3f08.tar.gz | |
Merge remote-tracking branch 'origin/change-constants' into compiler-rewrite
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -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 |
