public override SyntaxList <StatementSyntax> VisitExitStatement(VBSyntax.ExitStatementSyntax node) { switch (VBasic.VisualBasicExtensions.Kind(node.BlockKeyword)) { case VBasic.SyntaxKind.SubKeyword: return(SingleStatement(SyntaxFactory.ReturnStatement())); case VBasic.SyntaxKind.FunctionKeyword: VBasic.VisualBasicSyntaxNode typeContainer = (VBasic.VisualBasicSyntaxNode)node.Ancestors().OfType <VBSyntax.LambdaExpressionSyntax>().FirstOrDefault() ?? node.Ancestors().OfType <VBSyntax.MethodBlockSyntax>().FirstOrDefault(); var info = typeContainer.TypeSwitch( (VBSyntax.LambdaExpressionSyntax e) => _semanticModel.GetTypeInfo(e).Type.GetReturnType(), (VBSyntax.MethodBlockSyntax e) => { var type = (TypeSyntax)e.SubOrFunctionStatement.AsClause?.Type.Accept(_nodesVisitor) ?? SyntaxFactory.ParseTypeName("object"); return(_semanticModel.GetSymbolInfo(type).Symbol?.GetReturnType()); } ); ExpressionSyntax expr; if (HasReturnVariable) { expr = ReturnVariable; } else if (info == null) { expr = null; } else if (info.IsReferenceType) { expr = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression); } else if (info.CanBeReferencedByName) { expr = SyntaxFactory.DefaultExpression(SyntaxFactory.ParseTypeName(info.ToMinimalCSharpDisplayString(_semanticModel, node.SpanStart))); } else { throw new NotSupportedException(); } return(SingleStatement(SyntaxFactory.ReturnStatement(expr))); default: return(SingleStatement(SyntaxFactory.BreakStatement())); } }
public override SyntaxList <StatementSyntax> VisitExitStatement(VBSyntax.ExitStatementSyntax node) => AddLocalVariables(node);
public override Task <SyntaxList <StatementSyntax> > VisitExitStatement(VBSyntax.ExitStatementSyntax node) => AddLocalVariablesAsync(node);