Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- PropertyEmitter.cs
- HttpCapabilitiesEvaluator.cs
- TreeNodeConverter.cs
- FormViewInsertedEventArgs.cs
- mongolianshape.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- DetailsViewDeletedEventArgs.cs
- EventWaitHandle.cs
- X509CertificateTrustedIssuerElementCollection.cs
- Switch.cs
- _CookieModule.cs
- JsonUriDataContract.cs
- ILGenerator.cs
- LayoutEditorPart.cs
- OrderedDictionary.cs
- RawUIStateInputReport.cs
- PrintDialogException.cs
- WCFServiceClientProxyGenerator.cs
- PtsPage.cs
- DictionaryBase.cs
- Condition.cs
- WinEventQueueItem.cs
- XsltSettings.cs
- PathFigureCollection.cs
- Enum.cs
- Types.cs
- documentsequencetextview.cs
- DecimalAverageAggregationOperator.cs
- DataGridViewBindingCompleteEventArgs.cs
- Peer.cs
- OleCmdHelper.cs
- StringStorage.cs
- OleDbMetaDataFactory.cs
- ReferenceEqualityComparer.cs
- ColorPalette.cs
- XamlTypeMapper.cs
- RequiredFieldValidator.cs
- SafeRightsManagementHandle.cs
- MULTI_QI.cs
- MultidimensionalArrayItemReference.cs
- XmlConvert.cs
- EntryIndex.cs
- UnsafeCollabNativeMethods.cs
- XmlSchemaDocumentation.cs
- PropertyEmitterBase.cs
- WindowsSysHeader.cs
- EventNotify.cs
- WebPartManagerInternals.cs
- OdbcError.cs
- SQLGuidStorage.cs
- WebConfigurationHost.cs
- BufferedGraphics.cs
- RoutedEvent.cs
- PasswordDeriveBytes.cs
- Range.cs
- HtmlDocument.cs
- EntityType.cs
- DbConnectionPoolGroupProviderInfo.cs
- ConstraintManager.cs
- HtmlSelect.cs
- TypeNameHelper.cs
- CodeEventReferenceExpression.cs
- UIElementCollection.cs
- GiveFeedbackEventArgs.cs
- Mouse.cs
- bidPrivateBase.cs
- DataRecordObjectView.cs
- ValueProviderWrapper.cs
- SqlConnectionManager.cs
- PatternMatcher.cs
- XmlDataProvider.cs
- PatternMatcher.cs
- XmlAttribute.cs
- WebZone.cs
- NetSectionGroup.cs
- _NtlmClient.cs
- X509WindowsSecurityToken.cs
- WebBrowserContainer.cs
- ToolStripArrowRenderEventArgs.cs
- OleDbConnection.cs
- DriveNotFoundException.cs
- SHA384.cs
- ParserContext.cs
- DataGridViewLinkCell.cs
- MobileSysDescriptionAttribute.cs
- DataSourceXmlSerializer.cs
- EventHandlersDesigner.cs
- TableItemProviderWrapper.cs
- BitArray.cs
- AtomMaterializerLog.cs
- FormsAuthentication.cs
- NativeMethods.cs
- WindowsRichEdit.cs
- TextEditorThreadLocalStore.cs
- MimeMapping.cs
- PersonalizationStateQuery.cs
- PipelineModuleStepContainer.cs
- ProfileModule.cs
- XmlDownloadManager.cs
- WebControlParameterProxy.cs