diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-02-02 20:40:15 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-02-02 20:40:15 +0100 |
| commit | e49df17d1159507e50434d9d3f866a0c41dd59b9 (patch) | |
| tree | 00cab0eaaef0769e184f3a4c8d7d46a3680b8c2c /src/lib.rs | |
| parent | 1aa5daae7c8b18b2ff4128c7bcc49db676e7e293 (diff) | |
| download | sylt-e49df17d1159507e50434d9d3f866a0c41dd59b9.tar.gz | |
as_value -> from
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -124,14 +124,16 @@ impl Type { _ => false, } } +} - pub fn as_value(&self) -> Value { - match self { +impl From<&Type> for Value { + fn from(ty: &Type) -> Self { + match ty { Type::Void => Value::Nil, Type::Blob(i) => Value::Blob(*i), Type::BlobInstance(i) => Value::BlobInstance(*i, Rc::new(RefCell::new(Vec::new()))), Type::Tuple(fields) => { - Value::Tuple(Rc::new(fields.iter().map(|x| x.as_value()).collect())) + Value::Tuple(Rc::new(fields.iter().map(Value::from).collect())) } Type::UnknownType => Value::Unkown, Type::Int => Value::Int(1), @@ -140,11 +142,18 @@ impl Type { Type::String => Value::String(Rc::new("".to_string())), Type::Function(_, _) => Value::Function( Vec::new(), - Rc::new(RefCell::new(Block::from_type(self)))), + Rc::new(RefCell::new(Block::from_type(ty)))), } } } +impl From<Type> for Value { + fn from(ty: Type) -> Self { + Value::from(&ty) + } +} + + #[derive(Clone)] pub enum Value { Blob(usize), |
