diff --git a/src/ty/internal/attrset.rs b/src/ty/internal/attrset.rs index 5b8cdc2..0371c51 100644 --- a/src/ty/internal/attrset.rs +++ b/src/ty/internal/attrset.rs @@ -42,7 +42,10 @@ impl<'jit: 'vm, 'vm> AttrSet<'jit, 'vm> { } pub fn select(&self, sym: usize) -> Option> { - self.data.get(&sym).cloned() + self.data.get(&sym).cloned().map(|val| match val { + Value::Builtins(x) => Value::AttrSet(x.upgrade().unwrap()), + val => val + }) } pub fn has_attr(&self, sym: usize) -> bool { diff --git a/src/ty/internal/mod.rs b/src/ty/internal/mod.rs index 42f6851..c2356d6 100644 --- a/src/ty/internal/mod.rs +++ b/src/ty/internal/mod.rs @@ -379,11 +379,7 @@ impl<'jit, 'vm> Value<'jit, 'vm> { self.typename() ))), }?; - if let Value::Builtins(weak) = val { - *self = Value::AttrSet(weak.upgrade().unwrap()) - } else { - *self = val; - } + *self = val; Ok(self) } @@ -398,11 +394,7 @@ impl<'jit, 'vm> Value<'jit, 'vm> { ))); } }; - if let Value::Builtins(weak) = val { - *self = Value::AttrSet(weak.upgrade().unwrap()) - } else { - *self = val; - } + *self = val; Ok(self) }