Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- DataService.cs
- WebPartExportVerb.cs
- WebUtil.cs
- ExtendedProperty.cs
- SelectionProviderWrapper.cs
- PageContentCollection.cs
- HttpGetServerProtocol.cs
- FontFamilyConverter.cs
- FreezableCollection.cs
- QilLiteral.cs
- VectorAnimationBase.cs
- DataBoundControl.cs
- SqlNotificationRequest.cs
- TreeNodeClickEventArgs.cs
- NamedPermissionSet.cs
- NavigateEvent.cs
- DataGridViewCell.cs
- UnmanagedBitmapWrapper.cs
- DisplayInformation.cs
- SqlParameterCollection.cs
- MetafileHeaderWmf.cs
- FormattedTextSymbols.cs
- Win32.cs
- IndexOutOfRangeException.cs
- RightsManagementSuppressedStream.cs
- Triplet.cs
- BaseTemplatedMobileComponentEditor.cs
- ApplicationDirectory.cs
- RequestSecurityTokenResponseCollection.cs
- FusionWrap.cs
- ExceptionUtil.cs
- WebPartsPersonalization.cs
- ZipArchive.cs
- SeekStoryboard.cs
- controlskin.cs
- NetCodeGroup.cs
- ExpandoObject.cs
- DesigntimeLicenseContext.cs
- ColorConvertedBitmap.cs
- SafeNativeMethods.cs
- RelationshipConstraintValidator.cs
- SqlFileStream.cs
- ISAPIRuntime.cs
- BufferModeSettings.cs
- ComplexTypeEmitter.cs
- AttributeEmitter.cs
- WmlTextBoxAdapter.cs
- ConsoleKeyInfo.cs
- RegexStringValidatorAttribute.cs
- ExclusiveTcpListener.cs
- PreloadHost.cs
- Mappings.cs
- TextContainerHelper.cs
- PasswordTextContainer.cs
- ServiceModelConfigurationSectionGroup.cs
- TrustLevelCollection.cs
- ExpandCollapsePattern.cs
- KeyValueConfigurationCollection.cs
- Camera.cs
- QuaternionAnimationUsingKeyFrames.cs
- OdbcConnectionFactory.cs
- OleDbDataReader.cs
- TagMapInfo.cs
- storepermissionattribute.cs
- XmlSignatureProperties.cs
- DefaultBindingPropertyAttribute.cs
- DbParameterHelper.cs
- DashStyle.cs
- BaseCodeDomTreeGenerator.cs
- FactoryGenerator.cs
- InputLanguageCollection.cs
- WebCategoryAttribute.cs
- __Filters.cs
- ValidatedMobileControlConverter.cs
- EntityProviderFactory.cs
- ToolstripProfessionalRenderer.cs
- TreeViewTemplateSelector.cs
- DtrList.cs
- CompoundFileDeflateTransform.cs
- HtmlButton.cs
- ConfigurationValidatorBase.cs
- SettingsPropertyNotFoundException.cs
- EllipticalNodeOperations.cs
- StatementContext.cs
- Subtree.cs
- CompilerResults.cs
- SelectionProviderWrapper.cs
- WebRequestModuleElementCollection.cs
- DispatcherExceptionFilterEventArgs.cs
- PrintDocument.cs
- DomNameTable.cs
- WebScriptMetadataFormatter.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- BindingListCollectionView.cs
- WindowsButton.cs
- ObjectDisposedException.cs
- Utils.cs
- Literal.cs
- OSFeature.cs
- PointConverter.cs