Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / QIL / QilReplaceVisitor.cs / 1305376 / 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 ((object) oldChild != (object) newChild || (newChild != null && (object) oldChildType != (object) 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
- MemoryFailPoint.cs
- TraceProvider.cs
- BorderSidesEditor.cs
- MaterializeFromAtom.cs
- AttachInfo.cs
- PrtCap_Base.cs
- SqlUtil.cs
- DrawingCollection.cs
- COAUTHIDENTITY.cs
- BamlTreeMap.cs
- SqlInternalConnectionTds.cs
- TimeIntervalCollection.cs
- WebPartRestoreVerb.cs
- RichTextBoxAutomationPeer.cs
- XamlContextStack.cs
- ListDictionaryInternal.cs
- CodeDelegateInvokeExpression.cs
- OnOperation.cs
- DescendentsWalker.cs
- Attachment.cs
- XamlPathDataSerializer.cs
- CurrencyManager.cs
- CodeAttributeArgumentCollection.cs
- RestrictedTransactionalPackage.cs
- CurrentTimeZone.cs
- ObjectQuery_EntitySqlExtensions.cs
- BitmapEffectDrawingContextWalker.cs
- DataGridPageChangedEventArgs.cs
- EntityCommandCompilationException.cs
- Cast.cs
- AsymmetricSignatureDeformatter.cs
- StrongNameMembershipCondition.cs
- SvcMapFile.cs
- SqlFormatter.cs
- Accessible.cs
- StatusBarPanelClickEvent.cs
- KeyConverter.cs
- VirtualPath.cs
- ObjectSecurity.cs
- PageStatePersister.cs
- InstancePersistenceException.cs
- TryCatchDesigner.xaml.cs
- SerialPort.cs
- WorkflowMarkupElementEventArgs.cs
- AbstractExpressions.cs
- BitmapData.cs
- ApplicationId.cs
- PropertyMapper.cs
- ProfileSettingsCollection.cs
- ConfigXmlText.cs
- Point.cs
- ArrayWithOffset.cs
- CommentEmitter.cs
- RoutedPropertyChangedEventArgs.cs
- JapaneseLunisolarCalendar.cs
- Solver.cs
- BamlBinaryWriter.cs
- EntityDataSourceStatementEditor.cs
- RuleProcessor.cs
- ReadOnlyPermissionSet.cs
- _Semaphore.cs
- VirtualPathUtility.cs
- TraceLog.cs
- CommandBindingCollection.cs
- ProcessHost.cs
- RoleServiceManager.cs
- ConfigurationStrings.cs
- xml.cs
- ValidatingReaderNodeData.cs
- CodeDomConfigurationHandler.cs
- WebHeaderCollection.cs
- TypeExtensionSerializer.cs
- smtppermission.cs
- GlyphTypeface.cs
- Roles.cs
- RectangleHotSpot.cs
- OdbcRowUpdatingEvent.cs
- ValueSerializer.cs
- DoubleLinkListEnumerator.cs
- FormatConvertedBitmap.cs
- TreeNodeConverter.cs
- MarkedHighlightComponent.cs
- CfgParser.cs
- BamlLocalizableResource.cs
- XmlQueryType.cs
- BoundField.cs
- NumberFunctions.cs
- NativeMethods.cs
- GlyphElement.cs
- SerialPinChanges.cs
- AsyncOperation.cs
- TextTrailingWordEllipsis.cs
- StructureChangedEventArgs.cs
- TreeNodeBindingDepthConverter.cs
- Win32.cs
- BoolExpression.cs
- ScrollBarAutomationPeer.cs
- SoapFormatterSinks.cs
- ByteAnimationBase.cs
- COSERVERINFO.cs