private RubyMemberInfo ResolveOverriddenMethod(string/*!*/ name, int modulesToSkip) {
Context.RequiresClassHierarchyLock();
RubyMemberInfo result = null;
bool skipHidden = false;
if (ForEachAncestor((module) => {
if (modulesToSkip > 0) {
modulesToSkip--;
return false;
}
// Skips modules whose method tables are not initialized as well as CLR methods that are not yet loaded to method tables.
// We can do so because such methods were not used in any cache.
//
// Skips super-forwarder since the forwarded super ancestor would be used in a site/group, not the forwarder itself.
// If the forwarded ancestor is overridden the forwarder will forward to the override.
//
// Skips "hidden" sentinels and hidden non-removable methods.
return module.TryGetDefinedMethod(name, ref skipHidden, out result) && !result.IsSuperForwarder;
})) {
// includes private methods:
return result != null && !result.IsUndefined ? result : null;
}
return null;
}