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
- ExpanderAutomationPeer.cs
- FixUp.cs
- PropertyConverter.cs
- XamlReaderHelper.cs
- DeferredTextReference.cs
- COM2PictureConverter.cs
- WebPartZoneDesigner.cs
- MaterialGroup.cs
- DBCommand.cs
- ConstraintManager.cs
- LOSFormatter.cs
- AttributeAction.cs
- EmbeddedMailObject.cs
- LoginUtil.cs
- QilLoop.cs
- Internal.cs
- SQLRoleProvider.cs
- FileChangesMonitor.cs
- InstanceNormalEvent.cs
- TextElementCollection.cs
- Repeater.cs
- listitem.cs
- EntityCommandCompilationException.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- ProtectedProviderSettings.cs
- ToolStripProgressBar.cs
- ServicePointManagerElement.cs
- ApplicationServicesHostFactory.cs
- SchemaCompiler.cs
- DrawingBrush.cs
- QueryExtender.cs
- InlineObject.cs
- NeutralResourcesLanguageAttribute.cs
- ToolStripContentPanelDesigner.cs
- WebSysDescriptionAttribute.cs
- DelimitedListTraceListener.cs
- PropertyTabAttribute.cs
- MultipartContentParser.cs
- WebPartVerbCollection.cs
- unsafeIndexingFilterStream.cs
- ScriptReferenceEventArgs.cs
- NativeMethods.cs
- AssociationSetEnd.cs
- followingquery.cs
- TypeForwardedToAttribute.cs
- Collection.cs
- AVElementHelper.cs
- WebPartConnectionsConfigureVerb.cs
- SqlReferenceCollection.cs
- AppDomainAttributes.cs
- InputLanguage.cs
- TemplatedAdorner.cs
- XmlSerializableWriter.cs
- FindCriteria11.cs
- TripleDES.cs
- HtmlInputRadioButton.cs
- panel.cs
- HideDisabledControlAdapter.cs
- PropertyGridCommands.cs
- CellParagraph.cs
- CodeConditionStatement.cs
- InputScope.cs
- ApplicationDirectory.cs
- LinkGrep.cs
- RangeValuePatternIdentifiers.cs
- XamlSerializerUtil.cs
- DataGridViewAddColumnDialog.cs
- MembershipValidatePasswordEventArgs.cs
- Queue.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- OrderByBuilder.cs
- WebHttpSecurityElement.cs
- LambdaCompiler.ControlFlow.cs
- TextEffectResolver.cs
- QuaternionKeyFrameCollection.cs
- MultilineStringConverter.cs
- WorkflowServiceBehavior.cs
- LocalTransaction.cs
- DataGridCaption.cs
- ZipIOExtraFieldZip64Element.cs
- CodePageUtils.cs
- ItemDragEvent.cs
- HttpListenerContext.cs
- Predicate.cs
- EventRouteFactory.cs
- AccessDataSourceDesigner.cs
- EmptyStringExpandableObjectConverter.cs
- InputMethod.cs
- MediaPlayer.cs
- CleanUpVirtualizedItemEventArgs.cs
- DataServiceConfiguration.cs
- UnsafeNativeMethods.cs
- CodeAttachEventStatement.cs
- MappableObjectManager.cs
- control.ime.cs
- RegexGroup.cs
- PopupRoot.cs
- TraceContext.cs
- SoapMessage.cs
- ArrayList.cs