private ImmutableArray <FunctionReturn> GetAllReturns(IFunctionDefinitionOrLambdaSyntax function) { if (function.IsArrow) { var returnExpression = ((ExpressionStatementSyntax)function.Body !).ExpressionSyntax; var toReturn = new FunctionReturn(returnExpression.Location, BindExpression(returnExpression)); return(ImmutableArray.Create(toReturn)); } return(function.TopLevelReturns.Select(InferReturnedType).ToImmutableArray()); }
private void CheckForNonReturningCodePaths(IFunctionDefinitionOrLambdaSyntax syntax) { if (syntax.IsArrow) { return; } if (syntax is FunctionDefinitionSyntax function && BindFunctionDefinition(function).ReturnType is VoidType) { return; } if (syntax is AnonymousFunctionSyntax lambda && BindExpression(lambda).As <FunctionPointerType>() !.ReturnType is VoidType) { return; } var body = syntax.Body?.As <BlockStatement>(); if (!AllPathsReturnValue(body?.Body ?? ImmutableArray <IStatementSyntax> .Empty)) { errors.Add(new NotAllCodePathReturnValue(syntax)); } }
private FunctionPointerType CreateFunctionPointer(IFunctionDefinitionOrLambdaSyntax syntax, IType returnType) { return(new FunctionPointerType(returnType, syntax.Parameters.Select(x => BindType(x.Type !)))); }