Exemplo n.º 1
0
 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));
            }
        }
Exemplo n.º 3
0
 private FunctionPointerType CreateFunctionPointer(IFunctionDefinitionOrLambdaSyntax syntax, IType returnType)
 {
     return(new FunctionPointerType(returnType, syntax.Parameters.Select(x => BindType(x.Type !))));
 }