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
- NonVisualControlAttribute.cs
- ParserOptions.cs
- XmlSchema.cs
- SpecialFolderEnumConverter.cs
- HorizontalAlignConverter.cs
- DiagnosticTraceSource.cs
- SQLMoneyStorage.cs
- XmlSigningNodeWriter.cs
- WebPartHeaderCloseVerb.cs
- WriteFileContext.cs
- DataGridViewRowEventArgs.cs
- DataGridViewComboBoxEditingControl.cs
- TraceContextEventArgs.cs
- ContextMenu.cs
- XmlDataDocument.cs
- WebBrowserBase.cs
- OleDbErrorCollection.cs
- WMICapabilities.cs
- ReferenceSchema.cs
- MethodBuilderInstantiation.cs
- QueryOptionExpression.cs
- ServiceHostingEnvironment.cs
- GradientStop.cs
- CodeMemberProperty.cs
- HwndSubclass.cs
- Mapping.cs
- QilParameter.cs
- BlockUIContainer.cs
- MouseGestureValueSerializer.cs
- PcmConverter.cs
- TextParagraphView.cs
- HashHelper.cs
- NameValueCollection.cs
- TransportDefaults.cs
- QilInvokeEarlyBound.cs
- NameValueSectionHandler.cs
- Control.cs
- ToolStripItemRenderEventArgs.cs
- UnknownBitmapDecoder.cs
- UnsafeNativeMethods.cs
- WorkflowDesigner.cs
- StylusPointProperties.cs
- CodeDelegateInvokeExpression.cs
- SuppressMergeCheckAttribute.cs
- TextShapeableCharacters.cs
- ImageAutomationPeer.cs
- RemoteArgument.cs
- WebPartChrome.cs
- WebPartConnectVerb.cs
- CacheOutputQuery.cs
- StyleTypedPropertyAttribute.cs
- Repeater.cs
- OfTypeExpression.cs
- BaseAppDomainProtocolHandler.cs
- ImageAutomationPeer.cs
- CompareValidator.cs
- HttpCapabilitiesBase.cs
- TouchesCapturedWithinProperty.cs
- FontUnitConverter.cs
- XmlSchemaComplexContentRestriction.cs
- SimpleLine.cs
- ArrayConverter.cs
- BitmapData.cs
- IteratorAsyncResult.cs
- RowBinding.cs
- DataGridViewComponentPropertyGridSite.cs
- parserscommon.cs
- XmlSortKeyAccumulator.cs
- EncoderExceptionFallback.cs
- ArgumentException.cs
- Separator.cs
- ValidationManager.cs
- ComponentEvent.cs
- GeneralTransform2DTo3DTo2D.cs
- RegexInterpreter.cs
- UnsafeNativeMethodsPenimc.cs
- WebSysDisplayNameAttribute.cs
- OleAutBinder.cs
- RequestResizeEvent.cs
- InternalDuplexBindingElement.cs
- XmlSchemaSimpleContentRestriction.cs
- DocumentScope.cs
- CornerRadiusConverter.cs
- RuleDefinitions.cs
- COM2ExtendedTypeConverter.cs
- ErrorFormatter.cs
- EndOfStreamException.cs
- ReadOnlyDictionary.cs
- InternalTypeHelper.cs
- ISSmlParser.cs
- DataServiceQueryException.cs
- querybuilder.cs
- CacheAxisQuery.cs
- ButtonRenderer.cs
- KnownTypesProvider.cs
- AttributeCollection.cs
- MenuStrip.cs
- ScrollViewerAutomationPeer.cs
- PenThread.cs
- LocalTransaction.cs