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
- assertwrapper.cs
- OperationAbortedException.cs
- ZipIOFileItemStream.cs
- ConfigsHelper.cs
- CachedFontFamily.cs
- ThemeDirectoryCompiler.cs
- XmlnsCompatibleWithAttribute.cs
- OdbcException.cs
- X509Utils.cs
- HttpRequestMessageProperty.cs
- DataColumnCollection.cs
- RC2CryptoServiceProvider.cs
- DynamicFilterExpression.cs
- _LocalDataStoreMgr.cs
- EventLogPermissionEntryCollection.cs
- MailSettingsSection.cs
- MarshalByRefObject.cs
- ReferenceEqualityComparer.cs
- M3DUtil.cs
- ConstructorBuilder.cs
- StrongNameKeyPair.cs
- XamlFilter.cs
- OletxVolatileEnlistment.cs
- WindowsPrincipal.cs
- StringPropertyBuilder.cs
- XmlQualifiedNameTest.cs
- TableCell.cs
- EntityClientCacheEntry.cs
- TextRunTypographyProperties.cs
- RoleGroupCollection.cs
- EventBuilder.cs
- ApplicationCommands.cs
- BezierSegment.cs
- ClientUrlResolverWrapper.cs
- TemplateControl.cs
- Attributes.cs
- RelOps.cs
- ProfileSettingsCollection.cs
- ScrollEvent.cs
- IntAverageAggregationOperator.cs
- ContainsSearchOperator.cs
- MethodBody.cs
- FamilyTypeface.cs
- InlineObject.cs
- StyleXamlParser.cs
- ComplexType.cs
- ElementHostPropertyMap.cs
- TimeoutValidationAttribute.cs
- HwndTarget.cs
- HelloOperationCD1AsyncResult.cs
- InvalidDataException.cs
- EntityProviderServices.cs
- WebResourceUtil.cs
- ListControl.cs
- ContentDisposition.cs
- InheritanceUI.cs
- DoubleCollectionConverter.cs
- ConfigurationPropertyCollection.cs
- SQlBooleanStorage.cs
- HasCopySemanticsAttribute.cs
- ListBoxItem.cs
- PackUriHelper.cs
- PropertyManager.cs
- BindingBase.cs
- SQLConvert.cs
- DesignerAutoFormatCollection.cs
- SynchronizationValidator.cs
- ErrorWebPart.cs
- UnhandledExceptionEventArgs.cs
- QilSortKey.cs
- ConnectionStringsSection.cs
- IteratorFilter.cs
- TraceSwitch.cs
- HandoffBehavior.cs
- x509store.cs
- BinaryObjectReader.cs
- TraceSource.cs
- WsiProfilesElement.cs
- SuppressMergeCheckAttribute.cs
- ControlCachePolicy.cs
- ConsoleTraceListener.cs
- ListView.cs
- ConfigurationSectionCollection.cs
- COAUTHINFO.cs
- DynamicDataResources.Designer.cs
- PerformanceCounterLib.cs
- DictionaryKeyPropertyAttribute.cs
- Helpers.cs
- ACE.cs
- ServiceModelConfigurationSectionCollection.cs
- TypeBrowser.xaml.cs
- ObsoleteAttribute.cs
- sqlcontext.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- SafeNativeMethods.cs
- BufferedWebEventProvider.cs
- Rotation3D.cs
- ResourceExpressionBuilder.cs
- FieldInfo.cs
- SystemIPGlobalProperties.cs