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
- SqlResolver.cs
- Padding.cs
- Util.cs
- DerivedKeySecurityToken.cs
- OptionalColumn.cs
- Calendar.cs
- Itemizer.cs
- ComponentManagerBroker.cs
- ApplicationHost.cs
- WorkflowEventArgs.cs
- BasicHttpMessageSecurity.cs
- JsonReader.cs
- Boolean.cs
- UriExt.cs
- XPathNodeIterator.cs
- HMACMD5.cs
- GeneratedCodeAttribute.cs
- CredentialCache.cs
- XmlTypeMapping.cs
- WindowsEditBox.cs
- StringUtil.cs
- DoubleCollection.cs
- ToolStripKeyboardHandlingService.cs
- ThemeDictionaryExtension.cs
- ResponseBodyWriter.cs
- Pair.cs
- UnsafeNativeMethods.cs
- DataGridViewTextBoxCell.cs
- Decimal.cs
- WaitHandle.cs
- DoubleKeyFrameCollection.cs
- StreamAsIStream.cs
- ObjectComplexPropertyMapping.cs
- EventMappingSettingsCollection.cs
- GroupByExpressionRewriter.cs
- WebPartsSection.cs
- WpfXamlLoader.cs
- EditableTreeList.cs
- ScrollChrome.cs
- WebEventCodes.cs
- ArraySortHelper.cs
- TableRow.cs
- VirtualPathProvider.cs
- PassportAuthentication.cs
- TableItemStyle.cs
- SettingsBindableAttribute.cs
- MasterPageBuildProvider.cs
- XmlSchemaSimpleTypeRestriction.cs
- CultureInfoConverter.cs
- InheritedPropertyDescriptor.cs
- ListBindingConverter.cs
- ProfileInfo.cs
- SerializerWriterEventHandlers.cs
- BadImageFormatException.cs
- ToolboxItemCollection.cs
- AdapterDictionary.cs
- DescendantQuery.cs
- SqlProviderServices.cs
- StyleXamlTreeBuilder.cs
- SettingsProviderCollection.cs
- ServicePointManagerElement.cs
- UnicodeEncoding.cs
- PipelineDeploymentState.cs
- SHA384CryptoServiceProvider.cs
- CodeCommentStatement.cs
- AutomationPeer.cs
- ILGenerator.cs
- CodeAttributeDeclaration.cs
- OdbcDataReader.cs
- GatewayDefinition.cs
- EmptyControlCollection.cs
- SafeNativeMethods.cs
- InvalidDataException.cs
- Size.cs
- WebPartAuthorizationEventArgs.cs
- ArgumentDirectionHelper.cs
- CapabilitiesPattern.cs
- AbstractSvcMapFileLoader.cs
- TextRange.cs
- RequiredAttributeAttribute.cs
- HMACMD5.cs
- ProcessModuleDesigner.cs
- FontStyle.cs
- AtlasWeb.Designer.cs
- NegatedConstant.cs
- CustomCategoryAttribute.cs
- HostingEnvironmentSection.cs
- CompoundFileStorageReference.cs
- Annotation.cs
- ConnectionConsumerAttribute.cs
- TreeViewEvent.cs
- IntegrationExceptionEventArgs.cs
- ObjectRef.cs
- BidOverLoads.cs
- RequestSecurityTokenResponseCollection.cs
- SQLBinaryStorage.cs
- LinkArea.cs
- InputScopeConverter.cs
- IdleTimeoutMonitor.cs
- EllipseGeometry.cs