[types] OMG SO MUCH LIFETIME NONSENSE

This commit is contained in:
Eryn Wells 2018-09-01 08:33:45 -07:00
parent 1e12508348
commit 576b81e52c
2 changed files with 9 additions and 7 deletions

View file

@ -17,16 +17,18 @@ impl Number for Int {
}
impl PartialEq<Obj> for Int {
fn eq(&self, rhs: &Obj) -> bool {
match rhs.obj().and_then(Object::as_num) {
fn eq<'a>(&self, rhs: &'a Obj) -> bool {
let obj: Option<&'a Object> = rhs.obj();
let num: Option<&'a Number> = obj.and_then(Object::as_num);
match num {
Some(num) => self == num,
None => false
}
}
}
impl PartialEq<Number> for Int {
fn eq(&self, rhs: &Number) -> bool {
impl<'a> PartialEq<Number + 'a> for Int {
fn eq(&self, rhs: &(Number + 'a)) -> bool {
match rhs.as_int() {
Some(rhs) => *self == *rhs,
None => false

View file

@ -44,11 +44,11 @@ pub trait Object:
}
impl Obj {
pub fn new<T: 'static + Object>(obj: T) -> Obj {
pub fn new<T: Object + 'static>(obj: T) -> Obj {
Obj::Ptr(Box::new(obj))
}
pub fn obj<'a>(&'a self) -> Option<&'a Object> {
pub fn obj<'s, 'r: 's>(&'s self) -> Option<&'r (Object + 's)> {
match self {
Obj::Ptr(obj) => Some(obj.deref()),
Obj::Null => None
@ -60,7 +60,7 @@ impl Obj {
mem::replace(self, Obj::Null)
}
pub fn unbox_as<T: 'static + Object>(&self) -> Option<&T> {
pub fn unbox_as<T: Object + 'static>(&self) -> Option<&T> {
match self {
Obj::Null => None,
Obj::Ptr(obj) => obj.as_any().downcast_ref::<T>()