static void ReplaceWithInitializer(DeclarationStatement decl) { if (decl.Initializer == null) { decl.ReplaceBy(null); } else { ExpressionStatement statement = new ExpressionStatement(decl.LexicalInfo); statement.Expression = new BinaryExpression(decl.LexicalInfo, BinaryOperatorType.Assign, new ReferenceExpression(decl.Declaration.LexicalInfo, decl.Declaration.Name), decl.Initializer); decl.ReplaceBy(statement); } }
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))); }
public override void LeaveDeclarationStatement(DeclarationStatement node) { IType type = GetDeclarationType(node); AssertDeclarationName(node.Declaration); IEntity localInfo = DeclareLocal(node, node.Declaration.Name, type); if (null != node.Initializer) { IType itype = GetExpressionType(node.Initializer); AssertTypeCompatibility(node.Initializer, type, itype); if (TypeSystemServices.IsNullable(type) && !TypeSystemServices.IsNullable(itype)) { 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))); } }