Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / QIL / QilReplaceVisitor.cs / 1305376 / QilReplaceVisitor.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Xml.Xsl; namespace System.Xml.Xsl.Qil { ////// Base internal class for visitors that replace the graph as they visit it. /// internal abstract class QilReplaceVisitor : QilVisitor { protected QilFactory f; public QilReplaceVisitor(QilFactory f) { this.f = f; } //----------------------------------------------- // QilVisitor overrides //----------------------------------------------- ////// Visit all children of "parent", replacing each child with a copy of each child. /// protected override QilNode VisitChildren(QilNode parent) { XmlQueryType oldParentType = parent.XmlType; bool recalcType = false; // Visit children for (int i = 0; i < parent.Count; i++) { QilNode oldChild = parent[i], newChild; XmlQueryType oldChildType = oldChild != null ? oldChild.XmlType : null; // Visit child if (IsReference(parent, i)) newChild = VisitReference(oldChild); else newChild = Visit(oldChild); // Only replace child and recalculate type if oldChild != newChild or oldChild.XmlType != newChild.XmlType if ((object) oldChild != (object) newChild || (newChild != null && (object) oldChildType != (object) newChild.XmlType)) { recalcType = true; parent[i] = newChild; } } if (recalcType) RecalculateType(parent, oldParentType); return parent; } //----------------------------------------------- // QilReplaceVisitor methods //----------------------------------------------- ////// Once children have been replaced, the Xml type is recalculated. /// protected virtual void RecalculateType(QilNode node, XmlQueryType oldType) { XmlQueryType newType; newType = f.TypeChecker.Check(node); // Note the use of AtMost to account for cases when folding of Error nodes in the graph cause // cardinality to be recalculated. // For example, (Sequence (TextCtor (Error "error")) (Int32 1)) => (Sequence (Error "error") (Int32 1)) // In this case, cardinality has gone from More to One Debug.Assert(newType.IsSubtypeOf(XmlQueryTypeFactory.AtMost(oldType, oldType.Cardinality)), "Replace shouldn't relax original type"); node.XmlType = newType; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HttpCacheParams.cs
- ItemDragEvent.cs
- MimeMapping.cs
- RsaKeyIdentifierClause.cs
- SequentialWorkflowHeaderFooter.cs
- Stylesheet.cs
- SpecialNameAttribute.cs
- LoginView.cs
- HttpStreamFormatter.cs
- OperatingSystem.cs
- MemberMaps.cs
- MonthCalendar.cs
- NavigationCommands.cs
- BufferModeSettings.cs
- ResourceExpressionBuilder.cs
- ContentType.cs
- KerberosSecurityTokenAuthenticator.cs
- HighlightComponent.cs
- TableLayoutSettingsTypeConverter.cs
- FtpRequestCacheValidator.cs
- Label.cs
- ServiceOperationViewControl.cs
- thaishape.cs
- DataGridDetailsPresenter.cs
- WindowsFont.cs
- SQLByteStorage.cs
- SQLInt32Storage.cs
- Peer.cs
- SystemUdpStatistics.cs
- MenuRendererClassic.cs
- EdmComplexTypeAttribute.cs
- ResourcesGenerator.cs
- SerializationAttributes.cs
- HtmlInputFile.cs
- ValueQuery.cs
- HtmlInputHidden.cs
- ExtractorMetadata.cs
- UnsafeNativeMethods.cs
- RemoteWebConfigurationHostServer.cs
- XDRSchema.cs
- ErrorInfoXmlDocument.cs
- PaginationProgressEventArgs.cs
- SelectionListDesigner.cs
- HelpFileFileNameEditor.cs
- CompoundFileIOPermission.cs
- GacUtil.cs
- DragAssistanceManager.cs
- CompilerTypeWithParams.cs
- ToolStripItemRenderEventArgs.cs
- Int16Storage.cs
- ProxyWebPartManager.cs
- RewritingPass.cs
- HttpCachePolicy.cs
- StoragePropertyMapping.cs
- CompilationSection.cs
- CultureSpecificStringDictionary.cs
- TabletCollection.cs
- GACMembershipCondition.cs
- DockingAttribute.cs
- AssociationType.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- SemaphoreSecurity.cs
- EntitySqlQueryState.cs
- GeneralTransform3DGroup.cs
- TypeSemantics.cs
- clipboard.cs
- RecordManager.cs
- Padding.cs
- DoubleUtil.cs
- CreateUserErrorEventArgs.cs
- PeerUnsafeNativeMethods.cs
- StrokeNodeData.cs
- CharacterMetrics.cs
- MediaCommands.cs
- UDPClient.cs
- GradientPanel.cs
- DrawingAttributesDefaultValueFactory.cs
- DNS.cs
- PointHitTestParameters.cs
- ChameleonKey.cs
- DoubleCollectionConverter.cs
- SQLInt64Storage.cs
- CapabilitiesRule.cs
- DoubleAnimationClockResource.cs
- MetadataItemEmitter.cs
- InternalMappingException.cs
- TransportBindingElementImporter.cs
- PromptStyle.cs
- AttributeEmitter.cs
- HtmlHead.cs
- _BaseOverlappedAsyncResult.cs
- BufferedStream2.cs
- XPathDocument.cs
- RuntimeIdentifierPropertyAttribute.cs
- SqlWebEventProvider.cs
- SqlConnectionString.cs
- DataSourceCache.cs
- WebSysDescriptionAttribute.cs
- RectangleGeometry.cs
- _PooledStream.cs