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
- BamlLocalizableResource.cs
- GridSplitter.cs
- PlainXmlWriter.cs
- ContextProperty.cs
- ShaperBuffers.cs
- FrameworkRichTextComposition.cs
- ReflectionServiceProvider.cs
- WebResourceUtil.cs
- RadioButtonBaseAdapter.cs
- SignedXmlDebugLog.cs
- ListViewItem.cs
- WinEventTracker.cs
- LocalizabilityAttribute.cs
- DbgUtil.cs
- StaticResourceExtension.cs
- DataGridViewCellStateChangedEventArgs.cs
- UnionExpr.cs
- ByeMessage11.cs
- FileEnumerator.cs
- WmlImageAdapter.cs
- CategoryValueConverter.cs
- DataTableReaderListener.cs
- XmlAttributeAttribute.cs
- FormsAuthenticationModule.cs
- DataGridViewCheckBoxColumn.cs
- WhitespaceRuleReader.cs
- StylusPointPropertyInfo.cs
- _NTAuthentication.cs
- DesignerVerbCollection.cs
- SystemDropShadowChrome.cs
- ToolStripRenderEventArgs.cs
- WCFModelStrings.Designer.cs
- DataGridParentRows.cs
- SoapAttributeAttribute.cs
- TextParentUndoUnit.cs
- SqlCacheDependencyDatabaseCollection.cs
- SQLDecimalStorage.cs
- SchemaSetCompiler.cs
- DataGridAutoFormatDialog.cs
- MouseWheelEventArgs.cs
- DuplexChannelFactory.cs
- ImageIndexConverter.cs
- ConfigurationSectionGroup.cs
- MDIClient.cs
- WorkflowRuntimeServiceElement.cs
- LexicalChunk.cs
- WebPartVerbsEventArgs.cs
- SystemColors.cs
- SymLanguageVendor.cs
- RoleManagerSection.cs
- PathSegment.cs
- CursorConverter.cs
- XmlLanguageConverter.cs
- DocumentGrid.cs
- CapabilitiesUse.cs
- DataGridViewCellConverter.cs
- IsolatedStoragePermission.cs
- DropTarget.cs
- CustomCredentialPolicy.cs
- CorrelationKeyCalculator.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- webclient.cs
- BasicExpressionVisitor.cs
- DataKeyArray.cs
- EventSinkHelperWriter.cs
- XmlJsonWriter.cs
- Parameter.cs
- RemotingAttributes.cs
- AsnEncodedData.cs
- RSACryptoServiceProvider.cs
- CompositeTypefaceMetrics.cs
- EdmRelationshipRoleAttribute.cs
- storepermission.cs
- DrawingContextWalker.cs
- TraceHelpers.cs
- CatalogZone.cs
- ReadOnlyMetadataCollection.cs
- TypeUsage.cs
- SqlProviderUtilities.cs
- PaperSource.cs
- ScriptResourceInfo.cs
- SqlNodeAnnotations.cs
- MediaSystem.cs
- BehaviorEditorPart.cs
- ButtonChrome.cs
- Size.cs
- IdentityNotMappedException.cs
- ConsumerConnectionPointCollection.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- DependentList.cs
- DataGridViewCellStyleChangedEventArgs.cs
- ToolStripDropDownMenu.cs
- PeerToPeerException.cs
- BookmarkWorkItem.cs
- DbDataAdapter.cs
- dtdvalidator.cs
- ObjectStateManagerMetadata.cs
- SqlConnectionHelper.cs
- GrabHandleGlyph.cs
- ResourceExpressionBuilder.cs