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
- RSAPKCS1KeyExchangeDeformatter.cs
- PKCS1MaskGenerationMethod.cs
- UpDownEvent.cs
- Table.cs
- HybridDictionary.cs
- UIPropertyMetadata.cs
- XPathConvert.cs
- ReflectionUtil.cs
- CompilationLock.cs
- ScrollEvent.cs
- Accessible.cs
- DBBindings.cs
- ReadOnlyHierarchicalDataSource.cs
- MeasureItemEvent.cs
- FilteredAttributeCollection.cs
- QilPatternVisitor.cs
- WeakReferenceKey.cs
- CheckBoxFlatAdapter.cs
- DataGridComboBoxColumn.cs
- PkcsMisc.cs
- SessionIDManager.cs
- SqlClientWrapperSmiStream.cs
- GenericUriParser.cs
- PowerModeChangedEventArgs.cs
- WizardForm.cs
- ReadOnlyCollectionBuilder.cs
- JsonWriter.cs
- ChangeInterceptorAttribute.cs
- PagesChangedEventArgs.cs
- VisualStyleInformation.cs
- DbConnectionHelper.cs
- LineServices.cs
- AppLevelCompilationSectionCache.cs
- EncryptedHeaderXml.cs
- PageThemeParser.cs
- TextTreeInsertElementUndoUnit.cs
- MutableAssemblyCacheEntry.cs
- ErrorInfoXmlDocument.cs
- StringValueSerializer.cs
- SmtpAuthenticationManager.cs
- RawStylusSystemGestureInputReport.cs
- ConfigXmlAttribute.cs
- FullTextState.cs
- NavigationCommands.cs
- EntitySetBaseCollection.cs
- HostingEnvironmentException.cs
- ResourcePermissionBaseEntry.cs
- MTConfigUtil.cs
- ObjRef.cs
- CngAlgorithmGroup.cs
- Regex.cs
- SecurityUtils.cs
- WindowsTooltip.cs
- WindowsTitleBar.cs
- UnsafeNativeMethods.cs
- Mapping.cs
- QueryCacheManager.cs
- HtmlTableRowCollection.cs
- ModelUtilities.cs
- WsdlBuildProvider.cs
- XmlEncodedRawTextWriter.cs
- RSAOAEPKeyExchangeDeformatter.cs
- AutomationAttributeInfo.cs
- BlurBitmapEffect.cs
- TableStyle.cs
- XmlSchemaAll.cs
- SystemWebExtensionsSectionGroup.cs
- ManagementInstaller.cs
- StylusPointPropertyInfo.cs
- TabControlCancelEvent.cs
- ConfigurationValidatorAttribute.cs
- PermissionSet.cs
- SessionIDManager.cs
- XmlStreamNodeWriter.cs
- EventLogEntryCollection.cs
- Empty.cs
- AttachmentCollection.cs
- QilBinary.cs
- TextSelection.cs
- ShapingWorkspace.cs
- TextParaClient.cs
- LookupNode.cs
- DataGridViewTextBoxColumn.cs
- ColumnMapProcessor.cs
- ServiceModelActivationSectionGroup.cs
- FileAuthorizationModule.cs
- SqlException.cs
- SqlConnection.cs
- ChameleonKey.cs
- SelectionItemProviderWrapper.cs
- SymbolTable.cs
- AuthorizationRule.cs
- TextParaClient.cs
- ButtonColumn.cs
- Lasso.cs
- SrgsRulesCollection.cs
- FileCodeGroup.cs
- StringPropertyBuilder.cs
- MimeMapping.cs
- CommandDevice.cs