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
- AffineTransform3D.cs
- CacheModeConverter.cs
- GACMembershipCondition.cs
- StopStoryboard.cs
- BufferedGraphics.cs
- PatternMatcher.cs
- Win32Exception.cs
- Simplifier.cs
- PrimitiveCodeDomSerializer.cs
- EventTrigger.cs
- ClientTargetCollection.cs
- OperationContext.cs
- TdsParserSessionPool.cs
- COAUTHINFO.cs
- DataGridTextBox.cs
- TimelineGroup.cs
- UnrecognizedPolicyAssertionElement.cs
- FileEnumerator.cs
- DataSource.cs
- TypeListConverter.cs
- StreamInfo.cs
- BuildResult.cs
- InputProviderSite.cs
- Graphics.cs
- EditorAttributeInfo.cs
- InstrumentationTracker.cs
- LiteralSubsegment.cs
- CreateRefExpr.cs
- ExpressionQuoter.cs
- Binding.cs
- Point4D.cs
- CompilerScopeManager.cs
- RawStylusInputCustomData.cs
- Win32Native.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- StaticSiteMapProvider.cs
- BuildProvider.cs
- AssemblySettingAttributes.cs
- AssemblyBuilder.cs
- HotSpotCollection.cs
- SingleConverter.cs
- IndexObject.cs
- XmlnsDefinitionAttribute.cs
- IdentityModelStringsVersion1.cs
- TemplatedWizardStep.cs
- WebReferenceCollection.cs
- EncodingNLS.cs
- DataRowExtensions.cs
- EntityDataSourceUtil.cs
- DecryptRequest.cs
- SqlDependencyListener.cs
- Solver.cs
- MemberRestriction.cs
- ListView.cs
- InvalidDataException.cs
- X509CertificateStore.cs
- ErrorInfoXmlDocument.cs
- TableItemStyle.cs
- UnsafeNativeMethods.cs
- Stacktrace.cs
- ContextStaticAttribute.cs
- SqlException.cs
- CheckBoxRenderer.cs
- UnconditionalPolicy.cs
- BooleanFunctions.cs
- MenuAdapter.cs
- PrimitiveRenderer.cs
- ModelItemDictionary.cs
- UnicastIPAddressInformationCollection.cs
- Propagator.ExtentPlaceholderCreator.cs
- DocumentSchemaValidator.cs
- TimelineClockCollection.cs
- GPRECT.cs
- ScriptingAuthenticationServiceSection.cs
- JsonEnumDataContract.cs
- CodeParameterDeclarationExpressionCollection.cs
- GridViewColumn.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- FormatterConverter.cs
- ButtonBase.cs
- Visitors.cs
- Themes.cs
- DesignTimeTemplateParser.cs
- EditorAttribute.cs
- RegexInterpreter.cs
- ContentTextAutomationPeer.cs
- SqlCaseSimplifier.cs
- TogglePatternIdentifiers.cs
- OleDbConnectionInternal.cs
- DataGridRelationshipRow.cs
- ClientScriptManager.cs
- HttpWriter.cs
- ConfigViewGenerator.cs
- TimersDescriptionAttribute.cs
- SharedConnectionWorkflowTransactionService.cs
- Function.cs
- DurableTimerExtension.cs
- ResXResourceReader.cs
- ErrorProvider.cs
- JavaScriptSerializer.cs