예제 #1
0
        void RegisterType(DataType dt)
        {
            if (dt.IsClosed)
            {
                _type.TypeObjects.Add(dt);
            }
            else if (dt.IsGenericParameter)
            {
                _type.TypeObjects.Add(Type);
            }
            else if (dt.IsGenericMethodType)
            {
                RegisterType(dt.ParentType.MasterDefinition);
            }
            else if (dt.MasterDefinition != Type && !dt.IsArray)
            {
                _type.TypeObjects.Add(dt.MasterDefinition);
            }

            if (!_type.TypeObjects.Contains(dt) &&
                !(Function.IsGenericMethod && CppBackend.Compare(dt, Function.GenericType)) &&
                !CppBackend.Compare(dt, Type) &&
                !dt.IsGenericParameter &&
                dt.MasterDefinition.Stats.HasFlag(EntityStats.RefCount))
            {
                _func.PrecalcedTypes.Add(dt);
            }
        }
예제 #2
0
 void RegisterDependency(DataType dt)
 {
     if (!(Function.IsGenericMethod && CppBackend.Compare(dt, Function.GenericType)) &&
         !CppBackend.Compare(dt, Type) && dt.HasInitializer &&
         dt.BuiltinType != BuiltinType.String && dt.BuiltinType != BuiltinType.Char &&
         dt.MasterDefinition.Stats.HasFlag(EntityStats.RefCount))
     {
         _func.Dependencies.Add(dt);
     }
 }