public virtual INode Visit(IReturnType type, T data) { List <IReturnTypePart> parts = new List <IReturnTypePart> (type.Parts.Count); foreach (IReturnTypePart part in type.Parts) { parts.Add((IReturnTypePart)Visit(part, data)); } DomReturnType rt = new DomReturnType(type.Namespace, parts); rt.PointerNestingLevel = type.PointerNestingLevel; rt.IsNullable = type.IsNullable; rt.SetDimensions(type.GetDimensions()); rt.Type = type.Type; // for anonymous types return(rt); }
IReturnType LookupReturnType(string decoratedName, IReturnType type, IType typeToInstantiate) { IReturnType res; if (typeTable.TryGetValue(decoratedName, out res)) { if (type.ArrayDimensions == 0 && type.PointerNestingLevel == 0) { return(res); } DomReturnType copy = (DomReturnType)base.Visit(res, typeToInstantiate); copy.PointerNestingLevel = type.PointerNestingLevel; copy.SetDimensions(type.GetDimensions()); return(copy); } return(null); }