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
- X509Certificate2.cs
- MethodCallConverter.cs
- ObjectCloneHelper.cs
- CorrelationQueryBehavior.cs
- EventLog.cs
- TypeHelper.cs
- WindowsToolbarAsMenu.cs
- SponsorHelper.cs
- PointCollection.cs
- HttpDebugHandler.cs
- AttributeEmitter.cs
- DataGridColumn.cs
- XmlAnyAttributeAttribute.cs
- BufferedStream.cs
- FieldTemplateFactory.cs
- ColorTransform.cs
- StorageEntityContainerMapping.cs
- XmlSchemaAll.cs
- WebBrowserPermission.cs
- LoginView.cs
- SchemaNames.cs
- RemotingServices.cs
- IssuedSecurityTokenParameters.cs
- MatrixUtil.cs
- CachedFontFamily.cs
- BindingMemberInfo.cs
- Translator.cs
- Lasso.cs
- ValidationPropertyAttribute.cs
- ListenerServiceInstallComponent.cs
- StoreAnnotationsMap.cs
- ImageListImage.cs
- FixedPage.cs
- CheckBoxRenderer.cs
- PropertyKey.cs
- oledbmetadatacolumnnames.cs
- CornerRadius.cs
- NegotiateStream.cs
- XmlDataSourceNodeDescriptor.cs
- _Connection.cs
- RegexMatch.cs
- XmlTypeMapping.cs
- DesignerCapabilities.cs
- SmiEventStream.cs
- HttpValueCollection.cs
- DataControlImageButton.cs
- Buffer.cs
- PinnedBufferMemoryStream.cs
- DataSourceHelper.cs
- ManagementException.cs
- C14NUtil.cs
- ObjectParameter.cs
- DesignerView.Commands.cs
- CardSpaceException.cs
- ControlBuilder.cs
- ManipulationLogic.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- RuntimeConfigLKG.cs
- BoundColumn.cs
- FileUpload.cs
- EmulateRecognizeCompletedEventArgs.cs
- SynchronizedDispatch.cs
- StrokeNodeOperations.cs
- QueryCacheEntry.cs
- ValueTable.cs
- ModelUtilities.cs
- ToolBarPanel.cs
- ResXResourceReader.cs
- xmlsaver.cs
- TextViewSelectionProcessor.cs
- RequestCacheManager.cs
- InlineObject.cs
- precedingsibling.cs
- AssemblyCollection.cs
- TransformPattern.cs
- validation.cs
- XmlAnyElementAttributes.cs
- CookieProtection.cs
- ProfilePropertyMetadata.cs
- ManagementEventWatcher.cs
- UnsafeNativeMethods.cs
- Semaphore.cs
- RemoteEndpointMessageProperty.cs
- SimpleColumnProvider.cs
- TrackingMemoryStream.cs
- ReadOnlyHierarchicalDataSourceView.cs
- AuthenticatingEventArgs.cs
- EdmSchemaError.cs
- ContextMarshalException.cs
- _ListenerAsyncResult.cs
- AnnotationResource.cs
- AssemblyHash.cs
- PropertyTab.cs
- PreDigestedSignedInfo.cs
- SeparatorAutomationPeer.cs
- DebugView.cs
- TableProvider.cs
- Parser.cs
- SqlGenerator.cs
- PartManifestEntry.cs