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
- ListenerElementsCollection.cs
- SymbolType.cs
- SQLInt16.cs
- UmAlQuraCalendar.cs
- GuidelineCollection.cs
- BuildProvider.cs
- DefaultTextStoreTextComposition.cs
- FontStyles.cs
- DirtyTextRange.cs
- ResourceDisplayNameAttribute.cs
- RegistryKey.cs
- CommandValueSerializer.cs
- EventlogProvider.cs
- JoinCqlBlock.cs
- SystemUdpStatistics.cs
- SelectionRange.cs
- TextEndOfLine.cs
- SessionStateContainer.cs
- ConnectionProviderAttribute.cs
- AnnotationComponentManager.cs
- brushes.cs
- VariableQuery.cs
- LoginView.cs
- COMException.cs
- SemaphoreFullException.cs
- DoWorkEventArgs.cs
- ProvidersHelper.cs
- HttpCachePolicyWrapper.cs
- CallbackValidator.cs
- VisualBrush.cs
- CommonRemoteMemoryBlock.cs
- SelectionItemProviderWrapper.cs
- SqlRecordBuffer.cs
- nulltextnavigator.cs
- DataTableReader.cs
- TemplateContent.cs
- CharKeyFrameCollection.cs
- ContentWrapperAttribute.cs
- DataGridItem.cs
- RawTextInputReport.cs
- XmlText.cs
- UnsafeNetInfoNativeMethods.cs
- IisTraceWebEventProvider.cs
- EventHandlerList.cs
- ProxyHwnd.cs
- TextTreeTextNode.cs
- CachedPathData.cs
- SessionEndedEventArgs.cs
- WindowInteractionStateTracker.cs
- ObjectViewQueryResultData.cs
- Baml2006ReaderContext.cs
- TemplateLookupAction.cs
- FragmentQueryKB.cs
- Mappings.cs
- BindStream.cs
- SafeEventHandle.cs
- ClientFormsAuthenticationCredentials.cs
- MexHttpBindingElement.cs
- ScriptingProfileServiceSection.cs
- QueryAccessibilityHelpEvent.cs
- WebPartChrome.cs
- DataBoundControlActionList.cs
- ComponentCollection.cs
- ReservationCollection.cs
- TargetParameterCountException.cs
- ScaleTransform.cs
- FusionWrap.cs
- LineInfo.cs
- WhitespaceRuleLookup.cs
- TypedDataSetSchemaImporterExtension.cs
- RightsManagementProvider.cs
- DataTableCollection.cs
- _BaseOverlappedAsyncResult.cs
- storagemappingitemcollection.viewdictionary.cs
- __FastResourceComparer.cs
- PermissionRequestEvidence.cs
- FormViewRow.cs
- SqlServices.cs
- WindowsProgressbar.cs
- TextParaLineResult.cs
- SystemEvents.cs
- SafeNativeMethods.cs
- Journal.cs
- WpfPayload.cs
- DataGridViewTextBoxEditingControl.cs
- FileDialogPermission.cs
- MethodBuilderInstantiation.cs
- DefaultObjectMappingItemCollection.cs
- TreeViewCancelEvent.cs
- DataErrorValidationRule.cs
- DocumentSequence.cs
- GridViewRowCollection.cs
- CodeNamespaceImport.cs
- SqlDataReaderSmi.cs
- Int32AnimationBase.cs
- CodeLinePragma.cs
- ReliableChannelListener.cs
- SchemaAttDef.cs
- StaticResourceExtension.cs
- Rect3D.cs