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
- SecurityContext.cs
- DataGridViewRowConverter.cs
- ScriptingAuthenticationServiceSection.cs
- IndexedString.cs
- Effect.cs
- GlyphShapingProperties.cs
- ListViewCancelEventArgs.cs
- TextTreeNode.cs
- LZCodec.cs
- SymbolType.cs
- DispatcherSynchronizationContext.cs
- WebEventTraceProvider.cs
- ImageButton.cs
- XsdDateTime.cs
- StringResourceManager.cs
- CategoryNameCollection.cs
- NameValuePermission.cs
- StringUtil.cs
- CatalogPartChrome.cs
- PartialClassGenerationTask.cs
- DataGridViewButtonCell.cs
- LoginName.cs
- ping.cs
- MergeFailedEvent.cs
- MenuItemBinding.cs
- DataRowChangeEvent.cs
- HostedNamedPipeTransportManager.cs
- StaticFileHandler.cs
- OpCodes.cs
- UnsafeNativeMethods.cs
- HtmlInputText.cs
- DataControlPagerLinkButton.cs
- XmlSchemaChoice.cs
- Material.cs
- AutoCompleteStringCollection.cs
- ThicknessKeyFrameCollection.cs
- CompiledXpathExpr.cs
- ApplicationContext.cs
- DecoderNLS.cs
- TextBoxLine.cs
- StyleSheetComponentEditor.cs
- BrowserDefinition.cs
- DataGridViewHitTestInfo.cs
- MenuCommand.cs
- ScrollData.cs
- OperatorExpressions.cs
- PassportAuthenticationEventArgs.cs
- MessageAction.cs
- TypeContext.cs
- TextAutomationPeer.cs
- TextEditorCharacters.cs
- xmlglyphRunInfo.cs
- AxisAngleRotation3D.cs
- DocumentPage.cs
- Boolean.cs
- Encoding.cs
- PriorityQueue.cs
- Calendar.cs
- Point.cs
- TraceProvider.cs
- BypassElement.cs
- PageAsyncTaskManager.cs
- ExceptionUtil.cs
- MissingSatelliteAssemblyException.cs
- CookieParameter.cs
- ConsoleCancelEventArgs.cs
- LogFlushAsyncResult.cs
- VectorCollectionConverter.cs
- KeyedCollection.cs
- SmiTypedGetterSetter.cs
- GlobalProxySelection.cs
- MimeWriter.cs
- Executor.cs
- AccessibleObject.cs
- ScrollChrome.cs
- Stylesheet.cs
- SignatureToken.cs
- TraceContext.cs
- StylusPointPropertyInfoDefaults.cs
- ConnectionString.cs
- SqlDataSourceConfigureFilterForm.cs
- Drawing.cs
- LinearKeyFrames.cs
- FamilyMap.cs
- CategoryNameCollection.cs
- CallbackValidator.cs
- _AutoWebProxyScriptHelper.cs
- Vector3DCollection.cs
- FixedSOMTableCell.cs
- TileBrush.cs
- SiteMapNodeCollection.cs
- HyperLinkField.cs
- ChannelManager.cs
- ExtendedProperty.cs
- SerialReceived.cs
- EventLogTraceListener.cs
- TableDetailsCollection.cs
- MarkupWriter.cs
- FilterElement.cs
- TemplatedWizardStep.cs