Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodeCompileUnit.cs
- Comparer.cs
- DocumentGridPage.cs
- Signature.cs
- MexTcpBindingElement.cs
- DataList.cs
- ViewManager.cs
- FormsAuthenticationUser.cs
- EventOpcode.cs
- PartialList.cs
- Misc.cs
- MonitorWrapper.cs
- GeneralTransform3DGroup.cs
- CipherData.cs
- RequestStatusBarUpdateEventArgs.cs
- InternalBufferOverflowException.cs
- ImageAnimator.cs
- MethodSet.cs
- ConnectionManagementElement.cs
- WorkflowPersistenceContext.cs
- DESCryptoServiceProvider.cs
- ThumbAutomationPeer.cs
- QilGenerator.cs
- updatecommandorderer.cs
- SiteMapPath.cs
- UniqueEventHelper.cs
- ColumnResizeUndoUnit.cs
- UserPersonalizationStateInfo.cs
- Page.cs
- Triangle.cs
- AvTraceFormat.cs
- XmlCDATASection.cs
- ConfigurationConverterBase.cs
- XmlNodeChangedEventManager.cs
- SmiRecordBuffer.cs
- DescendantQuery.cs
- QuaternionAnimation.cs
- SyndicationElementExtensionCollection.cs
- OutKeywords.cs
- LocalIdKeyIdentifierClause.cs
- TablePattern.cs
- RelativeSource.cs
- ReadOnlyCollection.cs
- SmtpCommands.cs
- RecognizeCompletedEventArgs.cs
- XmlSchemaValidator.cs
- input.cs
- Bits.cs
- EasingFunctionBase.cs
- ScrollBarAutomationPeer.cs
- panel.cs
- HtmlTableCellCollection.cs
- PeerCustomResolverSettings.cs
- SerializerDescriptor.cs
- FileInfo.cs
- HTMLTagNameToTypeMapper.cs
- OpenTypeLayout.cs
- DbConnectionPoolGroup.cs
- DataGridViewComponentPropertyGridSite.cs
- LocatorManager.cs
- ColorAnimation.cs
- ImportDesigner.xaml.cs
- DefaultValueMapping.cs
- BrushConverter.cs
- Base64Encoder.cs
- DocumentsTrace.cs
- SqlReferenceCollection.cs
- DrawingVisual.cs
- RadioButtonRenderer.cs
- WindowsEditBoxRange.cs
- GeneratedCodeAttribute.cs
- AssemblyInfo.cs
- CacheEntry.cs
- DynamicResourceExtensionConverter.cs
- FullTextState.cs
- ParameterCollection.cs
- ConfigurationSchemaErrors.cs
- ExpressionBuilderCollection.cs
- BeginSelectCardRequest.cs
- _LoggingObject.cs
- DataTrigger.cs
- EncodingNLS.cs
- PageCodeDomTreeGenerator.cs
- SyndicationFeed.cs
- CustomActivityDesigner.cs
- NotifyInputEventArgs.cs
- ConsoleTraceListener.cs
- OpCopier.cs
- NavigateEvent.cs
- TablePatternIdentifiers.cs
- RuleSettingsCollection.cs
- EncryptedKey.cs
- ResolveCriteria11.cs
- DesignerActionTextItem.cs
- XPathBuilder.cs
- CompoundFileIOPermission.cs
- TypeSystemHelpers.cs
- TextBoxLine.cs
- ProcessingInstructionAction.cs
- ContentIterators.cs