private static Dictionary <string, string> WalkTypes( LangType actualType, LangType genericType, Dictionary <string, string> replacements) { if (genericType.IsTypeParameter) { replacements.Add(genericType.GetName(), actualType.GetName()); } else { for (var i = 0; i < genericType.SubTypes.Count; i++) { var genericSubtype = genericType.SubTypes[i]; var actualSubtype = actualType.SubTypes[i]; WalkTypes(actualSubtype, genericSubtype, replacements); } } return(replacements); }
public LangType CheckGenericTypes(LangType langType) { if (langType.Name != ParserContext.NativeTypes.LangVoid.Name) { var genericType = this.Templates.Where(tmpl => tmpl.LangType.Equals(langType)).FirstOrDefault(); if (genericType != null) { genericType.Realize(langType, this); return(GetLangType(langType.GetName())); } for (var i = 0; i < langType.SubTypes.Count; i++) { var subType = langType.SubTypes[i]; langType.SubTypes[i] = CheckGenericTypes(subType); } } return(langType); }