public static MethodWrapper Make(PythonType pt, SymbolId name) { MethodWrapper ret = new MethodWrapper(pt, name); object meth; if (pt.dict.TryGetValue(name, out meth)) { object otherMeth; if (!pt.TryLookupSlotInBases(DefaultContext.Default, name, out otherMeth) || otherMeth != meth) { ret.SetDeclaredMethod(meth); } else { // they did __foo__ = myBase.__foo__, we'll just ignore it... ret.UpdateFromBases(pt.MethodResolutionOrder); } } else { ret.UpdateFromBases(pt.MethodResolutionOrder); } //pt.dict[name] = ret; //??? return(ret); }
//!!! this should be field specific public void UpdateFromBases() { __getitem__F.UpdateFromBases(MethodResolutionOrder); __setitem__F.UpdateFromBases(MethodResolutionOrder); __getattribute__F.UpdateFromBases(MethodResolutionOrder); __getattr__F.UpdateFromBases(MethodResolutionOrder); __setattr__F.UpdateFromBases(MethodResolutionOrder); __delattr__F.UpdateFromBases(MethodResolutionOrder); __cmp__F.UpdateFromBases(MethodResolutionOrder); __repr__F.UpdateFromBases(MethodResolutionOrder); __str__F.UpdateFromBases(MethodResolutionOrder); }