about summary refs log tree commit diff
path: root/src/interpret/value.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/interpret/value.rs')
-rw-r--r--src/interpret/value.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/interpret/value.rs b/src/interpret/value.rs
index c0ac96e..27f2668 100644
--- a/src/interpret/value.rs
+++ b/src/interpret/value.rs
@@ -148,6 +148,21 @@ impl Value {
             _ => Err(anyhow!("Left operand can't be compared.")),
         }
     }
+
+    pub fn neg(self) -> Result<Value> {
+        match self {
+            Value::Float(float) => Ok(Value::Float(-float)),
+            Value::Int(int) => Ok(Value::Int(-int)),
+            _ => Err(anyhow!("Can't negate value.")),
+        }
+    }
+
+    pub fn not(self) -> Result<Value> {
+        match self {
+            Value::Bool(bool) => Ok(Value::Bool(bool)),
+            _ => Err(anyhow!("Can't flip non-bool value.")),
+        }
+    }
 }
 
 impl Display for Value {