diff --git a/src/obj.rs b/src/obj.rs index 2b34aca..bf7239c 100644 --- a/src/obj.rs +++ b/src/obj.rs @@ -147,8 +147,8 @@ pub trait Object: Debug + Display + Any + Trace { let mut ty = self.ty(); loop { let vtable_entry = - with_obj_downcast_mut(ty.clone(), |ty: &mut Ty| ty.vtable().get(name).cloned()) - .map(|vtable_entry| { + with_obj_downcast(ty.clone(), |ty: &Ty| ty.vtable().get(name).cloned()).map( + |vtable_entry| { let ptr = if obj_is_inst::(&vtable_entry) || obj_is_inst::(&vtable_entry) { @@ -161,7 +161,8 @@ pub trait Object: Debug + Display + Any + Trace { // floating around. //self.set_attr(name, ptr.clone()); ptr - }); + }, + ); if vtable_entry.is_some() { return vtable_entry; } @@ -261,6 +262,10 @@ impl Debug for Obj { impl Object for Obj { fn instantiate(&mut self) { + if self.get_attr("__ty__").is_none() { + let ty = BUILTINS.with_borrow(|builtins| builtins.get("Obj").expect("no Obj").clone()); + self.set_attr("__ty__", ty); + } self.is_instantiated = true; }