Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- TrustManagerMoreInformation.cs
- BindingMemberInfo.cs
- DesignerSerializationOptionsAttribute.cs
- SqlNodeTypeOperators.cs
- ButtonBase.cs
- SafeRegistryKey.cs
- ValidationHelper.cs
- ContainerParaClient.cs
- DispatchWrapper.cs
- SystemResources.cs
- _CookieModule.cs
- NonBatchDirectoryCompiler.cs
- ColorConvertedBitmap.cs
- ReferenceEqualityComparer.cs
- MultipleViewPattern.cs
- NotificationContext.cs
- XmlQuerySequence.cs
- WebSysDisplayNameAttribute.cs
- Button.cs
- EntityProviderFactory.cs
- ApplicationSettingsBase.cs
- DataContractSerializerOperationFormatter.cs
- MappingException.cs
- SchemaImporterExtensionElement.cs
- ProcessInfo.cs
- mediaeventshelper.cs
- DbMetaDataCollectionNames.cs
- RoutedEventHandlerInfo.cs
- MgmtResManager.cs
- InputMethodStateChangeEventArgs.cs
- RegistryKey.cs
- jithelpers.cs
- XmlEnumAttribute.cs
- AssemblyBuilderData.cs
- JsonSerializer.cs
- QilName.cs
- DesignerRegion.cs
- GACIdentityPermission.cs
- EdmItemCollection.cs
- SendSecurityHeader.cs
- PackagingUtilities.cs
- DragDrop.cs
- OlePropertyStructs.cs
- SkewTransform.cs
- TreeViewEvent.cs
- TraceInternal.cs
- RefreshPropertiesAttribute.cs
- TextComposition.cs
- MethodExpr.cs
- ThousandthOfEmRealPoints.cs
- WindowsTreeView.cs
- RequestCacheManager.cs
- NotifyCollectionChangedEventArgs.cs
- TdsEnums.cs
- Processor.cs
- InternalConfigEventArgs.cs
- AspCompat.cs
- HttpChannelBindingToken.cs
- QualificationDataAttribute.cs
- CurrentTimeZone.cs
- CompositeControl.cs
- EncoderFallback.cs
- HostVisual.cs
- MobileRedirect.cs
- DbCommandTree.cs
- SubpageParaClient.cs
- FileAuthorizationModule.cs
- TargetException.cs
- ImportFileRequest.cs
- UseLicense.cs
- HttpCookiesSection.cs
- SetterTriggerConditionValueConverter.cs
- CatalogZoneBase.cs
- RowToFieldTransformer.cs
- DataTableMapping.cs
- SystemDiagnosticsSection.cs
- RightsManagementUser.cs
- ModifierKeysValueSerializer.cs
- PageCatalogPart.cs
- FormViewDeletedEventArgs.cs
- ContainsRowNumberChecker.cs
- Viewport3DVisual.cs
- RbTree.cs
- BevelBitmapEffect.cs
- MetadataArtifactLoader.cs
- DeclarativeCatalogPart.cs
- DataGridViewRowHeaderCell.cs
- PropertyCollection.cs
- Context.cs
- BaseInfoTable.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- SQLDateTimeStorage.cs
- WebPartHelpVerb.cs
- PathGradientBrush.cs
- Attributes.cs
- XPathNodeIterator.cs
- XPathEmptyIterator.cs
- ExpressionsCollectionEditor.cs
- PathSegment.cs
- QilGeneratorEnv.cs