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
- SqlClientWrapperSmiStreamChars.cs
- SyndicationDeserializer.cs
- ObjectQuery_EntitySqlExtensions.cs
- StaticExtensionConverter.cs
- InteropAutomationProvider.cs
- MoveSizeWinEventHandler.cs
- SetterBase.cs
- Collection.cs
- SqlMetaData.cs
- CustomWebEventKey.cs
- CodeStatement.cs
- PowerStatus.cs
- Clock.cs
- Sql8ExpressionRewriter.cs
- Base64Decoder.cs
- AsymmetricKeyExchangeFormatter.cs
- OdbcConnection.cs
- SiteMapPath.cs
- MemberRestriction.cs
- IntellisenseTextBox.cs
- RuleSetCollection.cs
- ServiceMemoryGates.cs
- IISUnsafeMethods.cs
- ToolStripSettings.cs
- GroupAggregateExpr.cs
- SourceInterpreter.cs
- SafeLocalMemHandle.cs
- PrimitiveType.cs
- UserPreference.cs
- TextModifier.cs
- _SafeNetHandles.cs
- XmlSerializationWriter.cs
- JapaneseLunisolarCalendar.cs
- GuidelineSet.cs
- HMACSHA384.cs
- oledbconnectionstring.cs
- dataprotectionpermission.cs
- TransformerConfigurationWizardBase.cs
- TransformCryptoHandle.cs
- SerializeAbsoluteContext.cs
- WebScriptMetadataInstanceContextProvider.cs
- IgnorePropertiesAttribute.cs
- SigningCredentials.cs
- WebPartRestoreVerb.cs
- XmlObjectSerializerWriteContextComplex.cs
- CharConverter.cs
- XmlElementAttribute.cs
- ToolStripContainer.cs
- SignatureDescription.cs
- SqlConnectionManager.cs
- TypedServiceOperationListItem.cs
- RouteCollection.cs
- WebPartZoneBase.cs
- TouchDevice.cs
- Frame.cs
- AnnotationComponentManager.cs
- CommonRemoteMemoryBlock.cs
- NativeMethodsOther.cs
- OdbcParameterCollection.cs
- PageSettings.cs
- XmlCharCheckingWriter.cs
- PrintDialogException.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- ColorContext.cs
- TabControl.cs
- ObjectDataSourceStatusEventArgs.cs
- SeekStoryboard.cs
- IImplicitResourceProvider.cs
- AbstractSvcMapFileLoader.cs
- FederatedMessageSecurityOverHttpElement.cs
- SecurityContext.cs
- _OverlappedAsyncResult.cs
- ImageClickEventArgs.cs
- SetStoryboardSpeedRatio.cs
- ConditionalDesigner.cs
- SmtpNegotiateAuthenticationModule.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- ListBoxItemAutomationPeer.cs
- ContractValidationHelper.cs
- ProfileService.cs
- HtmlInputControl.cs
- CustomCredentialPolicy.cs
- DataBoundControlActionList.cs
- SettingsProviderCollection.cs
- DesignTimeParseData.cs
- SHA1Managed.cs
- DrawingGroup.cs
- PropertyGeneratedEventArgs.cs
- SizeKeyFrameCollection.cs
- InitializerFacet.cs
- PaginationProgressEventArgs.cs
- BaseDataList.cs
- WebPartCloseVerb.cs
- RecognizeCompletedEventArgs.cs
- ToolStripButton.cs
- LongAverageAggregationOperator.cs
- AuthenticationManager.cs
- MapPathBasedVirtualPathProvider.cs
- FlowLayout.cs
- DoWorkEventArgs.cs