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
- SecurityManager.cs
- CompositeScriptReferenceEventArgs.cs
- DoubleCollection.cs
- RelationshipNavigation.cs
- SevenBitStream.cs
- SelectingProviderEventArgs.cs
- DataGridToolTip.cs
- DataListItemEventArgs.cs
- ClientUtils.cs
- Padding.cs
- ButtonChrome.cs
- AncestorChangedEventArgs.cs
- CommandExpr.cs
- VisualTarget.cs
- RadioButtonPopupAdapter.cs
- WizardDesigner.cs
- CompilerGlobalScopeAttribute.cs
- MachineKeySection.cs
- HTTPNotFoundHandler.cs
- TraceSource.cs
- ACL.cs
- SqlUtil.cs
- XmlSchemaSequence.cs
- NodeFunctions.cs
- AppDomainFactory.cs
- DataListCommandEventArgs.cs
- ChtmlTextWriter.cs
- SafeLibraryHandle.cs
- FormViewDeletedEventArgs.cs
- Baml6Assembly.cs
- ResizeBehavior.cs
- WebPartUtil.cs
- SerializationTrace.cs
- DragDrop.cs
- WindowsFormsLinkLabel.cs
- RegexCapture.cs
- HtmlHead.cs
- TemplateBindingExpression.cs
- UseManagedPresentationBindingElementImporter.cs
- SafeFileMapViewHandle.cs
- Mapping.cs
- XmlSchemaGroup.cs
- DataTableCollection.cs
- ObjectListCommand.cs
- RuleSetBrowserDialog.cs
- AxHost.cs
- ApplicationFileCodeDomTreeGenerator.cs
- QuaternionAnimation.cs
- NetTcpSecurityElement.cs
- HttpResponse.cs
- SynchronizedDispatch.cs
- Ports.cs
- CharStorage.cs
- EndPoint.cs
- StringReader.cs
- DynamicPropertyReader.cs
- AsnEncodedData.cs
- Brush.cs
- TableItemProviderWrapper.cs
- StringBlob.cs
- ScriptManagerProxy.cs
- TextureBrush.cs
- ProfileProvider.cs
- LayoutTableCell.cs
- ClientSession.cs
- XmlDictionaryWriter.cs
- RelatedImageListAttribute.cs
- DocumentSchemaValidator.cs
- DetailsViewUpdateEventArgs.cs
- ServiceBusyException.cs
- Debug.cs
- XmlWellformedWriter.cs
- DataGridViewTextBoxEditingControl.cs
- GenericUI.cs
- sitestring.cs
- PrintPreviewDialog.cs
- BamlRecordHelper.cs
- ellipse.cs
- AliasGenerator.cs
- CallbackDebugElement.cs
- TypefaceCollection.cs
- HashCodeCombiner.cs
- SafeSystemMetrics.cs
- MemberAccessException.cs
- ModuleConfigurationInfo.cs
- AudioSignalProblemOccurredEventArgs.cs
- RightsManagementProvider.cs
- _StreamFramer.cs
- Decimal.cs
- SqlConnectionManager.cs
- PropertyChangingEventArgs.cs
- GradientStop.cs
- EntityCollection.cs
- BufferedStream.cs
- PaintValueEventArgs.cs
- BinaryParser.cs
- ReferencedCollectionType.cs
- StringBuilder.cs
- CurrentChangedEventManager.cs
- SamlAction.cs