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
- FixUp.cs
- QueryableDataSource.cs
- RowType.cs
- ControlCollection.cs
- IntellisenseTextBox.cs
- RelatedCurrencyManager.cs
- D3DImage.cs
- DefaultAsyncDataDispatcher.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- HandoffBehavior.cs
- SafeSecurityHelper.cs
- ConcurrencyMode.cs
- RadioButton.cs
- ISessionStateStore.cs
- CompareValidator.cs
- WebBrowserNavigatingEventHandler.cs
- ToolStripCodeDomSerializer.cs
- DataViewManagerListItemTypeDescriptor.cs
- DataRowCollection.cs
- SrgsRule.cs
- IteratorFilter.cs
- RuntimeEnvironment.cs
- RemotingException.cs
- ResizeGrip.cs
- DirectionalLight.cs
- SqlNode.cs
- BindableTemplateBuilder.cs
- SessionConnectionReader.cs
- RepeatButtonAutomationPeer.cs
- BoundColumn.cs
- ColorConvertedBitmap.cs
- DataContractAttribute.cs
- EventData.cs
- BooleanStorage.cs
- BackgroundFormatInfo.cs
- RoleBoolean.cs
- StringFreezingAttribute.cs
- MinMaxParagraphWidth.cs
- ViewCellRelation.cs
- CatalogPart.cs
- XPathScanner.cs
- BrowserTree.cs
- CorePropertiesFilter.cs
- WebPartAddingEventArgs.cs
- QueryOperationResponseOfT.cs
- BuildProvider.cs
- _TimerThread.cs
- TransferRequestHandler.cs
- StreamSecurityUpgradeAcceptorAsyncResult.cs
- ScrollContentPresenter.cs
- ExpressionVisitorHelpers.cs
- View.cs
- RelativeSource.cs
- DataGrid.cs
- EntityClassGenerator.cs
- Misc.cs
- AssemblyBuilderData.cs
- SurrogateSelector.cs
- DataGridViewColumn.cs
- RequestValidator.cs
- SoapFault.cs
- ChangeProcessor.cs
- TableItemStyle.cs
- StrokeFIndices.cs
- CheckBox.cs
- PrintDialogException.cs
- SystemUdpStatistics.cs
- WrappedIUnknown.cs
- HierarchicalDataSourceIDConverter.cs
- StatusBarAutomationPeer.cs
- WebPartsPersonalizationAuthorization.cs
- MulticastNotSupportedException.cs
- CommandDevice.cs
- SqlConnectionStringBuilder.cs
- PostBackTrigger.cs
- Message.cs
- UnsafeMethods.cs
- PasswordDeriveBytes.cs
- ListSortDescription.cs
- DesignerWithHeader.cs
- ExternalCalls.cs
- ChtmlPageAdapter.cs
- WorkItem.cs
- DataGridCaption.cs
- StringOutput.cs
- Quaternion.cs
- TransformationRules.cs
- _ListenerAsyncResult.cs
- VirtualPathUtility.cs
- util.cs
- SqlCrossApplyToCrossJoin.cs
- EntitySqlQueryState.cs
- ICspAsymmetricAlgorithm.cs
- VideoDrawing.cs
- DataGridViewImageColumn.cs
- RightsManagementEncryptionTransform.cs
- Hash.cs
- BaseAddressPrefixFilterElementCollection.cs
- WebPartConnectionsCancelEventArgs.cs
- sqlstateclientmanager.cs