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
- Expression.cs
- FlowLayoutPanel.cs
- RemotingSurrogateSelector.cs
- PointUtil.cs
- NavigatingCancelEventArgs.cs
- ComponentConverter.cs
- GACMembershipCondition.cs
- EventDrivenDesigner.cs
- XmlLinkedNode.cs
- XmlNamespaceMapping.cs
- InteropAutomationProvider.cs
- MouseGestureConverter.cs
- SafeNativeMethods.cs
- XmlDataSourceView.cs
- IIS7WorkerRequest.cs
- ServiceCredentialsElement.cs
- DebugHandleTracker.cs
- GlobalAllocSafeHandle.cs
- ListItemParagraph.cs
- SafeNativeMethods.cs
- BlockUIContainer.cs
- SystemNetHelpers.cs
- ConfigurationElementCollection.cs
- ProxyAttribute.cs
- ColorMap.cs
- DesignerDataView.cs
- MarginCollapsingState.cs
- CollectionDataContract.cs
- XmlSchemaAnnotated.cs
- ExpandSegment.cs
- UnauthorizedWebPart.cs
- Types.cs
- InternalBufferOverflowException.cs
- SpeechEvent.cs
- ImmutablePropertyDescriptorGridEntry.cs
- Rotation3DAnimationUsingKeyFrames.cs
- ModelFunctionTypeElement.cs
- PtsHost.cs
- ConstraintStruct.cs
- NotificationContext.cs
- StaticSiteMapProvider.cs
- CalendarDesigner.cs
- DataGridViewCellStyleConverter.cs
- TextEffect.cs
- TableRow.cs
- WindowsStatusBar.cs
- SecurityTokenProviderContainer.cs
- SyntaxCheck.cs
- DropDownList.cs
- SafeHandles.cs
- SqlFactory.cs
- MetafileHeaderWmf.cs
- OptimizerPatterns.cs
- PageParser.cs
- RadioButtonAutomationPeer.cs
- DataSourceView.cs
- DependencyPropertyValueSerializer.cs
- JsonDataContract.cs
- TreeNodeCollectionEditor.cs
- TransformerInfoCollection.cs
- CombinedGeometry.cs
- ArgumentNullException.cs
- ValidationErrorCollection.cs
- TraceSwitch.cs
- TransactionBridge.cs
- XmlQueryOutput.cs
- AnonymousIdentificationModule.cs
- SqlCacheDependencyDatabase.cs
- DataShape.cs
- BitmapSource.cs
- wgx_exports.cs
- BaseCollection.cs
- Column.cs
- DependencyPropertyKind.cs
- RectAnimationUsingKeyFrames.cs
- NamespaceQuery.cs
- ListViewItem.cs
- CompositeFontInfo.cs
- PropertyChangedEventManager.cs
- __Filters.cs
- WebPartCancelEventArgs.cs
- ResourceBinder.cs
- DataGridColumnDropSeparator.cs
- ImplicitInputBrush.cs
- Part.cs
- UnsafeNativeMethods.cs
- DataGridCell.cs
- ManagedWndProcTracker.cs
- CodeIdentifiers.cs
- Context.cs
- RowToFieldTransformer.cs
- FilteredSchemaElementLookUpTable.cs
- ProfessionalColors.cs
- UserPersonalizationStateInfo.cs
- Bold.cs
- PasswordDeriveBytes.cs
- TextEditorThreadLocalStore.cs
- NameValuePermission.cs
- BrowserDefinition.cs
- ConcatQueryOperator.cs