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
- RichTextBox.cs
- LocationInfo.cs
- AmbientValueAttribute.cs
- SqlMetaData.cs
- HyperLinkDesigner.cs
- MergeFilterQuery.cs
- __ComObject.cs
- InternalsVisibleToAttribute.cs
- DataGridRelationshipRow.cs
- IPEndPoint.cs
- MetabaseServerConfig.cs
- Stylus.cs
- metadatamappinghashervisitor.cs
- ModelPropertyImpl.cs
- Point3DCollectionConverter.cs
- CheckPair.cs
- MimeTypeAttribute.cs
- Rfc2898DeriveBytes.cs
- StringStorage.cs
- latinshape.cs
- __ConsoleStream.cs
- AnonymousIdentificationModule.cs
- MenuItemStyleCollection.cs
- SmiContextFactory.cs
- DecoderFallback.cs
- ListenerConnectionDemuxer.cs
- GlyphingCache.cs
- SqlDataSourceConfigureSortForm.cs
- BufferModesCollection.cs
- EqualityComparer.cs
- DataSourceExpression.cs
- DocumentPageHost.cs
- ServerValidateEventArgs.cs
- ObjectListCommandCollection.cs
- MenuItemBinding.cs
- BackStopAuthenticationModule.cs
- EqualityComparer.cs
- SqlPersonalizationProvider.cs
- XmlSchemaSimpleTypeRestriction.cs
- ProxyWebPart.cs
- Adorner.cs
- SessionStateSection.cs
- FileReservationCollection.cs
- XamlRtfConverter.cs
- ADMembershipProvider.cs
- BitmapEffectDrawingContextState.cs
- TextServicesDisplayAttribute.cs
- ColorConvertedBitmap.cs
- Pkcs9Attribute.cs
- HtmlInputReset.cs
- FunctionNode.cs
- ParamArrayAttribute.cs
- WebPartDeleteVerb.cs
- IIS7UserPrincipal.cs
- HotSpot.cs
- Certificate.cs
- WorkflowMarkupSerializerMapping.cs
- Formatter.cs
- MenuBindingsEditorForm.cs
- ControlUtil.cs
- AssociativeAggregationOperator.cs
- WpfWebRequestHelper.cs
- ConfigurationManagerHelperFactory.cs
- RelationshipDetailsCollection.cs
- DataGridTableStyleMappingNameEditor.cs
- GlobalProxySelection.cs
- TypeBuilderInstantiation.cs
- InkSerializer.cs
- ApplicationSecurityInfo.cs
- SelectiveScrollingGrid.cs
- BamlLocalizableResource.cs
- WebServiceResponse.cs
- bindurihelper.cs
- ComplexPropertyEntry.cs
- Ref.cs
- XPathAncestorIterator.cs
- ResourceDisplayNameAttribute.cs
- WorkflowDesignerMessageFilter.cs
- ToolStripDesigner.cs
- TableColumn.cs
- Vector3DIndependentAnimationStorage.cs
- UIElement.cs
- MethodBuilderInstantiation.cs
- MasterPage.cs
- SecurityResources.cs
- ContextMarshalException.cs
- ApplicationServiceHelper.cs
- AngleUtil.cs
- _WinHttpWebProxyDataBuilder.cs
- Size3DConverter.cs
- ClientSponsor.cs
- DataTableReader.cs
- WebPart.cs
- SystemDropShadowChrome.cs
- FigureParaClient.cs
- XmlSerializerOperationBehavior.cs
- ExtractedStateEntry.cs
- VisualStyleInformation.cs
- XsltConvert.cs
- Stroke.cs