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
- HandlerBase.cs
- PrintSchema.cs
- RequestCachingSection.cs
- _WebProxyDataBuilder.cs
- PermissionRequestEvidence.cs
- RepeaterDataBoundAdapter.cs
- ObjectAnimationBase.cs
- SchemaElementLookUpTable.cs
- TextTreeUndoUnit.cs
- OLEDB_Enum.cs
- SystemTcpStatistics.cs
- MDIControlStrip.cs
- ExpressionQuoter.cs
- SystemUdpStatistics.cs
- ComponentChangingEvent.cs
- ImmutablePropertyDescriptorGridEntry.cs
- Vector3D.cs
- DateTimeOffsetConverter.cs
- SeekableReadStream.cs
- DataGridViewLayoutData.cs
- LocalValueEnumerator.cs
- Point4D.cs
- FixedDocumentPaginator.cs
- GotoExpression.cs
- Matrix3DValueSerializer.cs
- PenThreadPool.cs
- EntityDataSourceDataSelection.cs
- UntrustedRecipientException.cs
- TypeDescriptorContext.cs
- WebEncodingValidator.cs
- ParenthesizePropertyNameAttribute.cs
- RequestResizeEvent.cs
- TextBoxView.cs
- ExpressionValueEditor.cs
- PrimitiveType.cs
- QueryGenerator.cs
- HostedBindingBehavior.cs
- TemplateControlParser.cs
- ChannelManagerBase.cs
- DataGridViewDataErrorEventArgs.cs
- ImageButton.cs
- SystemTcpStatistics.cs
- Symbol.cs
- DragCompletedEventArgs.cs
- ResourceProviderFactory.cs
- TextParagraphProperties.cs
- StringWriter.cs
- SignatureHelper.cs
- FileAuthorizationModule.cs
- ColumnClickEvent.cs
- WmpBitmapDecoder.cs
- ReadWriteObjectLock.cs
- ButtonField.cs
- SystemTcpStatistics.cs
- MetadataLocation.cs
- MSG.cs
- Constraint.cs
- DesigntimeLicenseContextSerializer.cs
- DurableOperationAttribute.cs
- TCPClient.cs
- TemplateBindingExtension.cs
- DescriptionAttribute.cs
- SettingsAttributes.cs
- TextEditorTables.cs
- RegexStringValidator.cs
- MasterPageBuildProvider.cs
- NotImplementedException.cs
- LogStore.cs
- SchemaObjectWriter.cs
- UnsignedPublishLicense.cs
- GridViewRowEventArgs.cs
- NonceCache.cs
- TargetParameterCountException.cs
- BrowserDefinitionCollection.cs
- WindowPattern.cs
- ProtocolsConfiguration.cs
- FontStyle.cs
- Pts.cs
- RegexCompilationInfo.cs
- SocketCache.cs
- DiscriminatorMap.cs
- _IPv4Address.cs
- DataTableCollection.cs
- UnicodeEncoding.cs
- UpdateManifestForBrowserApplication.cs
- RSAProtectedConfigurationProvider.cs
- HttpServerVarsCollection.cs
- BinaryExpression.cs
- SslStreamSecurityUpgradeProvider.cs
- SrgsOneOf.cs
- HttpRuntime.cs
- DispatcherProcessingDisabled.cs
- XPathNode.cs
- TreeViewDesigner.cs
- SoapDocumentMethodAttribute.cs
- DataGridViewAdvancedBorderStyle.cs
- ClientConfigurationHost.cs
- EventHandlerService.cs
- Matrix3DStack.cs
- MetaModel.cs