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
- XmlSchemaAttribute.cs
- connectionpool.cs
- QuadraticEase.cs
- BrushConverter.cs
- StylusPoint.cs
- RenderContext.cs
- TextDocumentView.cs
- GridViewHeaderRowPresenter.cs
- TypeElement.cs
- WebBaseEventKeyComparer.cs
- SchemaImporterExtension.cs
- FileEnumerator.cs
- SystemDiagnosticsSection.cs
- RemotingConfiguration.cs
- MeshGeometry3D.cs
- PropertyChangedEventManager.cs
- SurrogateSelector.cs
- NameValuePermission.cs
- EntityModelBuildProvider.cs
- Timeline.cs
- Size3DValueSerializer.cs
- DragEventArgs.cs
- Exceptions.cs
- DesignerAttribute.cs
- ComponentResourceKeyConverter.cs
- FrameworkContentElement.cs
- GridItem.cs
- XmlSchemaComplexContent.cs
- WindowsSysHeader.cs
- EnumerableRowCollectionExtensions.cs
- TypeLibraryHelper.cs
- SharedPersonalizationStateInfo.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- DataViewManager.cs
- TextFormatterContext.cs
- Viewport2DVisual3D.cs
- AddInContractAttribute.cs
- PerformanceCounter.cs
- CompilationLock.cs
- CreateUserWizard.cs
- CompilerTypeWithParams.cs
- WebPartDisplayMode.cs
- TreeViewHitTestInfo.cs
- Rect3DValueSerializer.cs
- SerializationFieldInfo.cs
- XmlNodeChangedEventArgs.cs
- ReflectionServiceProvider.cs
- ScrollableControl.cs
- TcpTransportBindingElement.cs
- NativeObjectSecurity.cs
- InProcStateClientManager.cs
- TypeElement.cs
- ClientTargetCollection.cs
- TimeSpanParse.cs
- RepeaterItem.cs
- ProjectionCamera.cs
- ValidatorUtils.cs
- ProjectionRewriter.cs
- HttpApplication.cs
- TabItemWrapperAutomationPeer.cs
- SecureStringHasher.cs
- ActivityMarkupSerializationProvider.cs
- DrawingAttributes.cs
- behaviorssection.cs
- HttpHandlerAction.cs
- HttpRequest.cs
- GridViewCommandEventArgs.cs
- XmlReturnWriter.cs
- EpmSourceTree.cs
- WebPartPersonalization.cs
- GPPOINTF.cs
- WindowProviderWrapper.cs
- ArraySegment.cs
- SqlOuterApplyReducer.cs
- CurrentTimeZone.cs
- Rect3D.cs
- CatalogZone.cs
- CurrencyManager.cs
- TypeConverterHelper.cs
- Decoder.cs
- InstanceHandleReference.cs
- TreeNodeBindingCollection.cs
- MimeImporter.cs
- XmlKeywords.cs
- MobilePage.cs
- ToolBarButtonClickEvent.cs
- ClientScriptManagerWrapper.cs
- CategoryAttribute.cs
- LocationReference.cs
- SystemWebSectionGroup.cs
- EntityConnectionStringBuilderItem.cs
- ColumnReorderedEventArgs.cs
- DateTimeOffset.cs
- FormatConvertedBitmap.cs
- SafeSecurityHelper.cs
- ViewgenContext.cs
- VirtualPathProvider.cs
- smtppermission.cs
- ITreeGenerator.cs
- FlowDocumentPage.cs