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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CompiledRegexRunnerFactory.cs
- IndependentlyAnimatedPropertyMetadata.cs
- FacetChecker.cs
- XslNumber.cs
- PropertyFilterAttribute.cs
- GlobalAclOperationRequirement.cs
- Configuration.cs
- HttpApplication.cs
- PingReply.cs
- SafeCryptoHandles.cs
- AsyncStreamReader.cs
- QilInvokeEarlyBound.cs
- MenuEventArgs.cs
- LogRecordSequence.cs
- ISessionStateStore.cs
- DBDataPermissionAttribute.cs
- DefaultExpressionVisitor.cs
- TextStore.cs
- NetTcpSecurityElement.cs
- ExceptionRoutedEventArgs.cs
- BmpBitmapEncoder.cs
- OletxVolatileEnlistment.cs
- EntityDataSourceWrapperCollection.cs
- AssemblySettingAttributes.cs
- HttpValueCollection.cs
- IntSecurity.cs
- UnsafeNativeMethods.cs
- TraceSection.cs
- CompilerTypeWithParams.cs
- ListViewTableRow.cs
- BuildResult.cs
- PathGeometry.cs
- ExtendedPropertyCollection.cs
- SqlDataSourceSelectingEventArgs.cs
- ConvertersCollection.cs
- SqlClientWrapperSmiStream.cs
- MdbDataFileEditor.cs
- SpeechSynthesizer.cs
- XmlDocumentType.cs
- DbParameterCollection.cs
- FieldValue.cs
- HierarchicalDataSourceDesigner.cs
- ResourcePart.cs
- DiscoveryServiceExtension.cs
- PrintingPermissionAttribute.cs
- TextDecorationUnitValidation.cs
- login.cs
- ElementMarkupObject.cs
- objectresult_tresulttype.cs
- EditBehavior.cs
- ViewStateException.cs
- SizeChangedInfo.cs
- ColumnMapTranslator.cs
- SelectorItemAutomationPeer.cs
- HitTestFilterBehavior.cs
- DataGridViewHitTestInfo.cs
- ConstructorNeedsTagAttribute.cs
- XPathAncestorQuery.cs
- HTMLTextWriter.cs
- WorkflowCreationContext.cs
- SqlServices.cs
- COM2ExtendedBrowsingHandler.cs
- ObjectContext.cs
- FrameDimension.cs
- Collection.cs
- WebServiceData.cs
- RelatedView.cs
- HtmlMeta.cs
- SortedList.cs
- CurrencyManager.cs
- Int64KeyFrameCollection.cs
- CompatibleIComparer.cs
- XmlDomTextWriter.cs
- RecognizerBase.cs
- TypeGeneratedEventArgs.cs
- UInt64.cs
- PeerApplication.cs
- EventLogEntry.cs
- GridViewCommandEventArgs.cs
- TextStore.cs
- Source.cs
- SupportingTokenDuplexChannel.cs
- TextSegment.cs
- XPathArrayIterator.cs
- ApplySecurityAndSendAsyncResult.cs
- DispatcherHookEventArgs.cs
- RefreshInfo.cs
- RuleProcessor.cs
- MultiPartWriter.cs
- TriggerActionCollection.cs
- TreeView.cs
- DoubleLink.cs
- UIElementIsland.cs
- Utility.cs
- HTMLTextWriter.cs
- SqlUDTStorage.cs
- DrawingImage.cs
- TimeSpanFormat.cs
- infer.cs
- DiffuseMaterial.cs