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)));
}