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
- FormatStringEditor.cs
- RegexGroup.cs
- TimeSpanHelper.cs
- ForeignConstraint.cs
- EffectiveValueEntry.cs
- PagePropertiesChangingEventArgs.cs
- Separator.cs
- UserMapPath.cs
- UnicodeEncoding.cs
- DynamicPropertyHolder.cs
- SqlGenerator.cs
- MsmqAppDomainProtocolHandler.cs
- safex509handles.cs
- TransformConverter.cs
- StrokeFIndices.cs
- WindowsImpersonationContext.cs
- DynamicDataManager.cs
- SynchronizedDispatch.cs
- ExtentJoinTreeNode.cs
- LineServices.cs
- MeshGeometry3D.cs
- BooleanKeyFrameCollection.cs
- PackageRelationshipSelector.cs
- MetricEntry.cs
- IntegerValidator.cs
- SecurityResources.cs
- AppSettingsExpressionBuilder.cs
- StringToken.cs
- ScalarOps.cs
- GridViewItemAutomationPeer.cs
- OleDbCommand.cs
- UInt32.cs
- NativeBuffer.cs
- Vector3D.cs
- DbConnectionPool.cs
- HitTestFilterBehavior.cs
- ButtonFlatAdapter.cs
- NameValuePermission.cs
- ColorConverter.cs
- RefreshPropertiesAttribute.cs
- Vector3DAnimationBase.cs
- QuaternionAnimation.cs
- SelectionListDesigner.cs
- WebControlToolBoxItem.cs
- EmptyWorkItem.cs
- WorkflowEnvironment.cs
- PartialTrustVisibleAssembliesSection.cs
- Variant.cs
- Color.cs
- DialogWindow.cs
- MachineKeySection.cs
- LeafCellTreeNode.cs
- figurelengthconverter.cs
- WorkflowInstance.cs
- Html32TextWriter.cs
- ToolStripGripRenderEventArgs.cs
- CodeNamespaceImportCollection.cs
- SymbolType.cs
- BasicHttpBindingCollectionElement.cs
- entityreference_tresulttype.cs
- AxParameterData.cs
- BlockCollection.cs
- ActivityExecutionContextCollection.cs
- ConfigDefinitionUpdates.cs
- _FixedSizeReader.cs
- ColorTransform.cs
- DataSvcMapFile.cs
- DefinitionBase.cs
- RegisteredDisposeScript.cs
- EventLogInternal.cs
- TableLayoutPanelCellPosition.cs
- Stackframe.cs
- SettingsPropertyIsReadOnlyException.cs
- UnsafeNativeMethods.cs
- ContentTextAutomationPeer.cs
- ExpressionConverter.cs
- ApplicationTrust.cs
- WmpBitmapDecoder.cs
- ProviderSettingsCollection.cs
- PerSessionInstanceContextProvider.cs
- Separator.cs
- ObjectTag.cs
- TemplatePropertyEntry.cs
- TeredoHelper.cs
- PersonalizationProvider.cs
- TraceContext.cs
- MediaContextNotificationWindow.cs
- TypeUsageBuilder.cs
- TrustLevelCollection.cs
- httpstaticobjectscollection.cs
- Matrix.cs
- ToolboxItemFilterAttribute.cs
- Pkcs7Recipient.cs
- _LoggingObject.cs
- WindowsBrush.cs
- LogLogRecordHeader.cs
- PeerInvitationResponse.cs
- StylusPointPropertyId.cs
- WebPartTransformer.cs
- glyphs.cs