public TypeX GetTypeX() { TypeX tyX = TypeMgr.GetTypeByName(GetNameKey()); Debug.Assert(tyX != null); return(tyX); }
public TypeX GetTypeBySig(TypeSig tySig) { StringBuilder sb = new StringBuilder(); Helper.TypeSigName(sb, tySig, true); return(TypeMgr.GetTypeByName(sb.ToString())); }
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)); }
public TypeX GetTypeByName(string name) { return(TypeMgr.GetTypeByName(name)); }
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); } }