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
- OledbConnectionStringbuilder.cs
- BitmapImage.cs
- Point.cs
- Literal.cs
- ContainsRowNumberChecker.cs
- DetailsViewCommandEventArgs.cs
- RemotingConfigParser.cs
- SmuggledIUnknown.cs
- WebPartsPersonalization.cs
- CodeMethodInvokeExpression.cs
- DesignerVerbCollection.cs
- BatchStream.cs
- EmbeddedMailObjectsCollection.cs
- XmlSchemaComplexContentExtension.cs
- BuildManager.cs
- ConfigXmlAttribute.cs
- srgsitem.cs
- EmptyStringExpandableObjectConverter.cs
- Input.cs
- Int16Converter.cs
- Renderer.cs
- ValueTypeFixupInfo.cs
- FileLogRecordEnumerator.cs
- ApplyHostConfigurationBehavior.cs
- GridViewUpdatedEventArgs.cs
- PolygonHotSpot.cs
- ScriptComponentDescriptor.cs
- DataObject.cs
- XmlSchemaSimpleType.cs
- MachineSettingsSection.cs
- SslStream.cs
- followingquery.cs
- ServiceElementCollection.cs
- TextElementCollection.cs
- AgileSafeNativeMemoryHandle.cs
- MemberCollection.cs
- InlinedAggregationOperator.cs
- storepermission.cs
- TranslateTransform3D.cs
- ReflectEventDescriptor.cs
- HighlightOverlayGlyph.cs
- WebPartEventArgs.cs
- WebPartEditorCancelVerb.cs
- ZipIOLocalFileDataDescriptor.cs
- TextMarkerSource.cs
- __ConsoleStream.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- ReferenceAssemblyAttribute.cs
- DataKeyArray.cs
- PriorityBinding.cs
- SqlSupersetValidator.cs
- CompositeTypefaceMetrics.cs
- ClientConvert.cs
- SystemColorTracker.cs
- XmlCodeExporter.cs
- ReliableChannelBinder.cs
- ContextQuery.cs
- DataGridViewRowsRemovedEventArgs.cs
- BitmapEffectInput.cs
- GeneratedCodeAttribute.cs
- GlyphRunDrawing.cs
- SqlUserDefinedTypeAttribute.cs
- DynamicResourceExtensionConverter.cs
- GeneratedCodeAttribute.cs
- VirtualPathData.cs
- AdornerPresentationContext.cs
- BinaryQueryOperator.cs
- PartManifestEntry.cs
- Sequence.cs
- VolatileEnlistmentState.cs
- HitTestWithGeometryDrawingContextWalker.cs
- BmpBitmapEncoder.cs
- InputBuffer.cs
- WebPartZoneDesigner.cs
- DataKey.cs
- ObjectRef.cs
- TemplateXamlTreeBuilder.cs
- PropertyInformationCollection.cs
- InvalidEnumArgumentException.cs
- TableRowGroup.cs
- Listbox.cs
- SqlDependencyUtils.cs
- DataSourceHelper.cs
- RemotingAttributes.cs
- DesignerLoader.cs
- NameValueConfigurationCollection.cs
- SplashScreen.cs
- WebEvents.cs
- ReliabilityContractAttribute.cs
- AuthStoreRoleProvider.cs
- FixedSOMElement.cs
- BitmapSourceSafeMILHandle.cs
- HtmlWindow.cs
- _ProxyChain.cs
- DataGridViewCheckBoxColumn.cs
- ClientProtocol.cs
- BaseProcessor.cs
- XmlSchemaExternal.cs
- XPathNode.cs
- Shape.cs