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
- SessionState.cs
- BitmapEffectInputData.cs
- EdmMember.cs
- EntityTemplateUserControl.cs
- XmlTypeMapping.cs
- ETagAttribute.cs
- TextEditorParagraphs.cs
- BuildManager.cs
- SocketException.cs
- StackBuilderSink.cs
- _NetRes.cs
- EntityCommandDefinition.cs
- HandlerBase.cs
- iisPickupDirectory.cs
- DataRelation.cs
- ScaleTransform3D.cs
- AbsoluteQuery.cs
- SystemWebCachingSectionGroup.cs
- MsmqTransportBindingElement.cs
- ExceptionHandler.cs
- NetworkInterface.cs
- SpeechEvent.cs
- BindingNavigator.cs
- SessionPageStateSection.cs
- Repeater.cs
- CellLabel.cs
- DoubleConverter.cs
- QueryOutputWriter.cs
- StringConcat.cs
- ITextView.cs
- StateWorkerRequest.cs
- ScrollItemPattern.cs
- WebAdminConfigurationHelper.cs
- ContainerVisual.cs
- TimerEventSubscriptionCollection.cs
- SizeChangedEventArgs.cs
- KeyInterop.cs
- EntityConnection.cs
- TraceSwitch.cs
- EntityDataSourceChangedEventArgs.cs
- SecurityContext.cs
- Floater.cs
- JsonSerializer.cs
- DynamicContractTypeBuilder.cs
- Page.cs
- TextRunTypographyProperties.cs
- Compiler.cs
- XhtmlConformanceSection.cs
- PixelShader.cs
- XmlSchemaSimpleContentExtension.cs
- dataSvcMapFileLoader.cs
- PropertySourceInfo.cs
- ListViewInsertedEventArgs.cs
- UnhandledExceptionEventArgs.cs
- ListBoxItemWrapperAutomationPeer.cs
- CollectionBuilder.cs
- HeaderPanel.cs
- DataControlField.cs
- XsltFunctions.cs
- UpdateEventArgs.cs
- TypeUtil.cs
- ManifestBasedResourceGroveler.cs
- PointF.cs
- ContainerSelectorActiveEvent.cs
- FirewallWrapper.cs
- ParseHttpDate.cs
- MediaContextNotificationWindow.cs
- SevenBitStream.cs
- IItemContainerGenerator.cs
- DefaultTraceListener.cs
- TextPointer.cs
- RoutedUICommand.cs
- CatalogPart.cs
- WinInet.cs
- GradientBrush.cs
- NativeObjectSecurity.cs
- ArgumentFixer.cs
- X509Extension.cs
- ProfileBuildProvider.cs
- XmlNamespaceMappingCollection.cs
- MarkupObject.cs
- WebPartConnectionsCancelEventArgs.cs
- MatrixAnimationBase.cs
- VScrollBar.cs
- PreviousTrackingServiceAttribute.cs
- StrongNameUtility.cs
- ByteAnimationUsingKeyFrames.cs
- UmAlQuraCalendar.cs
- WindowsBrush.cs
- SerialPort.cs
- GPRECTF.cs
- WeakReadOnlyCollection.cs
- SelectionListDesigner.cs
- InvalidPropValue.cs
- Assert.cs
- HostingEnvironment.cs
- SoapHeaderAttribute.cs
- ControlPropertyNameConverter.cs
- ParallelTimeline.cs
- StoreUtilities.cs