Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ //// 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
- TextTreeTextNode.cs
- CodeDefaultValueExpression.cs
- KeyEventArgs.cs
- namescope.cs
- Parser.cs
- AppSettingsExpressionBuilder.cs
- DebugController.cs
- TextContainerChangeEventArgs.cs
- StatusBarPanelClickEvent.cs
- Types.cs
- TaskbarItemInfo.cs
- Rules.cs
- SqlNode.cs
- SeparatorAutomationPeer.cs
- sitestring.cs
- EventBuilder.cs
- SessionChannels.cs
- ObfuscateAssemblyAttribute.cs
- ExceptionHelpers.cs
- FlowDocumentFormatter.cs
- DataGridViewTextBoxColumn.cs
- XmlName.cs
- ZoneIdentityPermission.cs
- ToolStripItemTextRenderEventArgs.cs
- SaveRecipientRequest.cs
- Trace.cs
- JsonUriDataContract.cs
- ContentValidator.cs
- RequestQueue.cs
- TransformDescriptor.cs
- uribuilder.cs
- PageContentAsyncResult.cs
- HandledMouseEvent.cs
- SoapIncludeAttribute.cs
- ExpandCollapseProviderWrapper.cs
- WebPartEditVerb.cs
- TraceData.cs
- __Error.cs
- ReliableDuplexSessionChannel.cs
- XmlAnyElementAttribute.cs
- Constants.cs
- TransactionManager.cs
- HttpSysSettings.cs
- EventMappingSettingsCollection.cs
- PromptEventArgs.cs
- MissingSatelliteAssemblyException.cs
- ConfigsHelper.cs
- ZipIORawDataFileBlock.cs
- TreeViewDesigner.cs
- ConfigXmlCDataSection.cs
- ConfigDefinitionUpdates.cs
- FramingChannels.cs
- ConfigXmlElement.cs
- RuleSettings.cs
- FamilyMapCollection.cs
- CodeNamespaceImport.cs
- WindowPattern.cs
- NavigationEventArgs.cs
- ItemsPanelTemplate.cs
- TagMapInfo.cs
- ResourceSetExpression.cs
- ListSortDescriptionCollection.cs
- GenerateTemporaryTargetAssembly.cs
- GenericEnumConverter.cs
- FileDialog.cs
- SqlBooleanizer.cs
- CodeCatchClauseCollection.cs
- DataGridViewTopRowAccessibleObject.cs
- SimpleType.cs
- SoapTransportImporter.cs
- MyContact.cs
- ColumnMapTranslator.cs
- MembershipPasswordException.cs
- FixedTextView.cs
- TextServicesDisplayAttribute.cs
- Function.cs
- WindowsToolbar.cs
- HtmlForm.cs
- CharacterMetricsDictionary.cs
- XsltContext.cs
- WindowsContainer.cs
- UIPermission.cs
- VirtualizedItemProviderWrapper.cs
- DocumentPageTextView.cs
- SqlBinder.cs
- ConfigXmlSignificantWhitespace.cs
- SecurityState.cs
- DataGridComponentEditor.cs
- FontEmbeddingManager.cs
- ConfigurationPropertyAttribute.cs
- DBBindings.cs
- CommandSet.cs
- UtilityExtension.cs
- ToolboxDataAttribute.cs
- WindowCollection.cs
- ConnectionPoint.cs
- AgileSafeNativeMemoryHandle.cs
- AttributeData.cs
- SourceLineInfo.cs
- WebConfigurationHost.cs