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);
        }
Exemple #2
0
            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);
            }