Example #1
0
        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);
        }