internal static IClrTypeCore GetTypeCore(Type type) { if (type != null) { #if NETFX_CORE Capstones.LuaExt.Assembly2Lua._SearchAssemblies.Add(type.GetTypeInfo().Assembly); #endif IClrTypeCore core = null; if (_TypeCoreCache.TryGetValue(type, out core)) { return(core); } if (type.IsGenericType() && type.ContainsGenericParameters()) { core = new ClrGenericTypeCore(type); } else { core = new ClrTypeCore(type); } _TypeCoreCache[type] = core; return(core); } return(null); }
protected internal GroupGenericTypeCore(Type[] types, Dictionary <Types, ClrTypeCore> cache) { if (cache == null) { cache = new Dictionary <Types, ClrTypeCore>(); } _BindedGenericCache = cache; _GroupTypes = types; if (types != null) { foreach (var type in types) { if (type != null && type.IsGenericType() && type.ContainsGenericParameters()) { var cnt = type.GetGenericArguments().Length; var core = ClrGenericTypeCore.GetGenericTypeCore(type, cache); _GenericTypeCores[cnt] = core; } } } }
internal static ClrGenericTypeCore GetGenericTypeCore(Type type, Dictionary <Types, ClrTypeCore> cache) { if (type != null) { { IClrTypeCore core = null; if (ClrTypeCore._TypeCoreCache.TryGetValue(type, out core)) { var rv = core as ClrGenericTypeCore; if (rv != null) { return(rv); } } } { var core = new ClrGenericTypeCore(type, cache); ClrTypeCore._TypeCoreCache[type] = core; return(core); } } return(null); }
protected internal ClrTypeCoreWithGeneric(Type ntype, Type[] gtypes, Dictionary <Types, ClrTypeCore> cache) { List <Type> types = new List <Type>(); if (ntype != null) { _NormalCore = ClrTypeCore.GetTypeCore(ntype); types.Add(ntype); } if (gtypes != null && gtypes.Length > 0) { if (gtypes.Length > 1) { _GenericCore = new GroupGenericTypeCore(gtypes, cache); } else { _GenericCore = ClrGenericTypeCore.GetGenericTypeCore(gtypes[0], cache); } types.AddRange(gtypes); } _GroupTypes = types.ToArray(); }
protected internal GenericConstructorCore(ClrGenericTypeCore gtcore, MethodBase minfo) : base(minfo, 0) { _GenericTypeCore = gtcore; _GenericParams = gtcore._GenericParams; }