public override void OnYieldStatement(YieldStatement node)
            {
                noReturnStatement = false;

                IProjectContent pc         = context != null ? context.ProjectContent : ParserService.CurrentProjectContent;
                IReturnType     enumerable = new GetClassReturnType(pc, "System.Collections.Generic.IEnumerable", 1);

                // Prevent creating an infinite number of InferredReturnTypes in inferring cycles
                parentReturnType.expression = new NullLiteralExpression();
                IReturnType returnType;

                if (node.Expression == null)
                {
                    returnType = ConvertVisitor.GetDefaultReturnType(pc);
                }
                else
                {
                    returnType = new BooResolver().GetTypeOfExpression(node.Expression, context);
                }
                if (returnType != null)
                {
                    returnType.GetUnderlyingClass();                     // force to infer type
                }
                if (parentReturnType.expression == null)
                {
                    // inferrence cycle with parentReturnType
                    returnType = new GetClassReturnType(pc, "?", 0);
                }
                parentReturnType.expression = null;

                result = new ConstructedReturnType(enumerable, new IReturnType[] { returnType });
            }
Esempio n. 2
0
        public override void OnArrayLiteralExpression(ArrayLiteralExpression node)
        {
            if (node.Type != null)
            {
                MakeResult(ConvertType(node.Type));
                return;
            }
            IReturnType elementType = null;

            foreach (Expression expr in node.Items)
            {
                ClearResult();
                expr.Accept(this);
                IReturnType thisType = (resolveResult != null) ? resolveResult.ResolvedType : null;
                if (elementType == null)
                {
                    elementType = thisType;
                }
                else if (thisType != null)
                {
                    elementType = MemberLookupHelper.GetCommonType(projectContent, elementType, thisType);
                }
            }
            if (elementType == null)
            {
                elementType = ConvertVisitor.GetDefaultReturnType(projectContent);
            }
            MakeResult(new ArrayReturnType(projectContent, elementType, 1));
        }