private void ScheduleDerivedMethods(MosaType type, int slot) { var children = TypeLayout.GetDerivedTypes(type); if (children == null) { return; } foreach (var derived in children) { bool contains; lock (allocatedTypes) { contains = allocatedTypes.Contains(derived); } if (contains) { var derivedMethod = TypeLayout.GetMethodBySlot(derived, slot); MarkMethodInvoked(derivedMethod); ScheduleMethod(derivedMethod); } ScheduleDerivedMethods(derived, slot); } }
private bool CheckDerivedTypesForInterface(MosaType type) { var derivedTypes = TypeLayout.GetDerivedTypes(type); if (derivedTypes == null || derivedTypes.Length == 0) { return(false); } foreach (var dervided in derivedTypes) { if (dervided.Interfaces.Count >= 1) { return(true); } if (CheckDerivedTypesForInterface(dervided)) { return(true); } } return(false); }