Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / XmlUtils / System / Xml / Xsl / QIL / QilReplaceVisitor.cs / 1 / 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 (!Ref.Equals(oldChild, newChild) || (newChild != null && !Ref.Equals(oldChildType, 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. //------------------------------------------------------------------------------ //// 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 (!Ref.Equals(oldChild, newChild) || (newChild != null && !Ref.Equals(oldChildType, 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
- RolePrincipal.cs
- SymmetricAlgorithm.cs
- VScrollBar.cs
- CellTreeNodeVisitors.cs
- ImageMapEventArgs.cs
- InvokeHandlers.cs
- TTSVoice.cs
- DefinitionBase.cs
- ChangesetResponse.cs
- TextDpi.cs
- ClonableStack.cs
- SqlBooleanMismatchVisitor.cs
- AvTraceFormat.cs
- TextStore.cs
- ManipulationDevice.cs
- FactoryMaker.cs
- BamlWriter.cs
- GuidConverter.cs
- FormatException.cs
- LogStream.cs
- DesignerAdapterAttribute.cs
- GridViewSelectEventArgs.cs
- SymmetricKeyWrap.cs
- HttpClientCertificate.cs
- WindowsAuthenticationEventArgs.cs
- RoleGroupCollection.cs
- HtmlHistory.cs
- HttpResponseInternalWrapper.cs
- ColumnHeaderCollectionEditor.cs
- UnsafeNativeMethods.cs
- ProtectedConfigurationSection.cs
- SmtpFailedRecipientException.cs
- DeviceSpecificDesigner.cs
- DeploymentExceptionMapper.cs
- GrowingArray.cs
- DivideByZeroException.cs
- FontWeight.cs
- DynamicRenderer.cs
- Keywords.cs
- XPathCompileException.cs
- SqlAggregateChecker.cs
- PointHitTestResult.cs
- ReturnEventArgs.cs
- Facet.cs
- Geometry3D.cs
- CryptoKeySecurity.cs
- SelectionEditingBehavior.cs
- wgx_exports.cs
- ScriptMethodAttribute.cs
- DataListItemCollection.cs
- SafeProcessHandle.cs
- MasterPageBuildProvider.cs
- DockProviderWrapper.cs
- MemberRelationshipService.cs
- ProviderSettingsCollection.cs
- HyperLink.cs
- HttpModulesSection.cs
- ObjectDataSourceEventArgs.cs
- SingleResultAttribute.cs
- TimelineCollection.cs
- HiddenFieldPageStatePersister.cs
- OutputCacheSettingsSection.cs
- MethodBody.cs
- XamlParser.cs
- DropShadowEffect.cs
- Accessible.cs
- ComplusEndpointConfigContainer.cs
- DataGridSortCommandEventArgs.cs
- FileDataSourceCache.cs
- ParameterCollection.cs
- InvokeHandlers.cs
- SafeSecurityHandles.cs
- PrePrepareMethodAttribute.cs
- WindowAutomationPeer.cs
- _DomainName.cs
- Propagator.cs
- UInt64Converter.cs
- CircleHotSpot.cs
- DetailsViewDeleteEventArgs.cs
- CorrelationResolver.cs
- XmlEntityReference.cs
- Shape.cs
- Margins.cs
- NetworkStream.cs
- ComEventsInfo.cs
- IdleTimeoutMonitor.cs
- UIElementAutomationPeer.cs
- Serializer.cs
- TemplateInstanceAttribute.cs
- DbParameterCollectionHelper.cs
- IconHelper.cs
- TrackBarRenderer.cs
- RegexRunner.cs
- Quaternion.cs
- CapabilitiesState.cs
- DocumentPageView.cs
- RegexReplacement.cs
- WebScriptClientGenerator.cs
- ToolStripRenderer.cs
- FixedSOMPageConstructor.cs