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
- DefaultProxySection.cs
- Encoding.cs
- NamedPipeTransportManager.cs
- TextEmbeddedObject.cs
- SendKeys.cs
- AssertSection.cs
- TextRangeEditTables.cs
- GatewayIPAddressInformationCollection.cs
- Filter.cs
- FileDialog_Vista_Interop.cs
- IERequestCache.cs
- WorkflowServiceAttributesTypeConverter.cs
- Renderer.cs
- Task.cs
- OperationContext.cs
- WebPartConnectVerb.cs
- streamingZipPartStream.cs
- ListDataHelper.cs
- BeginStoryboard.cs
- ThreadStartException.cs
- odbcmetadatacolumnnames.cs
- XPathScanner.cs
- HttpModule.cs
- SystemResourceKey.cs
- DesignerWithHeader.cs
- XmlSignatureManifest.cs
- SqlDataSourceFilteringEventArgs.cs
- ConfigurationSectionHelper.cs
- DataServiceEntityAttribute.cs
- DataGridViewRowCancelEventArgs.cs
- CompositionTarget.cs
- sortedlist.cs
- CodeAssignStatement.cs
- SessionStateItemCollection.cs
- PolicyException.cs
- SimpleWebHandlerParser.cs
- MD5CryptoServiceProvider.cs
- TransformConverter.cs
- UmAlQuraCalendar.cs
- CurrencyManager.cs
- PersistenceException.cs
- PolyBezierSegmentFigureLogic.cs
- TableRowGroupCollection.cs
- _HTTPDateParse.cs
- CollectionTypeElement.cs
- WithStatement.cs
- SafeProcessHandle.cs
- Model3D.cs
- ConstrainedGroup.cs
- CollectionContainer.cs
- AppSettingsReader.cs
- LinqDataSourceView.cs
- ThousandthOfEmRealPoints.cs
- SettingsPropertyValueCollection.cs
- Point3DAnimationUsingKeyFrames.cs
- XPathParser.cs
- XmlSchemaException.cs
- EntityObject.cs
- RegisteredHiddenField.cs
- FormsAuthenticationConfiguration.cs
- GroupBoxAutomationPeer.cs
- PathSegmentCollection.cs
- ChannelReliableSession.cs
- SvcMapFile.cs
- RequestQueue.cs
- PeerName.cs
- SectionXmlInfo.cs
- ExceptionValidationRule.cs
- WpfWebRequestHelper.cs
- MessageSmuggler.cs
- RelationshipEndCollection.cs
- AuthenticationConfig.cs
- XmlEventCache.cs
- DesignerRegion.cs
- WindowsGraphics.cs
- TextTabProperties.cs
- DesignBindingValueUIHandler.cs
- EventManager.cs
- WmlSelectionListAdapter.cs
- SqlProcedureAttribute.cs
- ContainerFilterService.cs
- XmlTextWriter.cs
- RegistrationServices.cs
- TreeViewImageIndexConverter.cs
- WebPartUserCapability.cs
- MsmqDiagnostics.cs
- RepeatBehaviorConverter.cs
- AssemblyCollection.cs
- PageAsyncTask.cs
- ParentControlDesigner.cs
- LineServices.cs
- RegistryKey.cs
- Subordinate.cs
- columnmapkeybuilder.cs
- DynamicResourceExtension.cs
- UserControlBuildProvider.cs
- ModifierKeysValueSerializer.cs
- ChildrenQuery.cs
- Executor.cs
- EntityException.cs