void ProcessClosureBody(BlockExpression node, bool isExpression = false)
        {
            MarkVisited(node);
            if (node.ContainsAnnotation("inline"))
                AddOptionalReturnStatement(node.Body);

            var explicitClosureName = node[BlockExpression.ClosureNameAnnotation] as string;

            Method closure = CodeBuilder.CreateMethod(
                ClosureName(explicitClosureName),
                node.ReturnType ?? CodeBuilder.CreateTypeReference(Unknown.Default),
                ClosureModifiers());

            MarkVisited(closure);

            var closureEntity = (InternalMethod)closure.Entity;
            closure.LexicalInfo = node.LexicalInfo;
            closure.Parameters = node.Parameters;
            closure.Body = node.Body;

            if (!isExpression)
            {
                CurrentMethod.DeclaringType.Members.Add(closure);
            }
            CodeBuilder.BindParameterDeclarations(_currentMethod.IsStatic, closure);

            // check for invalid names and
            // resolve parameter types
            Visit(closure.Parameters);

            // Inside the closure, connect the closure method namespace with the current namespace
            var ns = new NamespaceDelegator(CurrentNamespace, closureEntity);

            // Allow closure body to reference itself using its explicit name (BOO-1085)
            if (explicitClosureName != null)
                ns.DelegateTo(new AliasedNamespace(explicitClosureName, closureEntity));

            var nodeToConvert = node.CloneNode();
            ProcessMethodBody(closureEntity, ns);
            if (isExpression)
            {
                _keepOperator = true;
                closureEntity.Method.Body = nodeToConvert.Body;
                ProcessMethodBody(closureEntity, ns);
                closureEntity.Method.Body = node.Body;
                _keepOperator = false;
            }
            if (closureEntity.ReturnType is Unknown)
                TryToResolveReturnType(closureEntity);

            node.ExpressionType = closureEntity.Type;
            node.Entity = closureEntity;
            if (isExpression)
            {
                ConvertToExpressionTree(nodeToConvert, node);
            }
        }