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

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

public LeaveDeclarationStatement ( Boo.Lang.Compiler.Ast.DeclarationStatement node ) : void
node Boo.Lang.Compiler.Ast.DeclarationStatement
Результат void
        public override void LeaveDeclarationStatement(DeclarationStatement node)
        {
            EnsureDeclarationType(node);
            AssertDeclarationName(node.Declaration);

            var type = GetDeclarationType(node);

            var localInfo = DeclareLocal(node, node.Declaration.Name, type);
            var loopLocal = localInfo as InternalLocal;
            if (null != loopLocal)
                loopLocal.OriginalDeclaration = node.Declaration;

            if (node.Initializer != null)
            {
                IType initializerType = GetExpressionType(node.Initializer);
                if (CheckDeclarationType(node.Declaration.Type))
                    AssertTypeCompatibility(node.Initializer, type, initializerType);

                if (TypeSystemServices.IsNullable(type) && !TypeSystemServices.IsNullable(initializerType))
                    BindNullableInitializer(node, node.Initializer, type);

                node.ReplaceBy(
                    new ExpressionStatement(
                        CodeBuilder.CreateAssignment(
                            node.LexicalInfo,
                            CodeBuilder.CreateReference(localInfo),
                            node.Initializer)));
            }
            else
                node.ReplaceBy(new ExpressionStatement(CreateDefaultLocalInitializer(node, localInfo)));
        }
ProcessMethodBodies