Esempio n. 1
0
        public TypeX GetTypeX()
        {
            TypeX tyX = TypeMgr.GetTypeByName(GetNameKey());

            Debug.Assert(tyX != null);
            return(tyX);
        }
Esempio n. 2
0
        public TypeX GetTypeBySig(TypeSig tySig)
        {
            StringBuilder sb = new StringBuilder();

            Helper.TypeSigName(sb, tySig, true);
            return(TypeMgr.GetTypeByName(sb.ToString()));
        }
Esempio n. 3
0
        public GenerateResult Generate()
        {
            var units = new Dictionary <string, CompileUnit>();

            // 生成类型代码
            var types = TypeMgr.Types;

            foreach (TypeX tyX in types)
            {
                CompileUnit unit = new TypeGenerator(this, tyX).Generate();
                units.Add(unit.Name, unit);
            }

            var transMap = new CompileUnitMerger(units).Merge();

            TypeX strTyX = TypeMgr.GetTypeByName("String");

            if (strTyX != null)
            {
                StrGen.Generate(units, GetTypeID(strTyX));
            }

            return(new GenerateResult(this, units.Values.ToList(), transMap));
        }
Esempio n. 4
0
 public TypeX GetTypeByName(string name)
 {
     return(TypeMgr.GetTypeByName(name));
 }
Esempio n. 5
0
        private static void SigToCppName(TypeSig sig, StringBuilder sb, TypeManager typeMgr)
        {
            string elemName = GetElemTypeName(sig.ElementType);

            if (elemName != null)
            {
                sb.Append(elemName);
                return;
            }

            switch (sig.ElementType)
            {
            case ElementType.Class:
            case ElementType.ValueType:
            case ElementType.GenericInst:
            {
                TypeX type = typeMgr.GetTypeByName(sig.FullName);
                if (type != null)
                {
                    if (type.Def.IsValueType)
                    {
                        sb.Append(type.GetCppName());
                    }
                    else
                    {
                        sb.Append("struct " + type.GetCppName() + '*');
                    }
                }
                else
                {
                    if (sig.IsValueType)
                    {
                        sb.Append("il2cppValueType");
                    }
                    else
                    {
                        sb.Append("il2cppObject*");
                    }
                }
            }
                return;

            case ElementType.Ptr:
            case ElementType.ByRef:
                SigToCppName(sig.Next, sb, typeMgr);
                sb.Append('*');
                return;

            case ElementType.SZArray:
                sb.Append("il2cppSZArray<");
                SigToCppName(sig.Next, sb, typeMgr);
                sb.Append(">*");
                return;

            case ElementType.Array:
                //! il2cppArray<next, 0, 10, 0, 10, ...>*
                break;

            case ElementType.Pinned:
            case ElementType.CModReqd:
            case ElementType.CModOpt:
                SigToCppName(sig.Next, sb, typeMgr);
                return;

            default:
                throw new ArgumentOutOfRangeException("SigToCppName TypeSig " + sig.FullName);
            }
        }