Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- Model3D.cs
- EDesignUtil.cs
- Registry.cs
- ValidatingPropertiesEventArgs.cs
- StylusPointPropertyId.cs
- GenerateHelper.cs
- ToggleButton.cs
- DocumentReferenceCollection.cs
- StaticFileHandler.cs
- Compiler.cs
- ServiceNameCollection.cs
- FontDifferentiator.cs
- HashStream.cs
- XmlNamespaceManager.cs
- TrackingStringDictionary.cs
- validation.cs
- SqlDataSourceCache.cs
- CompatibleComparer.cs
- ApplyImportsAction.cs
- CodeSnippetStatement.cs
- EntityReference.cs
- ListParaClient.cs
- XmlSerializer.cs
- XpsImage.cs
- SeekableReadStream.cs
- BitmapDecoder.cs
- WebBaseEventKeyComparer.cs
- Encoding.cs
- RichTextBoxConstants.cs
- TypeDependencyAttribute.cs
- CryptoProvider.cs
- EventSetterHandlerConverter.cs
- RadialGradientBrush.cs
- CreateUserWizardDesigner.cs
- NonParentingControl.cs
- CompilerState.cs
- EntityDesignerDataSourceView.cs
- InteropBitmapSource.cs
- JsonServiceDocumentSerializer.cs
- CachedBitmap.cs
- SqlDataSourceAdvancedOptionsForm.cs
- Trace.cs
- XmlArrayAttribute.cs
- UriExt.cs
- Int32CAMarshaler.cs
- KnownTypes.cs
- DESCryptoServiceProvider.cs
- CommandBindingCollection.cs
- SatelliteContractVersionAttribute.cs
- DataSourceControlBuilder.cs
- DataGridPageChangedEventArgs.cs
- KeyToListMap.cs
- SQLSingle.cs
- DetailsViewInsertEventArgs.cs
- AsymmetricSignatureFormatter.cs
- DictionaryBase.cs
- CategoryAttribute.cs
- SafeBitVector32.cs
- QilDataSource.cs
- IntPtr.cs
- DefaultParameterValueAttribute.cs
- ColorConvertedBitmapExtension.cs
- WCFModelStrings.Designer.cs
- MarkupWriter.cs
- TableItemStyle.cs
- ToolBarOverflowPanel.cs
- FontWeightConverter.cs
- ErrorTolerantObjectWriter.cs
- GcHandle.cs
- ISO2022Encoding.cs
- SerTrace.cs
- FixedDocumentPaginator.cs
- CheckBoxRenderer.cs
- DataSvcMapFileSerializer.cs
- FormattedTextSymbols.cs
- ParameterInfo.cs
- XmlUTF8TextReader.cs
- AuthenticationConfig.cs
- GiveFeedbackEventArgs.cs
- WindowVisualStateTracker.cs
- ComboBox.cs
- SqlCacheDependencyDatabaseCollection.cs
- ProjectedSlot.cs
- SizeF.cs
- AdRotatorDesigner.cs
- DataObject.cs
- HtmlPanelAdapter.cs
- ByteStreamGeometryContext.cs
- DateTimeFormatInfoScanner.cs
- Interlocked.cs
- ProxyWebPartConnectionCollection.cs
- RangeValuePattern.cs
- TypeConverter.cs
- ConfigXmlElement.cs
- DataBindEngine.cs
- OrderedDictionaryStateHelper.cs
- CngProperty.cs
- FormatterServices.cs
- OleDbParameter.cs
- ActivityExecutorOperation.cs