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 }); }
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)); }