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
- SetStoryboardSpeedRatio.cs
- WebBrowserContainer.cs
- SymmetricKey.cs
- WebPartConnectionsCloseVerb.cs
- PointF.cs
- KeyEvent.cs
- SystemFonts.cs
- HelpInfo.cs
- TreeNodeConverter.cs
- DependencyObject.cs
- SiteMapDataSource.cs
- ArgumentOutOfRangeException.cs
- mactripleDES.cs
- HwndProxyElementProvider.cs
- CodeNamespaceImportCollection.cs
- GridViewRowCollection.cs
- Simplifier.cs
- DateTimeAutomationPeer.cs
- InheritedPropertyChangedEventArgs.cs
- RequestTimeoutManager.cs
- InputMethod.cs
- TargetInvocationException.cs
- TreeNode.cs
- CopyNodeSetAction.cs
- ColorInterpolationModeValidation.cs
- SamlAction.cs
- Stack.cs
- ExceptionHandler.cs
- DbReferenceCollection.cs
- ReadOnlyDataSource.cs
- ScalarOps.cs
- Span.cs
- SignedInfo.cs
- GACIdentityPermission.cs
- PropertySourceInfo.cs
- WriteTimeStream.cs
- XmlValidatingReader.cs
- XamlPathDataSerializer.cs
- LogAppendAsyncResult.cs
- GenericTypeParameterBuilder.cs
- CheckBox.cs
- DataGridToolTip.cs
- entitydatasourceentitysetnameconverter.cs
- FrameSecurityDescriptor.cs
- WebPartUserCapability.cs
- ScriptManagerProxy.cs
- EncoderNLS.cs
- UserPersonalizationStateInfo.cs
- WmpBitmapDecoder.cs
- MatrixConverter.cs
- ThemeDirectoryCompiler.cs
- RegexWriter.cs
- PathFigure.cs
- Clock.cs
- Panel.cs
- LoginView.cs
- AdornedElementPlaceholder.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- TriState.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- ListMarkerLine.cs
- SharedPerformanceCounter.cs
- _SslState.cs
- DataBoundControlHelper.cs
- ExpressionWriter.cs
- HtmlWindow.cs
- TraceContextEventArgs.cs
- XmlSerializerFactory.cs
- XamlTemplateSerializer.cs
- XmlSchemaElement.cs
- StreamUpgradeBindingElement.cs
- AsyncPostBackErrorEventArgs.cs
- pingexception.cs
- RenderData.cs
- XmlSchemaSubstitutionGroup.cs
- MenuAutomationPeer.cs
- DbParameterCollection.cs
- FixedSOMTableCell.cs
- PersistChildrenAttribute.cs
- DependencyPropertyDescriptor.cs
- TreeNodeCollection.cs
- cookiecontainer.cs
- ValidatedControlConverter.cs
- DataServiceHostFactory.cs
- CircleEase.cs
- WebDisplayNameAttribute.cs
- PolyBezierSegment.cs
- DispatcherHookEventArgs.cs
- XPathMultyIterator.cs
- ConstraintConverter.cs
- EventPropertyMap.cs
- InfoCardService.cs
- IndexingContentUnit.cs
- WebDescriptionAttribute.cs
- FlowDecisionDesigner.xaml.cs
- DiagnosticsConfigurationHandler.cs
- Util.cs
- ContextStack.cs
- StringUtil.cs
- CheckBox.cs