Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / XmlUtils / System / Xml / Xsl / QIL / QilReplaceVisitor.cs / 1 / 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 (!Ref.Equals(oldChild, newChild) || (newChild != null && !Ref.Equals(oldChildType, 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. //------------------------------------------------------------------------------ //// 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 (!Ref.Equals(oldChild, newChild) || (newChild != null && !Ref.Equals(oldChildType, 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
- _UriSyntax.cs
- Condition.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- CodeNamespaceCollection.cs
- TreeChangeInfo.cs
- BitArray.cs
- ScriptingProfileServiceSection.cs
- RepeaterItemCollection.cs
- XmlDataDocument.cs
- ThrowHelper.cs
- UrlAuthFailedErrorFormatter.cs
- StatusBarDesigner.cs
- BoundColumn.cs
- SessionStateContainer.cs
- ProtocolsInstallComponent.cs
- XmlKeywords.cs
- EndpointIdentityConverter.cs
- XmlNamespaceMapping.cs
- SpecularMaterial.cs
- ProxyRpc.cs
- MarginsConverter.cs
- ListBoxAutomationPeer.cs
- ToolBarOverflowPanel.cs
- ModuleBuilder.cs
- DetailsViewRowCollection.cs
- TrackingCondition.cs
- designeractionlistschangedeventargs.cs
- DrawingContextDrawingContextWalker.cs
- DataGridViewColumn.cs
- SequentialOutput.cs
- safex509handles.cs
- SchemaImporterExtensionsSection.cs
- WindowsRebar.cs
- TimeSpanValidator.cs
- TransformerInfo.cs
- DataContractJsonSerializer.cs
- DataGridBoolColumn.cs
- CodeNamespace.cs
- ExtractorMetadata.cs
- ConstraintEnumerator.cs
- UrlMappingsSection.cs
- ComponentConverter.cs
- embossbitmapeffect.cs
- CustomTrackingQuery.cs
- DesignerActionList.cs
- ConnectionManagementElement.cs
- AmbientProperties.cs
- Tablet.cs
- HtmlEncodedRawTextWriter.cs
- ImageSourceConverter.cs
- RemoteWebConfigurationHostStream.cs
- Html32TextWriter.cs
- QuaternionAnimationBase.cs
- DataRelationCollection.cs
- AssemblySettingAttributes.cs
- StateMachineWorkflowDesigner.cs
- Material.cs
- SafeLocalAllocation.cs
- ProtectedConfiguration.cs
- TemplateFactory.cs
- Column.cs
- PointCollection.cs
- CryptoHelper.cs
- XmlLinkedNode.cs
- StructuralCache.cs
- RemotingServices.cs
- PartialClassGenerationTask.cs
- IntegerValidatorAttribute.cs
- KeyValueConfigurationElement.cs
- MimeMapping.cs
- NodeFunctions.cs
- WCFServiceClientProxyGenerator.cs
- WebPartExportVerb.cs
- EdmValidator.cs
- KnowledgeBase.cs
- CheckPair.cs
- SingleResultAttribute.cs
- assemblycache.cs
- XmlEnumAttribute.cs
- TypeSystem.cs
- Input.cs
- SelectedGridItemChangedEvent.cs
- PolicyValidationException.cs
- _BufferOffsetSize.cs
- RC2CryptoServiceProvider.cs
- ImageInfo.cs
- ReadWriteObjectLock.cs
- TextEncodedRawTextWriter.cs
- DataGridHeaderBorder.cs
- RIPEMD160.cs
- EntityParameter.cs
- CustomLineCap.cs
- ClipboardData.cs
- DesignerLoader.cs
- InvokePatternIdentifiers.cs
- DesignerProperties.cs
- Code.cs
- DocumentPaginator.cs
- TransactedBatchContext.cs
- IssuedTokenClientBehaviorsElement.cs