Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / QIL / QilScopedVisitor.cs / 1305376 / QilScopedVisitor.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
namespace System.Xml.Xsl.Qil {
///
/// Adds iterator and function scoping to the QilVisitor implementation.
///
internal class QilScopedVisitor : QilVisitor {
//-----------------------------------------------
// QilScopedVisitor methods
//-----------------------------------------------
///
/// Called when a variable, parameter, or function enters scope.
///
protected virtual void BeginScope(QilNode node) {
}
///
/// Called when a variable, parameter, or function exits scope.
///
protected virtual void EndScope(QilNode node) {
}
///
/// Called at the beginning of Visit().
///
protected virtual void BeforeVisit(QilNode node) {
QilExpression qil;
switch (node.NodeType) {
case QilNodeType.QilExpression:
// Put all global functions, variables, and parameters in scope
qil = (QilExpression) node;
foreach (QilNode param in qil.GlobalParameterList) BeginScope(param);
foreach (QilNode var in qil.GlobalVariableList) BeginScope(var);
foreach (QilNode func in qil.FunctionList) BeginScope(func);
break;
case QilNodeType.Function:
// Put all formal arguments in scope
foreach (QilNode arg in ((QilFunction) node).Arguments) BeginScope(arg);
break;
case QilNodeType.Loop:
case QilNodeType.Filter:
case QilNodeType.Sort:
// Put loop iterator in scope
BeginScope(((QilLoop) node).Variable);
break;
}
}
///
/// Called at the end of Visit().
///
protected virtual void AfterVisit(QilNode node) {
QilExpression qil;
switch (node.NodeType) {
case QilNodeType.QilExpression:
// Remove all global functions, variables, and parameters from scope
qil = (QilExpression) node;
foreach (QilNode func in qil.FunctionList) EndScope(func);
foreach (QilNode var in qil.GlobalVariableList) EndScope(var);
foreach (QilNode param in qil.GlobalParameterList) EndScope(param);
break;
case QilNodeType.Function:
// Remove all formal arguments from scope
foreach (QilNode arg in ((QilFunction) node).Arguments) EndScope(arg);
break;
case QilNodeType.Loop:
case QilNodeType.Filter:
case QilNodeType.Sort:
// Remove loop iterator in scope
EndScope(((QilLoop) node).Variable);
break;
}
}
//-----------------------------------------------
// QilVisitor overrides
//-----------------------------------------------
///
/// Call BeforeVisit() and AfterVisit().
///
protected override QilNode Visit(QilNode n) {
QilNode ret;
BeforeVisit(n);
ret = base.Visit(n);
AfterVisit(n);
return ret;
}
}
}
// 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
- TransactionsSectionGroup.cs
- ExcludeFromCodeCoverageAttribute.cs
- XmlCodeExporter.cs
- PropertyNames.cs
- TripleDES.cs
- XmlSchemaType.cs
- BamlLocalizableResourceKey.cs
- SqlExpressionNullability.cs
- DaylightTime.cs
- CqlParserHelpers.cs
- SrgsGrammarCompiler.cs
- DesignerAttributeInfo.cs
- PrintingPermission.cs
- coordinator.cs
- Config.cs
- ChannelProtectionRequirements.cs
- ProgressBarRenderer.cs
- DataGridCaption.cs
- DeclarativeCatalogPart.cs
- GlyphShapingProperties.cs
- StrokeNodeOperations.cs
- ClientCredentialsSecurityTokenManager.cs
- TreeView.cs
- RoutedEventValueSerializer.cs
- DesignerActionPanel.cs
- HostVisual.cs
- BasicViewGenerator.cs
- SubordinateTransaction.cs
- BamlVersionHeader.cs
- HopperCache.cs
- SourceInterpreter.cs
- Encoder.cs
- ITreeGenerator.cs
- LinqExpressionNormalizer.cs
- MiniModule.cs
- IISUnsafeMethods.cs
- AncestorChangedEventArgs.cs
- DateTimeValueSerializerContext.cs
- TemplateControlBuildProvider.cs
- ExtentJoinTreeNode.cs
- EmptyControlCollection.cs
- Delegate.cs
- ApplicationContext.cs
- DataObjectEventArgs.cs
- IndexObject.cs
- EnumerableRowCollectionExtensions.cs
- Model3DCollection.cs
- ComponentManagerBroker.cs
- SerializationHelper.cs
- SubMenuStyle.cs
- panel.cs
- ConfigurationLocation.cs
- InputBuffer.cs
- SizeConverter.cs
- EllipseGeometry.cs
- StorageMappingItemLoader.cs
- COM2FontConverter.cs
- SevenBitStream.cs
- TreeNodeMouseHoverEvent.cs
- DataTableCollection.cs
- SecurityTokenTypes.cs
- DrawItemEvent.cs
- DataGrid.cs
- EventSourceCreationData.cs
- RadialGradientBrush.cs
- PathTooLongException.cs
- LexicalChunk.cs
- ScriptingJsonSerializationSection.cs
- PointUtil.cs
- QilReference.cs
- SweepDirectionValidation.cs
- TextParagraphCache.cs
- TagPrefixCollection.cs
- ManifestBasedResourceGroveler.cs
- FormViewModeEventArgs.cs
- MenuItemBinding.cs
- HelpEvent.cs
- WorkflowViewStateService.cs
- MediaScriptCommandRoutedEventArgs.cs
- StrongTypingException.cs
- Soap.cs
- DataGridViewSelectedCellCollection.cs
- DataGridRelationshipRow.cs
- IxmlLineInfo.cs
- BinaryObjectInfo.cs
- ReferencedCollectionType.cs
- InputLanguageSource.cs
- ProbeMatches11.cs
- ModelMemberCollection.cs
- FormViewCommandEventArgs.cs
- FontStyles.cs
- safemediahandle.cs
- FontFamilyConverter.cs
- ObjectItemAttributeAssemblyLoader.cs
- _TLSstream.cs
- XPathNodeInfoAtom.cs
- XmlBinaryReaderSession.cs
- DBBindings.cs
- MonitoringDescriptionAttribute.cs
- HelpKeywordAttribute.cs