Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- Rotation3D.cs
- WeakRefEnumerator.cs
- GroupByQueryOperator.cs
- FormsAuthenticationModule.cs
- WorkflowOwnershipException.cs
- UnicastIPAddressInformationCollection.cs
- WebEventCodes.cs
- CustomAttributeBuilder.cs
- EventLogEntry.cs
- Run.cs
- ToolboxBitmapAttribute.cs
- Tablet.cs
- WinFormsUtils.cs
- BooleanExpr.cs
- RuntimeArgument.cs
- InheritedPropertyChangedEventArgs.cs
- DataGridCell.cs
- ColumnMapProcessor.cs
- CompilationSection.cs
- HttpValueCollection.cs
- RemoteHelper.cs
- ListParagraph.cs
- DataGridViewColumnStateChangedEventArgs.cs
- CheckBoxFlatAdapter.cs
- ListSortDescriptionCollection.cs
- Version.cs
- ToolStripItemBehavior.cs
- EndEvent.cs
- DataGridViewRow.cs
- BitmapEffectGroup.cs
- OleDbPropertySetGuid.cs
- RepeatButton.cs
- BinaryCommonClasses.cs
- EventDescriptor.cs
- BaseHashHelper.cs
- DrawingGroup.cs
- GridViewCommandEventArgs.cs
- XPathSingletonIterator.cs
- Ref.cs
- FontClient.cs
- XmlSerializerAssemblyAttribute.cs
- DropShadowBitmapEffect.cs
- ObjectStateEntry.cs
- DrawingVisualDrawingContext.cs
- SystemInfo.cs
- WebControlsSection.cs
- Connector.xaml.cs
- SoapWriter.cs
- TemplateManager.cs
- ThrowHelper.cs
- DragStartedEventArgs.cs
- TypeLoadException.cs
- SerializationSectionGroup.cs
- ActiveDocumentEvent.cs
- XsltArgumentList.cs
- log.cs
- DropShadowBitmapEffect.cs
- _ContextAwareResult.cs
- SerializationStore.cs
- MobileControlsSectionHelper.cs
- RealizedColumnsBlock.cs
- Span.cs
- SchemaMerger.cs
- DataControlExtensions.cs
- TextContainerHelper.cs
- RequestContext.cs
- SqlConnectionStringBuilder.cs
- TraceHwndHost.cs
- AuthenticationModulesSection.cs
- XPathParser.cs
- XmlUtil.cs
- RegexNode.cs
- SourceElementsCollection.cs
- InkCanvasFeedbackAdorner.cs
- HtmlFormParameterReader.cs
- TreeNodeBinding.cs
- CreateWorkflowOwnerCommand.cs
- ConfigurationConverterBase.cs
- MappingItemCollection.cs
- BaseCAMarshaler.cs
- XmlAutoDetectWriter.cs
- HandledMouseEvent.cs
- Version.cs
- BitmapInitialize.cs
- StreamResourceInfo.cs
- SignedXml.cs
- PermissionAttributes.cs
- SqlDataSourceView.cs
- FontWeightConverter.cs
- LinkButton.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- ErrorWebPart.cs
- ByteAnimation.cs
- SoapObjectWriter.cs
- PackWebResponse.cs
- AnonymousIdentificationModule.cs
- ImageIndexConverter.cs
- OleDbPermission.cs
- PropertyGridEditorPart.cs
- FlowLayout.cs