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
- Composition.cs
- FilterQueryOptionExpression.cs
- DataSourceSelectArguments.cs
- XmlAtomicValue.cs
- SchemaElementDecl.cs
- Rect3DValueSerializer.cs
- ErrorWebPart.cs
- RootBuilder.cs
- SoapSchemaImporter.cs
- ListViewDeletedEventArgs.cs
- BrowserCapabilitiesCompiler.cs
- TextServicesLoader.cs
- ClrProviderManifest.cs
- BindToObject.cs
- JsonReader.cs
- StylusPointProperties.cs
- ExtractedStateEntry.cs
- FixedSOMImage.cs
- PreservationFileReader.cs
- SqlCacheDependencySection.cs
- XmlChildEnumerator.cs
- DataGridViewCheckBoxCell.cs
- EventlogProvider.cs
- BaseCodePageEncoding.cs
- FixUp.cs
- AudioLevelUpdatedEventArgs.cs
- XPathDocumentBuilder.cs
- StringFreezingAttribute.cs
- Registry.cs
- TheQuery.cs
- TimeZone.cs
- ChtmlCommandAdapter.cs
- DataGridViewImageCell.cs
- IisTraceWebEventProvider.cs
- Int32Converter.cs
- FilterException.cs
- oledbconnectionstring.cs
- AssertSection.cs
- ConfigXmlAttribute.cs
- PaginationProgressEventArgs.cs
- PrePrepareMethodAttribute.cs
- LinqToSqlWrapper.cs
- PerformanceCounter.cs
- shaperfactoryquerycacheentry.cs
- ProviderBase.cs
- Menu.cs
- CommonDialog.cs
- TextEncodedRawTextWriter.cs
- ConfigurationManagerHelper.cs
- DynamicResourceExtensionConverter.cs
- SchemaCollectionPreprocessor.cs
- AttributeCollection.cs
- DataGridViewSortCompareEventArgs.cs
- RMPermissions.cs
- httpstaticobjectscollection.cs
- TextTreeTextNode.cs
- SiteMapDataSourceView.cs
- MultipartIdentifier.cs
- ChildTable.cs
- PageCodeDomTreeGenerator.cs
- DescendantBaseQuery.cs
- Storyboard.cs
- CodeObjectCreateExpression.cs
- ProfileEventArgs.cs
- ExtensionSimplifierMarkupObject.cs
- WithStatement.cs
- DataKeyPropertyAttribute.cs
- CompoundFileStreamReference.cs
- LinqDataSourceView.cs
- BitStack.cs
- RijndaelManaged.cs
- FieldAccessException.cs
- TranslateTransform3D.cs
- DrawingCollection.cs
- COM2PropertyDescriptor.cs
- WorkflowInvoker.cs
- SamlAction.cs
- MDIControlStrip.cs
- ProfileEventArgs.cs
- AppSecurityManager.cs
- EventLogger.cs
- versioninfo.cs
- HtmlImage.cs
- ListenerConstants.cs
- FrameworkContentElementAutomationPeer.cs
- DefaultValueConverter.cs
- FormClosingEvent.cs
- ViewGenerator.cs
- CachedPathData.cs
- SQLInt64.cs
- EntityDataSourceValidationException.cs
- TextSchema.cs
- UInt16Storage.cs
- WebConfigurationManager.cs
- FlagsAttribute.cs
- Ref.cs
- GPRECT.cs
- Funcletizer.cs
- OracleString.cs
- NameObjectCollectionBase.cs