Boo.Lang.Compiler.Steps.ProcessMethodBodies.LeaveReturnStatement C# (CSharp) Метод

LeaveReturnStatement() публичный Метод

public LeaveReturnStatement ( Boo.Lang.Compiler.Ast.ReturnStatement node ) : void
node Boo.Lang.Compiler.Ast.ReturnStatement
Результат void
        public override void LeaveReturnStatement(ReturnStatement node)
        {
            if (null == node.Expression)
                return;

            // forces anonymous types to be correctly
            // instantiated
            IType expressionType = GetConcreteExpressionType(node.Expression);
            if (TypeSystemServices.VoidType == expressionType
                && node.ContainsAnnotation(OptionalReturnStatementAnnotation))
            {
                node.ParentNode.Replace(
                    node,
                    new ExpressionStatement(node.Expression));
                return;
            }

            IType returnType = _currentMethod.ReturnType;
            if (TypeSystemServices.IsUnknown(returnType))
                _currentMethod.AddReturnExpression(node.Expression);
            else
                AssertTypeCompatibility(node.Expression, returnType, expressionType);

            //bind to nullable Value if needed
            if (TypeSystemServices.IsNullable(expressionType) && !TypeSystemServices.IsNullable(returnType))
            {
                // TODO: move to later steps or introduce an implicit conversion operator
                var mre = new MemberReferenceExpression(node.Expression.LexicalInfo, node.Expression, "Value");
                Visit(mre);
                node.Replace(node.Expression, mre);
            }
        }
ProcessMethodBodies