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
- ByteViewer.cs
- SqlCharStream.cs
- webbrowsersite.cs
- TargetInvocationException.cs
- FixedSOMElement.cs
- DbSource.cs
- DoubleCollectionConverter.cs
- SharedStream.cs
- LinkArea.cs
- VisualStyleRenderer.cs
- UriParserTemplates.cs
- MouseWheelEventArgs.cs
- AsmxEndpointPickerExtension.cs
- DropShadowEffect.cs
- GridViewColumn.cs
- Table.cs
- ConvertersCollection.cs
- DataGridPageChangedEventArgs.cs
- SettingsBase.cs
- QueryContinueDragEventArgs.cs
- InnerItemCollectionView.cs
- ZipIOCentralDirectoryFileHeader.cs
- UnsafeNativeMethods.cs
- ErrorFormatterPage.cs
- SemanticResolver.cs
- StateManagedCollection.cs
- ReadWriteSpinLock.cs
- InfoCardRSACryptoProvider.cs
- ContentType.cs
- WorkflowInstanceAbortedRecord.cs
- IteratorDescriptor.cs
- LinqDataSourceInsertEventArgs.cs
- XmlBindingWorker.cs
- BamlMapTable.cs
- NumberFormatInfo.cs
- SingleAnimation.cs
- ScaleTransform3D.cs
- SocketPermission.cs
- ApplyImportsAction.cs
- RegionData.cs
- OdbcConnectionOpen.cs
- LoginDesigner.cs
- BitmapEffectGroup.cs
- FormViewCommandEventArgs.cs
- OracleParameterCollection.cs
- RectValueSerializer.cs
- TextBox.cs
- ExpressionBinding.cs
- CompressStream.cs
- SiteMembershipCondition.cs
- EdmSchemaError.cs
- SimpleParser.cs
- BuildManager.cs
- SqlBooleanMismatchVisitor.cs
- DesignTimeSiteMapProvider.cs
- XmlSchemaChoice.cs
- SqlDataSourceCache.cs
- DetailsViewDeleteEventArgs.cs
- SerialPinChanges.cs
- SoapTypeAttribute.cs
- HyperLinkColumn.cs
- WindowPatternIdentifiers.cs
- AttributeQuery.cs
- LogWriteRestartAreaAsyncResult.cs
- CryptoProvider.cs
- SecurityDescriptor.cs
- RemoteWebConfigurationHostServer.cs
- RequestQueue.cs
- HttpFileCollection.cs
- ScriptResourceHandler.cs
- AutomationPropertyInfo.cs
- SystemIPv4InterfaceProperties.cs
- FixedLineResult.cs
- ProfilePropertyMetadata.cs
- SmiMetaDataProperty.cs
- ValueType.cs
- SqlCacheDependencyDatabaseCollection.cs
- Error.cs
- GroupLabel.cs
- SharedStream.cs
- XmlEncoding.cs
- XamlFilter.cs
- BuiltInPermissionSets.cs
- LineUtil.cs
- ArgumentOutOfRangeException.cs
- QilInvokeLateBound.cs
- DebugHandleTracker.cs
- RemoveStoryboard.cs
- CodeArrayCreateExpression.cs
- SqlParameter.cs
- Polygon.cs
- UserControlAutomationPeer.cs
- BaseValidatorDesigner.cs
- PropertyChangedEventManager.cs
- assemblycache.cs
- SchemaElementLookUpTable.cs
- TextLine.cs
- ToolStripItemTextRenderEventArgs.cs
- WebControlsSection.cs
- ValueTypeFixupInfo.cs