コード例 #1
0
ファイル: SmallType.cs プロジェクト: btbaggin/SmallLang
        public static SmallType FromSystemType(Type pType)
        {
            if (pType.IsByRef)
            {
                pType = pType.GetElementType();
            }
            var t = _types.FromSystemType(pType);

            if (t != null)
            {
                return(t);
            }

            if (pType.IsArray)
            {
                t = FromSystemType(pType.GetElementType());
                t = t.MakeArrayType();
                return(t);
            }
            else if (pType.IsConstructedGenericType)
            {
                var         ts    = pType.GetGenericArguments();
                SmallType[] types = new SmallType[ts.Length];
                for (int i = 0; i < ts.Length; i++)
                {
                    types[i] = FromSystemType(ts[i]);
                }
                return(CreateTupleOf(types));
            }

            if (pType.IsGenericParameter)
            {
                return(CreateGenericParameter(pType.Name));
            }
            return(null);
        }