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
- FontUnit.cs
- BufferModeSettings.cs
- XmlSchemas.cs
- UnionExpr.cs
- XmlName.cs
- TypeNameConverter.cs
- ToolStripArrowRenderEventArgs.cs
- ActiveDocumentEvent.cs
- ListViewItem.cs
- ZeroOpNode.cs
- DataGrid.cs
- PartialClassGenerationTask.cs
- sortedlist.cs
- PerspectiveCamera.cs
- UriPrefixTable.cs
- ELinqQueryState.cs
- NullReferenceException.cs
- CurrencyWrapper.cs
- UnsafeNativeMethods.cs
- NotCondition.cs
- FileVersionInfo.cs
- BatchServiceHost.cs
- XmlSchemaAppInfo.cs
- TextHidden.cs
- ExpandCollapseIsCheckedConverter.cs
- DataBindingExpressionBuilder.cs
- CharEntityEncoderFallback.cs
- Literal.cs
- ClientTargetSection.cs
- AutomationPropertyInfo.cs
- sqlpipe.cs
- Visual3D.cs
- DataTableReaderListener.cs
- ErrorWrapper.cs
- StringUtil.cs
- DelegateHelpers.cs
- MediaCommands.cs
- ViewStateException.cs
- Calendar.cs
- DataSvcMapFile.cs
- FixedSOMPageConstructor.cs
- ISAPIApplicationHost.cs
- DataDocumentXPathNavigator.cs
- InvokeFunc.cs
- PersonalizationProviderCollection.cs
- SqlDataSourceFilteringEventArgs.cs
- OutputCacheEntry.cs
- LinkTarget.cs
- UInt64Storage.cs
- ISAPIWorkerRequest.cs
- PersistChildrenAttribute.cs
- DBConnectionString.cs
- SqlProviderServices.cs
- LocalFileSettingsProvider.cs
- DateTimePicker.cs
- RemoteWebConfigurationHostStream.cs
- TokenFactoryCredential.cs
- RadioButton.cs
- SQLMoneyStorage.cs
- PartialTrustVisibleAssembly.cs
- KeyPressEvent.cs
- ArgumentsParser.cs
- ConfigurationSectionCollection.cs
- localization.cs
- FormViewModeEventArgs.cs
- RangeEnumerable.cs
- CapabilitiesUse.cs
- EasingKeyFrames.cs
- UserControl.cs
- log.cs
- PseudoWebRequest.cs
- WebBrowserNavigatedEventHandler.cs
- WebServiceErrorEvent.cs
- SafeSecurityHelper.cs
- SafeArchiveContext.cs
- ValueType.cs
- ContractReference.cs
- DispatcherSynchronizationContext.cs
- AssertHelper.cs
- MarkupCompilePass2.cs
- WebResourceAttribute.cs
- Int32.cs
- PreviewKeyDownEventArgs.cs
- ParameterReplacerVisitor.cs
- CommandLineParser.cs
- ToolStripItemImageRenderEventArgs.cs
- BooleanKeyFrameCollection.cs
- SoapIgnoreAttribute.cs
- BigInt.cs
- WebServiceTypeData.cs
- CodeParameterDeclarationExpressionCollection.cs
- ToggleProviderWrapper.cs
- ProxyAttribute.cs
- AuthenticationModuleElementCollection.cs
- TextProviderWrapper.cs
- ProfileGroupSettings.cs
- DelegatingTypeDescriptionProvider.cs
- ProjectedSlot.cs
- LinqDataSourceEditData.cs
- SmtpLoginAuthenticationModule.cs