diff options
Diffstat (limited to 'tools/Sandcastle/Source/CCI/Updater.cs')
-rw-r--r-- | tools/Sandcastle/Source/CCI/Updater.cs | 2979 |
1 files changed, 2979 insertions, 0 deletions
diff --git a/tools/Sandcastle/Source/CCI/Updater.cs b/tools/Sandcastle/Source/CCI/Updater.cs new file mode 100644 index 0000000..18c015a --- /dev/null +++ b/tools/Sandcastle/Source/CCI/Updater.cs @@ -0,0 +1,2979 @@ +// Copyright © Microsoft Corporation. +// This source file is subject to the Microsoft Permissive License. +// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. +// All other rights reserved. + +#if !MinimalReader +using System; +using System.Diagnostics; + +#if CCINamespace +namespace Microsoft.Cci{ +#else +namespace System.Compiler +{ +#endif + public class UpdateSpecification + { + public Node Original; + public Node Changes; + public Node Deletions; + public Node Insertions; + //TODO: source change list? + } + public class Updater + { + public static void UpdateOriginal(UpdateSpecification update) + { + if (update == null) { Debug.Assert(false); return; } + Updater updater = new Updater(); + updater.Visit(update.Original, update.Changes, update.Deletions, update.Insertions); + } + + public Updater callingVisitor; + public int currentSourcePositionDelta; + public Document currentDocument; + + public Updater() + { + } + public Updater(Updater callingVisitor) + { + this.callingVisitor = callingVisitor; + } + public virtual Node VisitUnknownNodeType(Node node, Node changes, Node deletions, Node insertions) + { + Updater visitor = this.GetVisitorFor(node); + if (visitor == null) return node; + if (this.callingVisitor != null) + //Allow specialized state (unknown to this visitor) to propagate all the way down to the new visitor + this.callingVisitor.TransferStateTo(visitor); + this.TransferStateTo(visitor); + node = visitor.Visit(node, changes, deletions, insertions); + visitor.TransferStateTo(this); + if (this.callingVisitor != null) + //Propagate specialized state (unknown to this visitor) all the way up the chain + visitor.TransferStateTo(this.callingVisitor); + return node; + } + public virtual void TransferStateTo(Updater target) + { + if (target == null) return; + target.currentSourcePositionDelta = this.currentSourcePositionDelta; + } + public virtual Updater GetVisitorFor(Node node) + { + if (node == null) return null; + return (Updater)node.GetVisitorFor(this, this.GetType().Name); + } + public virtual Node Visit(Node node, Node changes, Node deletions, Node insertions) + { + if (node == null) return changes; + switch (node.NodeType) + { + case NodeType.AddressDereference: + return this.VisitAddressDereference((AddressDereference)node, changes as AddressDereference, deletions as AddressDereference, insertions as AddressDereference); + case NodeType.AliasDefinition: + return this.VisitAliasDefinition((AliasDefinition)node, changes as AliasDefinition, deletions as AliasDefinition, insertions as AliasDefinition); + case NodeType.AnonymousNestedFunction: + return this.VisitAnonymousNestedFunction((AnonymousNestedFunction)node, changes as AnonymousNestedFunction, deletions as AnonymousNestedFunction, insertions as AnonymousNestedFunction); + case NodeType.ApplyToAll: + return this.VisitApplyToAll((ApplyToAll)node, changes as ApplyToAll, deletions as ApplyToAll, insertions as ApplyToAll); + case NodeType.Arglist: + return this.VisitExpression((Expression)node, changes as Expression, deletions as Expression, insertions as Expression); + case NodeType.ArrayType: + Debug.Assert(false); return null; + case NodeType.Assembly: + return this.VisitAssembly((AssemblyNode)node, changes as AssemblyNode, deletions as AssemblyNode, insertions as AssemblyNode); + case NodeType.AssemblyReference: + return this.VisitAssemblyReference((AssemblyReference)node, changes as AssemblyReference, deletions as AssemblyReference, insertions as AssemblyReference); + case NodeType.Assertion: + return this.VisitAssertion((Assertion)node, changes as Assertion, deletions as Assertion, insertions as Assertion); + case NodeType.AssignmentExpression: + return this.VisitAssignmentExpression((AssignmentExpression)node, changes as AssignmentExpression, deletions as AssignmentExpression, insertions as AssignmentExpression); + case NodeType.AssignmentStatement: + return this.VisitAssignmentStatement((AssignmentStatement)node, changes as AssignmentStatement, deletions as AssignmentStatement, insertions as AssignmentStatement); + case NodeType.Attribute: + return this.VisitAttributeNode((AttributeNode)node, changes as AttributeNode, deletions as AttributeNode, insertions as AttributeNode); + case NodeType.Base: + return this.VisitBase((Base)node, changes as Base, deletions as Base, insertions as Base); + case NodeType.Block: + return this.VisitBlock((Block)node, changes as Block, deletions as Block, insertions as Block); + case NodeType.BlockExpression: + return this.VisitBlockExpression((BlockExpression)node, changes as BlockExpression, deletions as BlockExpression, insertions as BlockExpression); + case NodeType.Branch: + Debug.Assert(false); return null; + case NodeType.Compilation: + return this.VisitCompilation((Compilation)node, changes as Compilation, deletions as Compilation, insertions as Compilation); + case NodeType.CompilationUnit: + return this.VisitCompilationUnit((CompilationUnit)node, changes as CompilationUnit, deletions as CompilationUnit, insertions as CompilationUnit); + case NodeType.CompilationUnitSnippet: + return this.VisitCompilationUnitSnippet((CompilationUnitSnippet)node, changes as CompilationUnitSnippet, deletions as CompilationUnitSnippet, insertions as CompilationUnitSnippet); +#if ExtendedRuntime + case NodeType.ConstrainedType: + return this.VisitConstrainedType((ConstrainedType)node, changes as ConstrainedType, deletions as ConstrainedType, insertions as ConstrainedType); +#endif + case NodeType.Continue: + return this.VisitContinue((Continue)node, changes as Continue, deletions as Continue, insertions as Continue); + case NodeType.CurrentClosure: + return this.VisitCurrentClosure((CurrentClosure)node, changes as CurrentClosure, deletions as CurrentClosure, insertions as CurrentClosure); + case NodeType.DebugBreak: + return node; + case NodeType.Call: + case NodeType.Calli: + case NodeType.Callvirt: + case NodeType.Jmp: + case NodeType.MethodCall: + return this.VisitMethodCall((MethodCall)node, changes as MethodCall, deletions as MethodCall, insertions as MethodCall); + case NodeType.Catch: + return this.VisitCatch((Catch)node, changes as Catch, deletions as Catch, insertions as Catch); + case NodeType.Class: + return this.VisitClass((Class)node, changes as Class, deletions as Class, insertions as Class); + case NodeType.CoerceTuple: + return this.VisitCoerceTuple((CoerceTuple)node, changes as CoerceTuple, deletions as CoerceTuple, insertions as CoerceTuple); + case NodeType.CollectionEnumerator: + return this.VisitCollectionEnumerator((CollectionEnumerator)node, changes as CollectionEnumerator, deletions as CollectionEnumerator, insertions as CollectionEnumerator); + case NodeType.Composition: + return this.VisitComposition((Composition)node, changes as Composition, deletions as Composition, insertions as Composition); + case NodeType.Construct: + return this.VisitConstruct((Construct)node, changes as Construct, deletions as Construct, insertions as Construct); + case NodeType.ConstructArray: + return this.VisitConstructArray((ConstructArray)node, changes as ConstructArray, deletions as ConstructArray, insertions as ConstructArray); + case NodeType.ConstructDelegate: + return this.VisitConstructDelegate((ConstructDelegate)node, changes as ConstructDelegate, deletions as ConstructDelegate, insertions as ConstructDelegate); + case NodeType.ConstructFlexArray: + return this.VisitConstructFlexArray((ConstructFlexArray)node, changes as ConstructFlexArray, deletions as ConstructFlexArray, insertions as ConstructFlexArray); + case NodeType.ConstructIterator: + return this.VisitConstructIterator((ConstructIterator)node, changes as ConstructIterator, deletions as ConstructIterator, insertions as ConstructIterator); + case NodeType.ConstructTuple: + return this.VisitConstructTuple((ConstructTuple)node, changes as ConstructTuple, deletions as ConstructTuple, insertions as ConstructTuple); + case NodeType.DelegateNode: + return this.VisitDelegateNode((DelegateNode)node, changes as DelegateNode, deletions as DelegateNode, insertions as DelegateNode); + case NodeType.DoWhile: + return this.VisitDoWhile((DoWhile)node, changes as DoWhile, deletions as DoWhile, insertions as DoWhile); + case NodeType.Dup: + return this.VisitExpression((Expression)node, changes as Expression, deletions as Expression, insertions as Expression); + case NodeType.EndFilter: + return this.VisitEndFilter((EndFilter)node, changes as EndFilter, deletions as EndFilter, insertions as EndFilter); + case NodeType.EndFinally: + return this.VisitEndFinally((EndFinally)node, changes as EndFinally, deletions as EndFinally, insertions as EndFinally); + case NodeType.EnumNode: + return this.VisitEnumNode((EnumNode)node, changes as EnumNode, deletions as EnumNode, insertions as EnumNode); + case NodeType.Event: + return this.VisitEvent((Event)node, changes as Event, deletions as Event, insertions as Event); + case NodeType.Exit: + return this.VisitExit((Exit)node, changes as Exit, deletions as Exit, insertions as Exit); + case NodeType.ExpressionSnippet: + return this.VisitExpressionSnippet((ExpressionSnippet)node, changes as ExpressionSnippet, deletions as ExpressionSnippet, insertions as ExpressionSnippet); + case NodeType.ExpressionStatement: + return this.VisitExpressionStatement((ExpressionStatement)node, changes as ExpressionStatement, deletions as ExpressionStatement, insertions as ExpressionStatement); + case NodeType.FaultHandler: + return this.VisitFaultHandler((FaultHandler)node, changes as FaultHandler, deletions as FaultHandler, insertions as FaultHandler); + case NodeType.Field: + return this.VisitField((Field)node, changes as Field, deletions as Field, insertions as Field); + case NodeType.FieldInitializerBlock: + return this.VisitFieldInitializerBlock((FieldInitializerBlock)node, changes as FieldInitializerBlock, deletions as FieldInitializerBlock, insertions as FieldInitializerBlock); + case NodeType.Finally: + return this.VisitFinally((Finally)node, changes as Finally, deletions as Finally, insertions as Finally); + case NodeType.Filter: + return this.VisitFilter((Filter)node, changes as Filter, deletions as Filter, insertions as Filter); + case NodeType.Fixed: + return this.VisitFixed((Fixed)node, changes as Fixed, deletions as Fixed, insertions as Fixed); + case NodeType.For: + return this.VisitFor((For)node, changes as For, deletions as For, insertions as For); + case NodeType.ForEach: + return this.VisitForEach((ForEach)node, changes as ForEach, deletions as ForEach, insertions as ForEach); + case NodeType.FunctionDeclaration: + return this.VisitFunctionDeclaration((FunctionDeclaration)node, changes as FunctionDeclaration, deletions as FunctionDeclaration, insertions as FunctionDeclaration); + case NodeType.Goto: + return this.VisitGoto((Goto)node, changes as Goto, deletions as Goto, insertions as Goto); + case NodeType.GotoCase: + return this.VisitGotoCase((GotoCase)node, changes as GotoCase, deletions as GotoCase, insertions as GotoCase); + case NodeType.Identifier: + return this.VisitIdentifier((Identifier)node, changes as Identifier, deletions as Identifier, insertions as Identifier); + case NodeType.If: + return this.VisitIf((If)node, changes as If, deletions as If, insertions as If); + case NodeType.ImplicitThis: + return this.VisitImplicitThis((ImplicitThis)node, changes as ImplicitThis, deletions as ImplicitThis, insertions as ImplicitThis); + case NodeType.Indexer: + return this.VisitIndexer((Indexer)node, changes as Indexer, deletions as Indexer, insertions as Indexer); + case NodeType.InstanceInitializer: + return this.VisitInstanceInitializer((InstanceInitializer)node, changes as InstanceInitializer, deletions as InstanceInitializer, insertions as InstanceInitializer); + case NodeType.StaticInitializer: + return this.VisitStaticInitializer((StaticInitializer)node, changes as StaticInitializer, deletions as StaticInitializer, insertions as StaticInitializer); + case NodeType.Method: + return this.VisitMethod((Method)node, changes as Method, deletions as Method, insertions as Method); + case NodeType.Interface: + return this.VisitInterface((Interface)node, changes as Interface, deletions as Interface, insertions as Interface); + case NodeType.LabeledStatement: + return this.VisitLabeledStatement((LabeledStatement)node, changes as LabeledStatement, deletions as LabeledStatement, insertions as LabeledStatement); + case NodeType.Literal: + return this.VisitLiteral((Literal)node, changes as Literal, deletions as Literal, insertions as Literal); + case NodeType.Local: + return this.VisitLocal((Local)node, changes as Local, deletions as Local, insertions as Local); + case NodeType.LocalDeclaration: + return this.VisitLocalDeclaration((LocalDeclaration)node, changes as LocalDeclaration, deletions as LocalDeclaration, insertions as LocalDeclaration); + case NodeType.LocalDeclarationsStatement: + return this.VisitLocalDeclarationsStatement((LocalDeclarationsStatement)node, changes as LocalDeclarationsStatement, deletions as LocalDeclarationsStatement, insertions as LocalDeclarationsStatement); + case NodeType.Lock: + return this.VisitLock((Lock)node, changes as Lock, deletions as Lock, insertions as Lock); + case NodeType.LRExpression: + return this.VisitLRExpression((LRExpression)node, changes as LRExpression, deletions as LRExpression, insertions as LRExpression); + case NodeType.MemberBinding: + return this.VisitMemberBinding((MemberBinding)node, changes as MemberBinding, deletions as MemberBinding, insertions as MemberBinding); + case NodeType.TemplateInstance: + return this.VisitTemplateInstance((TemplateInstance)node, changes as TemplateInstance, deletions as TemplateInstance, insertions as TemplateInstance); + case NodeType.StackAlloc: + return this.VisitStackAlloc((StackAlloc)node, changes as StackAlloc, deletions as StackAlloc, insertions as StackAlloc); + case NodeType.Module: + return this.VisitModule((Module)node, changes as Module, deletions as Module, insertions as Module); + case NodeType.ModuleReference: + return this.VisitModuleReference((ModuleReference)node, changes as ModuleReference, deletions as ModuleReference, insertions as ModuleReference); + case NodeType.NameBinding: + return this.VisitNameBinding((NameBinding)node, changes as NameBinding, deletions as NameBinding, insertions as NameBinding); + case NodeType.NamedArgument: + return this.VisitNamedArgument((NamedArgument)node, changes as NamedArgument, deletions as NamedArgument, insertions as NamedArgument); + case NodeType.Namespace: + return this.VisitNamespace((Namespace)node, changes as Namespace, deletions as Namespace, insertions as Namespace); + case NodeType.Nop: + return node; + case NodeType.OptionalModifier: + case NodeType.RequiredModifier: + return this.VisitTypeModifier((TypeModifier)node, changes as TypeModifier, deletions as TypeModifier, insertions as TypeModifier); + case NodeType.Parameter: + return this.VisitParameter((Parameter)node, changes as Parameter, deletions as Parameter, insertions as Parameter); + case NodeType.Pop: + return this.VisitExpression((Expression)node, changes as Expression, deletions as Expression, insertions as Expression); + case NodeType.PrefixExpression: + return this.VisitPrefixExpression((PrefixExpression)node, changes as PrefixExpression, deletions as PrefixExpression, insertions as PrefixExpression); + case NodeType.PostfixExpression: + return this.VisitPostfixExpression((PostfixExpression)node, changes as PostfixExpression, deletions as PostfixExpression, insertions as PostfixExpression); + case NodeType.Property: + return this.VisitProperty((Property)node, changes as Property, deletions as Property, insertions as Property); + case NodeType.QualifiedIdentifer: + return this.VisitQualifiedIdentifier((QualifiedIdentifier)node, changes as QualifiedIdentifier, deletions as QualifiedIdentifier, insertions as QualifiedIdentifier); + case NodeType.Rethrow: + case NodeType.Throw: + return this.VisitThrow((Throw)node, changes as Throw, deletions as Throw, insertions as Throw); + case NodeType.Return: + return this.VisitReturn((Return)node, changes as Return, deletions as Return, insertions as Return); + case NodeType.ResourceUse: + return this.VisitResourceUse((ResourceUse)node, changes as ResourceUse, deletions as ResourceUse, insertions as ResourceUse); + case NodeType.Repeat: + return this.VisitRepeat((Repeat)node, changes as Repeat, deletions as Repeat, insertions as Repeat); + case NodeType.SecurityAttribute: + return this.VisitSecurityAttribute((SecurityAttribute)node, changes as SecurityAttribute, deletions as SecurityAttribute, insertions as SecurityAttribute); + case NodeType.SetterValue: + return this.VisitSetterValue((SetterValue)node, changes as SetterValue, deletions as SetterValue, insertions as SetterValue); + case NodeType.StatementSnippet: + return this.VisitStatementSnippet((StatementSnippet)node, changes as StatementSnippet, deletions as StatementSnippet, insertions as StatementSnippet); + case NodeType.Struct: + return this.VisitStruct((Struct)node, changes as Struct, deletions as Struct, insertions as Struct); + case NodeType.Switch: + return this.VisitSwitch((Switch)node, changes as Switch, deletions as Switch, insertions as Switch); + case NodeType.SwitchCase: + return this.VisitSwitchCase((SwitchCase)node, changes as SwitchCase, deletions as SwitchCase, insertions as SwitchCase); + case NodeType.SwitchInstruction: + return this.VisitSwitchInstruction((SwitchInstruction)node, changes as SwitchInstruction, deletions as SwitchInstruction, insertions as SwitchInstruction); + case NodeType.Typeswitch: + return this.VisitTypeswitch((Typeswitch)node, changes as Typeswitch, deletions as Typeswitch, insertions as Typeswitch); + case NodeType.TypeswitchCase: + return this.VisitTypeswitchCase((TypeswitchCase)node, changes as TypeswitchCase, deletions as TypeswitchCase, insertions as TypeswitchCase); + case NodeType.This: + return this.VisitThis((This)node, changes as This, deletions as This, insertions as This); + case NodeType.Try: + return this.VisitTry((Try)node, changes as Try, deletions as Try, insertions as Try); +#if ExtendedRuntime + case NodeType.TupleType: + return this.VisitTupleType((TupleType)node, changes as TupleType, deletions as TupleType, insertions as TupleType); + case NodeType.TypeAlias: + return this.VisitTypeAlias((TypeAlias)node, changes as TypeAlias, deletions as TypeAlias, insertions as TypeAlias); + case NodeType.TypeIntersection: + return this.VisitTypeIntersection((TypeIntersection)node, changes as TypeIntersection, deletions as TypeIntersection, insertions as TypeIntersection); +#endif + case NodeType.TypeMemberSnippet: + return this.VisitTypeMemberSnippet((TypeMemberSnippet)node, changes as TypeMemberSnippet, deletions as TypeMemberSnippet, insertions as TypeMemberSnippet); + case NodeType.ClassParameter: + case NodeType.TypeParameter: + return this.VisitTypeParameter((TypeNode)node, changes as TypeNode, deletions as TypeNode, insertions as TypeNode); + case NodeType.TypeReference: + return this.VisitTypeReference((TypeReference)node, changes as TypeReference, deletions as TypeReference, insertions as TypeReference); +#if ExtendedRuntime + case NodeType.TypeUnion: + return this.VisitTypeUnion((TypeUnion)node, changes as TypeUnion, deletions as TypeUnion, insertions as TypeUnion); +#endif + case NodeType.UsedNamespace: + return this.VisitUsedNamespace((UsedNamespace)node, changes as UsedNamespace, deletions as UsedNamespace, insertions as UsedNamespace); + case NodeType.VariableDeclaration: + return this.VisitVariableDeclaration((VariableDeclaration)node, changes as VariableDeclaration, deletions as VariableDeclaration, insertions as VariableDeclaration); + case NodeType.While: + return this.VisitWhile((While)node, changes as While, deletions as While, insertions as While); + case NodeType.Yield: + return this.VisitYield((Yield)node, changes as Yield, deletions as Yield, insertions as Yield); + + case NodeType.Conditional: + case NodeType.Cpblk: + case NodeType.Initblk: + return this.VisitTernaryExpression((TernaryExpression)node, changes as TernaryExpression, deletions as TernaryExpression, insertions as TernaryExpression); + + case NodeType.Add: + case NodeType.Add_Ovf: + case NodeType.Add_Ovf_Un: + case NodeType.AddEventHandler: + case NodeType.And: + case NodeType.As: + case NodeType.Box: + case NodeType.Castclass: + case NodeType.Ceq: + case NodeType.Cgt: + case NodeType.Cgt_Un: + case NodeType.Clt: + case NodeType.Clt_Un: + case NodeType.Comma: + case NodeType.Div: + case NodeType.Div_Un: + case NodeType.Eq: + case NodeType.ExplicitCoercion: + case NodeType.Ge: + case NodeType.Gt: + case NodeType.Is: + case NodeType.Iff: + case NodeType.Implies: + case NodeType.Isinst: + case NodeType.Ldvirtftn: + case NodeType.Le: + case NodeType.LogicalAnd: + case NodeType.LogicalOr: + case NodeType.Lt: + case NodeType.Maplet: + case NodeType.Mkrefany: + case NodeType.Mul: + case NodeType.Mul_Ovf: + case NodeType.Mul_Ovf_Un: + case NodeType.Ne: + case NodeType.Or: + case NodeType.Range: + case NodeType.Refanyval: + case NodeType.Rem: + case NodeType.Rem_Un: + case NodeType.RemoveEventHandler: + case NodeType.Shl: + case NodeType.Shr: + case NodeType.Shr_Un: + case NodeType.Sub: + case NodeType.Sub_Ovf: + case NodeType.Sub_Ovf_Un: + case NodeType.Unbox: + case NodeType.UnboxAny: + case NodeType.Xor: + return this.VisitBinaryExpression((BinaryExpression)node, changes as BinaryExpression, deletions as BinaryExpression, insertions as BinaryExpression); + + case NodeType.AddressOf: + case NodeType.OutAddress: + case NodeType.RefAddress: + case NodeType.Ckfinite: + case NodeType.Conv_I: + case NodeType.Conv_I1: + case NodeType.Conv_I2: + case NodeType.Conv_I4: + case NodeType.Conv_I8: + case NodeType.Conv_Ovf_I: + case NodeType.Conv_Ovf_I1: + case NodeType.Conv_Ovf_I1_Un: + case NodeType.Conv_Ovf_I2: + case NodeType.Conv_Ovf_I2_Un: + case NodeType.Conv_Ovf_I4: + case NodeType.Conv_Ovf_I4_Un: + case NodeType.Conv_Ovf_I8: + case NodeType.Conv_Ovf_I8_Un: + case NodeType.Conv_Ovf_I_Un: + case NodeType.Conv_Ovf_U: + case NodeType.Conv_Ovf_U1: + case NodeType.Conv_Ovf_U1_Un: + case NodeType.Conv_Ovf_U2: + case NodeType.Conv_Ovf_U2_Un: + case NodeType.Conv_Ovf_U4: + case NodeType.Conv_Ovf_U4_Un: + case NodeType.Conv_Ovf_U8: + case NodeType.Conv_Ovf_U8_Un: + case NodeType.Conv_Ovf_U_Un: + case NodeType.Conv_R4: + case NodeType.Conv_R8: + case NodeType.Conv_R_Un: + case NodeType.Conv_U: + case NodeType.Conv_U1: + case NodeType.Conv_U2: + case NodeType.Conv_U4: + case NodeType.Conv_U8: + case NodeType.Decrement: + case NodeType.DefaultValue: + case NodeType.Increment: + case NodeType.Ldftn: + case NodeType.Ldlen: + case NodeType.Ldtoken: + case NodeType.Localloc: + case NodeType.LogicalNot: + case NodeType.Neg: + case NodeType.Not: + case NodeType.Parentheses: + case NodeType.Refanytype: + case NodeType.Sizeof: + case NodeType.SkipCheck: + case NodeType.Typeof: + case NodeType.UnaryPlus: + return this.VisitUnaryExpression((UnaryExpression)node, changes as UnaryExpression, deletions as UnaryExpression, insertions as UnaryExpression); +#if ExtendedRuntime + // query node types + case NodeType.QueryAggregate: + return this.VisitQueryAggregate((QueryAggregate)node, changes as QueryAggregate, deletions as QueryAggregate, insertions as QueryAggregate); + case NodeType.QueryAlias: + return this.VisitQueryAlias((QueryAlias)node, changes as QueryAlias, deletions as QueryAlias, insertions as QueryAlias); + case NodeType.QueryAll: + case NodeType.QueryAny: + return this.VisitQueryQuantifier((QueryQuantifier)node, changes as QueryQuantifier, deletions as QueryQuantifier, insertions as QueryQuantifier); + case NodeType.QueryAxis: + return this.VisitQueryAxis((QueryAxis)node, changes as QueryAxis, deletions as QueryAxis, insertions as QueryAxis); + case NodeType.QueryCommit: + return this.VisitQueryCommit((QueryCommit)node, changes as QueryCommit, deletions as QueryCommit, insertions as QueryCommit); + case NodeType.QueryContext: + return this.VisitQueryContext((QueryContext)node, changes as QueryContext, deletions as QueryContext, insertions as QueryContext); + case NodeType.QueryDelete: + return this.VisitQueryDelete((QueryDelete)node, changes as QueryDelete, deletions as QueryDelete, insertions as QueryDelete); + case NodeType.QueryDifference: + return this.VisitQueryDifference((QueryDifference)node, changes as QueryDifference, deletions as QueryDifference, insertions as QueryDifference); + case NodeType.QueryDistinct: + return this.VisitQueryDistinct((QueryDistinct)node, changes as QueryDistinct, deletions as QueryDistinct, insertions as QueryDistinct); + case NodeType.QueryExists: + return this.VisitQueryExists((QueryExists)node, changes as QueryExists, deletions as QueryExists, insertions as QueryExists); + case NodeType.QueryFilter: + return this.VisitQueryFilter((QueryFilter)node, changes as QueryFilter, deletions as QueryFilter, insertions as QueryFilter); + case NodeType.QueryGeneratedType: + return this.VisitQueryGeneratedType((QueryGeneratedType)node, changes as QueryGeneratedType, deletions as QueryGeneratedType, insertions as QueryGeneratedType); + case NodeType.QueryGroupBy: + return this.VisitQueryGroupBy((QueryGroupBy)node, changes as QueryGroupBy, deletions as QueryGroupBy, insertions as QueryGroupBy); + case NodeType.QueryInsert: + return this.VisitQueryInsert((QueryInsert)node, changes as QueryInsert, deletions as QueryInsert, insertions as QueryInsert); + case NodeType.QueryIntersection: + return this.VisitQueryIntersection((QueryIntersection)node, changes as QueryIntersection, deletions as QueryIntersection, insertions as QueryIntersection); + case NodeType.QueryIterator: + return this.VisitQueryIterator((QueryIterator)node, changes as QueryIterator, deletions as QueryIterator, insertions as QueryIterator); + case NodeType.QueryJoin: + return this.VisitQueryJoin((QueryJoin)node, changes as QueryJoin, deletions as QueryJoin, insertions as QueryJoin); + case NodeType.QueryLimit: + return this.VisitQueryLimit((QueryLimit)node, changes as QueryLimit, deletions as QueryLimit, insertions as QueryLimit); + case NodeType.QueryOrderBy: + return this.VisitQueryOrderBy((QueryOrderBy)node, changes as QueryOrderBy, deletions as QueryOrderBy, insertions as QueryOrderBy); + case NodeType.QueryOrderItem: + return this.VisitQueryOrderItem((QueryOrderItem)node, changes as QueryOrderItem, deletions as QueryOrderItem, insertions as QueryOrderItem); + case NodeType.QueryPosition: + return this.VisitQueryPosition((QueryPosition)node, changes as QueryPosition, deletions as QueryPosition, insertions as QueryPosition); + case NodeType.QueryProject: + return this.VisitQueryProject((QueryProject)node, changes as QueryProject, deletions as QueryProject, insertions as QueryProject); + case NodeType.QueryQuantifiedExpression: + return this.VisitQueryQuantifiedExpression((QueryQuantifiedExpression)node, changes as QueryQuantifiedExpression, deletions as QueryQuantifiedExpression, insertions as QueryQuantifiedExpression); + case NodeType.QueryRollback: + return this.VisitQueryRollback((QueryRollback)node, changes as QueryRollback, deletions as QueryRollback, insertions as QueryRollback); + case NodeType.QuerySelect: + return this.VisitQuerySelect((QuerySelect)node, changes as QuerySelect, deletions as QuerySelect, insertions as QuerySelect); + case NodeType.QuerySingleton: + return this.VisitQuerySingleton((QuerySingleton)node, changes as QuerySingleton, deletions as QuerySingleton, insertions as QuerySingleton); + case NodeType.QueryTransact: + return this.VisitQueryTransact((QueryTransact)node, changes as QueryTransact, deletions as QueryTransact, insertions as QueryTransact); + case NodeType.QueryTypeFilter: + return this.VisitQueryTypeFilter((QueryTypeFilter)node, changes as QueryTypeFilter, deletions as QueryTypeFilter, insertions as QueryTypeFilter); + case NodeType.QueryUnion: + return this.VisitQueryUnion((QueryUnion)node, changes as QueryUnion, deletions as QueryUnion, insertions as QueryUnion); + case NodeType.QueryUpdate: + return this.VisitQueryUpdate((QueryUpdate)node, changes as QueryUpdate, deletions as QueryUpdate, insertions as QueryUpdate); + case NodeType.QueryYielder: + return this.VisitQueryYielder((QueryYielder)node, changes as QueryYielder, deletions as QueryYielder, insertions as QueryYielder); +#endif + default: + return this.VisitUnknownNodeType(node, changes, deletions, insertions); + } + } + public virtual void UpdateSourceContext(Node node, Node changes) + { + } + public virtual Expression VisitAddressDereference(AddressDereference addr, AddressDereference changes, AddressDereference deletions, AddressDereference insertions) + { + this.UpdateSourceContext(addr, changes); + if (addr == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + addr.Address = this.VisitExpression(addr.Address, changes.Address, deletions.Address, insertions.Address); + addr.Alignment = changes.Alignment; + addr.Volatile = changes.Volatile; + } + } + else if (deletions != null) + return null; + return addr; + } + public virtual AliasDefinition VisitAliasDefinition(AliasDefinition aliasDefinition, AliasDefinition changes, AliasDefinition deletions, AliasDefinition insertions) + { + this.UpdateSourceContext(aliasDefinition, changes); + if (aliasDefinition == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + aliasDefinition.Alias = changes.Alias; + aliasDefinition.AliasedType = this.VisitTypeReference(aliasDefinition.AliasedType, changes.AliasedType, deletions.AliasedType, insertions.AliasedType); + aliasDefinition.AliasedExpression = changes.AliasedExpression; + aliasDefinition.AliasedUri = changes.AliasedUri; + } + } + else if (deletions != null) + return null; + return aliasDefinition; + } + public virtual AliasDefinitionList VisitAliasDefinitionList(AliasDefinitionList aliasDefinitions, AliasDefinitionList changes, AliasDefinitionList deletions, AliasDefinitionList insertions) + { + if (changes == null || deletions == null || insertions == null) return aliasDefinitions; + int n = aliasDefinitions == null ? 0 : aliasDefinitions.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (aliasDefinitions != null) + for (int i = 0; i < n; i++) + aliasDefinitions[i] = this.VisitAliasDefinition(aliasDefinitions[i], changes[i], deletions[i], insertions[i]); + AliasDefinitionList result = new AliasDefinitionList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Expression VisitAnonymousNestedFunction(AnonymousNestedFunction func, AnonymousNestedFunction changes, AnonymousNestedFunction deletions, AnonymousNestedFunction insertions) + { + this.UpdateSourceContext(func, changes); + if (func == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + func.Body = this.VisitBlock(func.Body, changes.Body, deletions.Body, insertions.Body); + func.Parameters = this.VisitParameterList(func.Parameters, changes.Parameters, deletions.Parameters, insertions.Parameters); + } + } + else if (deletions != null) + return null; + return func; + } + public virtual Expression VisitApplyToAll(ApplyToAll applyToAll, ApplyToAll changes, ApplyToAll deletions, ApplyToAll insertions) + { + this.UpdateSourceContext(applyToAll, changes); + if (applyToAll == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + applyToAll.Operand1 = this.VisitExpression(applyToAll.Operand1, changes.Operand1, deletions.Operand1, insertions.Operand1); + applyToAll.Operand2 = this.VisitExpression(applyToAll.Operand2, changes.Operand2, deletions.Operand2, insertions.Operand2); + } + } + else if (deletions != null) + return null; + return applyToAll; + } + public virtual AssemblyNode VisitAssembly(AssemblyNode assembly, AssemblyNode changes, AssemblyNode deletions, AssemblyNode insertions) + { + this.UpdateSourceContext(assembly, changes); + if (assembly == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + assembly.AssemblyReferences = this.VisitAssemblyReferenceList(assembly.AssemblyReferences, changes.AssemblyReferences, deletions.AssemblyReferences, insertions.AssemblyReferences); + assembly.Attributes = this.VisitAttributeList(assembly.Attributes, changes.Attributes, deletions.Attributes, insertions.Attributes); + assembly.Culture = changes.Culture; + assembly.ExportedTypes = this.VisitTypeReferenceList(assembly.ExportedTypes, changes.ExportedTypes, deletions.ExportedTypes, insertions.ExportedTypes); + assembly.Flags = changes.Flags; + assembly.Kind = changes.Kind; + assembly.ModuleAttributes = this.VisitAttributeList(assembly.ModuleAttributes, changes.ModuleAttributes, deletions.ModuleAttributes, insertions.ModuleAttributes); + assembly.ModuleReferences = this.VisitModuleReferenceList(assembly.ModuleReferences, changes.ModuleReferences, deletions.ModuleReferences, insertions.ModuleReferences); + assembly.Name = changes.Name; + assembly.SecurityAttributes = this.VisitSecurityAttributeList(assembly.SecurityAttributes, changes.SecurityAttributes, deletions.SecurityAttributes, insertions.SecurityAttributes); + assembly.Types = this.VisitTypeNodeList(assembly.Types, changes.Types, deletions.Types, insertions.Types); + assembly.Version = changes.Version; + } + } + else if (deletions != null) + return null; + return assembly; + } + public virtual AssemblyReference VisitAssemblyReference(AssemblyReference assemblyReference, AssemblyReference changes, AssemblyReference deletions, AssemblyReference insertions) + { + this.UpdateSourceContext(assemblyReference, changes); + if (assemblyReference == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + assemblyReference.Culture = changes.Culture; + assemblyReference.Flags = changes.Flags; + assemblyReference.Name = changes.Name; + assemblyReference.PublicKeyOrToken = changes.PublicKeyOrToken; + assemblyReference.Version = changes.Version; + } + } + else if (deletions != null) + return null; + return assemblyReference; + } + public virtual AssemblyReferenceList VisitAssemblyReferenceList(AssemblyReferenceList assemblyReferences, AssemblyReferenceList changes, AssemblyReferenceList deletions, AssemblyReferenceList insertions) + { + if (changes == null || deletions == null || insertions == null) return assemblyReferences; + int n = assemblyReferences == null ? 0 : assemblyReferences.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (assemblyReferences != null) + for (int i = 0; i < n; i++) + assemblyReferences[i] = this.VisitAssemblyReference(assemblyReferences[i], changes[i], deletions[i], insertions[i]); + AssemblyReferenceList result = new AssemblyReferenceList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Statement VisitAssertion(Assertion assertion, Assertion changes, Assertion deletions, Assertion insertions) + { + this.UpdateSourceContext(assertion, changes); + if (assertion == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + assertion.Condition = this.VisitExpression(assertion.Condition, changes.Condition, deletions.Condition, insertions.Condition); + } + } + else if (deletions != null) + return null; + return assertion; + } + public virtual Expression VisitAssignmentExpression(AssignmentExpression assignment, AssignmentExpression changes, AssignmentExpression deletions, AssignmentExpression insertions) + { + this.UpdateSourceContext(assignment, changes); + if (assignment == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + assignment.AssignmentStatement = this.VisitAssignmentStatement(assignment.AssignmentStatement as AssignmentStatement, changes.AssignmentStatement as AssignmentStatement, deletions.AssignmentStatement as AssignmentStatement, insertions.AssignmentStatement as AssignmentStatement); + } + } + else if (deletions != null) + return null; + return assignment; + } + public virtual Statement VisitAssignmentStatement(AssignmentStatement assignment, AssignmentStatement changes, AssignmentStatement deletions, AssignmentStatement insertions) + { + this.UpdateSourceContext(assignment, changes); + if (assignment == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + assignment.Operator = changes.Operator; + assignment.Source = this.VisitExpression(assignment.Source, changes.Source, deletions.Source, insertions.Source); + assignment.Target = this.VisitExpression(assignment.Target, changes.Target, deletions.Target, insertions.Target); + } + } + else if (deletions != null) + return null; + return assignment; + } + public virtual AttributeNode VisitAttributeNode(AttributeNode attribute, AttributeNode changes, AttributeNode deletions, AttributeNode insertions) + { + this.UpdateSourceContext(attribute, changes); + if (attribute == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + attribute.AllowMultiple = changes.AllowMultiple; + attribute.Constructor = this.VisitExpression(attribute.Constructor, changes.Constructor, deletions.Constructor, insertions.Constructor); + attribute.Expressions = this.VisitExpressionList(attribute.Expressions, changes.Expressions, deletions.Expressions, insertions.Expressions); + attribute.Target = changes.Target; + } + } + else if (deletions != null) + return null; + return attribute; + } + public virtual AttributeList VisitAttributeList(AttributeList attributes, AttributeList changes, AttributeList deletions, AttributeList insertions) + { + if (changes == null || deletions == null || insertions == null) return attributes; + int n = attributes == null ? 0 : attributes.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (attributes != null) + for (int i = 0; i < n; i++) + attributes[i] = this.VisitAttributeNode(attributes[i], changes[i], deletions[i], insertions[i]); + AttributeList result = new AttributeList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Expression VisitBase(Base Base, Base changes, Base deletions, Base insertions) + { + this.UpdateSourceContext(Base, changes); + if (Base == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Base; + } + public virtual Expression VisitBinaryExpression(BinaryExpression binaryExpression, BinaryExpression changes, BinaryExpression deletions, BinaryExpression insertions) + { + this.UpdateSourceContext(binaryExpression, changes); + if (binaryExpression == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + binaryExpression.NodeType = changes.NodeType; + binaryExpression.Operand1 = this.VisitExpression(binaryExpression.Operand1, changes.Operand1, deletions.Operand1, insertions.Operand1); + binaryExpression.Operand2 = this.VisitExpression(binaryExpression.Operand2, changes.Operand2, deletions.Operand2, insertions.Operand2); + } + } + else if (deletions != null) + return null; + return binaryExpression; + } + public virtual Block VisitBlock(Block block, Block changes, Block deletions, Block insertions) + { + this.UpdateSourceContext(block, changes); + if (block == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + block.Checked = changes.Checked; + block.Statements = this.VisitStatementList(block.Statements, changes.Statements, deletions.Statements, insertions.Statements); + block.SuppressCheck = changes.SuppressCheck; + } + } + else if (deletions != null) + return null; + return block; + } + public virtual Expression VisitBlockExpression(BlockExpression blockExpression, BlockExpression changes, BlockExpression deletions, BlockExpression insertions) + { + this.UpdateSourceContext(blockExpression, changes); + if (blockExpression == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + blockExpression.Block = this.VisitBlock(blockExpression.Block, changes.Block, deletions.Block, insertions.Block); + } + } + else if (deletions != null) + return null; + return blockExpression; + } + public virtual BlockList VisitBlockList(BlockList blockList, BlockList changes, BlockList deletions, BlockList insertions) + { + if (changes == null || deletions == null || insertions == null) return blockList; + int n = blockList == null ? 0 : blockList.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (blockList != null) + for (int i = 0; i < n; i++) + blockList[i] = this.VisitBlock(blockList[i], changes[i], deletions[i], insertions[i]); + BlockList result = new BlockList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Catch VisitCatch(Catch Catch, Catch changes, Catch deletions, Catch insertions) + { + this.UpdateSourceContext(Catch, changes); + if (Catch == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + Catch.Block = this.VisitBlock(Catch.Block, changes.Block, deletions.Block, insertions.Block); + Catch.Type = this.VisitTypeReference(Catch.Type, changes.Type); + Catch.Variable = this.VisitExpression(Catch.Variable, changes.Variable, deletions.Variable, insertions.Variable); + } + } + else if (deletions != null) + return null; + return Catch; + } + public virtual CatchList VisitCatchList(CatchList catchers, CatchList changes, CatchList deletions, CatchList insertions) + { + if (changes == null || deletions == null || insertions == null) return catchers; + int n = catchers == null ? 0 : catchers.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (catchers != null) + for (int i = 0; i < n; i++) + catchers[i] = this.VisitCatch(catchers[i], changes[i], deletions[i], insertions[i]); + CatchList result = new CatchList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Class VisitClass(Class Class, Class changes, Class deletions, Class insertions) + { + TypeNode result = this.VisitTypeNode(Class, changes, deletions, insertions); + Debug.Assert(result is Class); + return result as Class; + } + public virtual Expression VisitCoerceTuple(CoerceTuple coerceTuple, CoerceTuple changes, CoerceTuple deletions, CoerceTuple insertions) + { + this.UpdateSourceContext(coerceTuple, changes); + if (coerceTuple == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + coerceTuple.Fields = this.VisitFieldList(coerceTuple.Fields, changes.Fields, deletions.Fields, insertions.Fields); + coerceTuple.OriginalTuple = this.VisitExpression(coerceTuple.OriginalTuple, changes.OriginalTuple, deletions.OriginalTuple, insertions.OriginalTuple); + } + } + else if (deletions != null) + return null; + return coerceTuple; + } + public virtual CollectionEnumerator VisitCollectionEnumerator(CollectionEnumerator ce, CollectionEnumerator changes, CollectionEnumerator deletions, CollectionEnumerator insertions) + { + this.UpdateSourceContext(ce, changes); + if (ce == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + ce.Collection = this.VisitExpression(ce.Collection, changes.Collection, deletions.Collection, insertions.Collection); + //REVIEW: update method bindings? + } + } + else if (deletions != null) + return null; + return ce; + } + public virtual Compilation VisitCompilation(Compilation compilation, Compilation changes, Compilation deletions, Compilation insertions) + { + this.UpdateSourceContext(compilation, changes); + if (compilation == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + compilation.CompilerParameters = changes.CompilerParameters; + compilation.CompilationUnits = this.VisitCompilationUnitList(compilation.CompilationUnits, changes.CompilationUnits, deletions.CompilationUnits, insertions.CompilationUnits); + } + } + else if (deletions != null) + return null; + return compilation; + } + public virtual CompilationUnit VisitCompilationUnit(CompilationUnit cUnit, CompilationUnit changes, CompilationUnit deletions, CompilationUnit insertions) + { + this.UpdateSourceContext(cUnit, changes); + if (cUnit == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + cUnit.Nodes = this.VisitNodeList(cUnit.Nodes, changes.Nodes, deletions.Nodes, insertions.Nodes); + cUnit.PreprocessorDefinedSymbols = changes.PreprocessorDefinedSymbols; + } + } + else if (deletions != null) + return null; + return cUnit; + } + public virtual CompilationUnitList VisitCompilationUnitList(CompilationUnitList compUnits, CompilationUnitList changes, CompilationUnitList deletions, CompilationUnitList insertions) + { + if (changes == null || deletions == null || insertions == null) return compUnits; + int n = compUnits == null ? 0 : compUnits.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (compUnits != null) + for (int i = 0; i < n; i++) + compUnits[i] = this.VisitCompilationUnit(compUnits[i], changes[i], deletions[i], insertions[i]); + CompilationUnitList result = new CompilationUnitList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual CompilationUnitSnippet VisitCompilationUnitSnippet(CompilationUnitSnippet snippet, CompilationUnitSnippet changes, CompilationUnitSnippet deletions, CompilationUnitSnippet insertions) + { + CompilationUnit cu = this.VisitCompilationUnit(snippet, changes, deletions, insertions); + Debug.Assert(cu is CompilationUnitSnippet); + return cu as CompilationUnitSnippet; + } + public virtual Node VisitComposition(Composition comp, Composition changes, Composition deletions, Composition insertions) + { + this.UpdateSourceContext(comp, changes); + if (comp == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + comp.Expression = this.VisitExpression(comp.Expression, changes.Expression, deletions.Expression, insertions.Expression); + } + } + else if (deletions != null) + return null; + return comp; + } + public virtual Expression VisitConstruct(Construct cons, Construct changes, Construct deletions, Construct insertions) + { + this.UpdateSourceContext(cons, changes); + if (cons == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + cons.Constructor = this.VisitExpression(cons.Constructor, changes.Constructor, deletions.Constructor, insertions.Constructor); + cons.Operands = this.VisitExpressionList(cons.Operands, changes.Operands, deletions.Operands, insertions.Operands); + cons.Owner = this.VisitExpression(cons.Owner, changes.Owner, deletions.Owner, insertions.Owner); + } + } + else if (deletions != null) + return null; + return cons; + } + public virtual Expression VisitConstructArray(ConstructArray consArr, ConstructArray changes, ConstructArray deletions, ConstructArray insertions) + { + this.UpdateSourceContext(consArr, changes); + if (consArr == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + consArr.ElementType = this.VisitTypeReference(consArr.ElementType, changes.ElementType); + consArr.Initializers = this.VisitExpressionList(consArr.Initializers, changes.Initializers, deletions.Initializers, insertions.Initializers); + consArr.Operands = this.VisitExpressionList(consArr.Operands, changes.Operands, deletions.Operands, insertions.Operands); + consArr.Rank = changes.Rank; + consArr.Owner = this.VisitExpression(consArr.Owner, changes.Owner, deletions.Owner, insertions.Owner); + } + } + else if (deletions != null) + return null; + return consArr; + } + public virtual Expression VisitConstructDelegate(ConstructDelegate consDelegate, ConstructDelegate changes, ConstructDelegate deletions, ConstructDelegate insertions) + { + this.UpdateSourceContext(consDelegate, changes); + if (consDelegate == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + consDelegate.DelegateType = this.VisitTypeReference(consDelegate.DelegateType, changes.DelegateType); + consDelegate.MethodName = changes.MethodName; + consDelegate.TargetObject = this.VisitExpression(consDelegate.TargetObject, changes.TargetObject, deletions.TargetObject, insertions.TargetObject); + } + } + else if (deletions != null) + return null; + return consDelegate; + } + public virtual Expression VisitConstructFlexArray(ConstructFlexArray consArr, ConstructFlexArray changes, ConstructFlexArray deletions, ConstructFlexArray insertions) + { + this.UpdateSourceContext(consArr, changes); + if (consArr == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + consArr.ElementType = this.VisitTypeReference(consArr.ElementType, changes.ElementType); + consArr.Initializers = this.VisitExpressionList(consArr.Initializers, changes.Initializers, deletions.Initializers, insertions.Initializers); + consArr.Operands = this.VisitExpressionList(consArr.Operands, changes.Operands, deletions.Operands, insertions.Operands); + } + } + else if (deletions != null) + return null; + return consArr; + } + public virtual Expression VisitConstructIterator(ConstructIterator consIterator, ConstructIterator changes, ConstructIterator deletions, ConstructIterator insertions) + { + this.UpdateSourceContext(consIterator, changes); + if (consIterator == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + consIterator.Body = this.VisitBlock(consIterator.Body, changes.Body, deletions.Body, insertions.Body); + consIterator.ElementType = this.VisitTypeReference(consIterator.ElementType, changes.ElementType); + consIterator.State = this.VisitClass(consIterator.State, changes.State, deletions.State, insertions.State); + } + } + else if (deletions != null) + return null; + return consIterator; + } + public virtual Expression VisitConstructTuple(ConstructTuple consTuple, ConstructTuple changes, ConstructTuple deletions, ConstructTuple insertions) + { + this.UpdateSourceContext(consTuple, changes); + if (consTuple == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + consTuple.Fields = this.VisitFieldList(consTuple.Fields, changes.Fields, deletions.Fields, insertions.Fields); + } + } + else if (deletions != null) + return null; + return consTuple; + } +#if ExtendedRuntime + public virtual TypeNode VisitConstrainedType(ConstrainedType cType, ConstrainedType changes, ConstrainedType deletions, ConstrainedType insertions){ + this.UpdateSourceContext(cType, changes); + if (cType == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + cType.Constraint = this.VisitExpression(cType.Constraint, changes.Constraint, deletions.Constraint, insertions.Constraint); + cType.UnderlyingType = this.VisitTypeReference(cType.UnderlyingType, changes.UnderlyingType); + } + }else if (deletions != null) + return null; + return cType; + } +#endif + public virtual Statement VisitContinue(Continue Continue, Continue changes, Continue deletions, Continue insertions) + { + this.UpdateSourceContext(Continue, changes); + if (Continue == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + Continue.Level = changes.Level; + } + } + else if (deletions != null) + return null; + return Continue; + } + public virtual Expression VisitCurrentClosure(CurrentClosure currentClosure, CurrentClosure changes, CurrentClosure deletions, CurrentClosure insertions) + { + this.UpdateSourceContext(currentClosure, changes); + if (currentClosure == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return currentClosure; + } + public virtual DelegateNode VisitDelegateNode(DelegateNode delegateNode, DelegateNode changes, DelegateNode deletions, DelegateNode insertions) + { + this.UpdateSourceContext(delegateNode, changes); + if (delegateNode == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + delegateNode.Attributes = this.VisitAttributeList(delegateNode.Attributes, changes.Attributes, deletions.Attributes, insertions.Attributes); +#if !NoXml + delegateNode.Documentation = changes.Documentation; +#endif + delegateNode.Flags = changes.Flags; + delegateNode.Parameters = this.VisitParameterList(delegateNode.Parameters, changes.Parameters, deletions.Parameters, insertions.Parameters); + delegateNode.ReturnType = this.VisitTypeReference(delegateNode.ReturnType, changes.ReturnType); + delegateNode.SecurityAttributes = this.VisitSecurityAttributeList(delegateNode.SecurityAttributes, changes.SecurityAttributes, deletions.SecurityAttributes, insertions.SecurityAttributes); + delegateNode.TemplateParameters = this.VisitTypeReferenceList(delegateNode.TemplateParameters, changes.TemplateParameters, deletions.TemplateParameters, insertions.TemplateParameters); + } + } + else if (deletions != null) + return null; + return delegateNode; + } + public virtual Statement VisitDoWhile(DoWhile doWhile, DoWhile changes, DoWhile deletions, DoWhile insertions) + { + this.UpdateSourceContext(doWhile, changes); + if (doWhile == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + doWhile.Body = this.VisitBlock(doWhile.Body, changes.Body, deletions.Body, insertions.Body); + doWhile.Condition = this.VisitExpression(doWhile.Condition, changes.Condition, deletions.Condition, insertions.Condition); + } + } + else if (deletions != null) + return null; + return doWhile; + } + public virtual Statement VisitEndFilter(EndFilter endFilter, EndFilter changes, EndFilter deletions, EndFilter insertions) + { + this.UpdateSourceContext(endFilter, changes); + if (endFilter == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + endFilter.Value = this.VisitExpression(endFilter.Value, changes.Value, deletions.Value, insertions.Value); + } + } + else if (deletions != null) + return null; + return endFilter; + } + public virtual Statement VisitEndFinally(EndFinally endFinally, EndFinally changes, EndFinally deletions, EndFinally insertions) + { + this.UpdateSourceContext(endFinally, changes); + if (endFinally == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return endFinally; + } + public virtual EnumNode VisitEnumNode(EnumNode enumNode, EnumNode changes, EnumNode deletions, EnumNode insertions) + { + if (enumNode == null) return changes; + TypeNode result = this.VisitTypeNode(enumNode, changes, deletions, insertions); + Debug.Assert(result is EnumNode); + if (result == enumNode) + { + Debug.Assert(changes != null); + if (changes != null) + enumNode.UnderlyingType = this.VisitTypeReference(enumNode.UnderlyingType, changes.UnderlyingType); + return enumNode; + } + return result as EnumNode; + } + public virtual Event VisitEvent(Event evnt, Event changes, Event deletions, Event insertions) + { + this.UpdateSourceContext(evnt, changes); + if (evnt == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + evnt.Attributes = this.VisitAttributeList(evnt.Attributes, changes.Attributes, deletions.Attributes, insertions.Attributes); +#if !NoXml + evnt.Documentation = changes.Documentation; +#endif + evnt.Flags = changes.Flags; + evnt.HandlerAdder = this.VisitMethodReference(evnt.HandlerAdder, changes.HandlerAdder); + evnt.HandlerCaller = this.VisitMethodReference(evnt.HandlerCaller, changes.HandlerCaller); + evnt.HandlerFlags = changes.HandlerFlags; + evnt.HandlerRemover = this.VisitMethodReference(evnt.HandlerRemover, changes.HandlerRemover); + evnt.HandlerType = this.VisitTypeReference(evnt.HandlerType, changes.HandlerType); + evnt.InitialHandler = this.VisitExpression(evnt.InitialHandler, changes.InitialHandler, deletions.InitialHandler, insertions.InitialHandler); + evnt.Name = changes.Name; + evnt.OtherMethods = this.VisitMethodReferenceList(evnt.OtherMethods, changes.OtherMethods); + evnt.OverridesBaseClassMember = changes.OverridesBaseClassMember; + } + } + else if (deletions != null) + return null; + return evnt; + } + public virtual Statement VisitExit(Exit exit, Exit changes, Exit deletions, Exit insertions) + { + this.UpdateSourceContext(exit, changes); + if (exit == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + exit.Level = changes.Level; + } + } + else if (deletions != null) + return null; + return exit; + } + public virtual Expression VisitExpression(Expression expression, Expression changes, Expression deletions, Expression insertions) + { + return this.Visit(expression, changes, deletions, insertions) as Expression; + } + public virtual ExpressionList VisitExpressionList(ExpressionList expressions, ExpressionList changes, ExpressionList deletions, ExpressionList insertions) + { + if (changes == null || deletions == null || insertions == null) return expressions; + int n = expressions == null ? 0 : expressions.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (expressions != null) + for (int i = 0; i < n; i++) + expressions[i] = this.VisitExpression(expressions[i], changes[i], deletions[i], insertions[i]); + ExpressionList result = new ExpressionList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Expression VisitExpressionSnippet(ExpressionSnippet snippet, ExpressionSnippet changes, ExpressionSnippet deletions, ExpressionSnippet insertions) + { + this.UpdateSourceContext(snippet, changes); + if (snippet == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return snippet; + } + public virtual Statement VisitExpressionStatement(ExpressionStatement statement, ExpressionStatement changes, ExpressionStatement deletions, ExpressionStatement insertions) + { + this.UpdateSourceContext(statement, changes); + if (statement == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + statement.Expression = this.VisitExpression(statement.Expression, changes.Expression, deletions.Expression, insertions.Expression); + } + } + else if (deletions != null) + return null; + return statement; + } + public virtual FaultHandler VisitFaultHandler(FaultHandler faultHandler, FaultHandler changes, FaultHandler deletions, FaultHandler insertions) + { + this.UpdateSourceContext(faultHandler, changes); + if (faultHandler == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + faultHandler.Block = this.VisitBlock(faultHandler.Block, changes.Block, deletions.Block, insertions.Block); + } + } + else if (deletions != null) + return null; + return faultHandler; + } + public virtual FaultHandlerList VisitFaultHandlerList(FaultHandlerList faultHandlers, FaultHandlerList changes, FaultHandlerList deletions, FaultHandlerList insertions) + { + if (changes == null || deletions == null || insertions == null) return faultHandlers; + int n = faultHandlers == null ? 0 : faultHandlers.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (faultHandlers != null) + for (int i = 0; i < n; i++) + faultHandlers[i] = this.VisitFaultHandler(faultHandlers[i], changes[i], deletions[i], insertions[i]); + FaultHandlerList result = new FaultHandlerList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Field VisitField(Field field, Field changes, Field deletions, Field insertions) + { + this.UpdateSourceContext(field, changes); + if (field == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + field.Attributes = this.VisitAttributeList(field.Attributes, changes.Attributes, deletions.Attributes, insertions.Attributes); + field.DefaultValue = this.VisitLiteral(field.DefaultValue, changes.DefaultValue, deletions.DefaultValue, insertions.DefaultValue); +#if !NoXml + field.Documentation = changes.Documentation; +#endif + field.Flags = changes.Flags; + field.HidesBaseClassMember = changes.HidesBaseClassMember; + field.ImplementedInterfaces = this.VisitInterfaceReferenceList(field.ImplementedInterfaces, changes.ImplementedInterfaces, deletions.ImplementedInterfaces, insertions.ImplementedInterfaces); + field.InitialData = changes.InitialData; + field.Initializer = changes.Initializer; + field.MarshallingInformation = changes.MarshallingInformation; + field.Name = changes.Name; + field.Offset = changes.Offset; + field.OverridesBaseClassMember = changes.OverridesBaseClassMember; + field.Section = changes.Section; + field.Type = this.VisitTypeReference(field.Type, changes.Type); + } + } + else if (deletions != null) + return null; + return field; + } + public virtual Block VisitFieldInitializerBlock(FieldInitializerBlock block, FieldInitializerBlock changes, FieldInitializerBlock deletions, FieldInitializerBlock insertions) + { + this.UpdateSourceContext(block, changes); + if (block == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + block.IsStatic = changes.IsStatic; + } + } + else if (deletions != null) + return null; + return block; + } + public virtual FieldList VisitFieldList(FieldList fields, FieldList changes, FieldList deletions, FieldList insertions) + { + if (changes == null || deletions == null || insertions == null) return fields; + int n = fields == null ? 0 : fields.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (fields != null) + for (int i = 0; i < n; i++) + fields[i] = this.VisitField(fields[i], changes[i], deletions[i], insertions[i]); + FieldList result = new FieldList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Statement VisitFilter(Filter filter, Filter changes, Filter deletions, Filter insertions) + { + this.UpdateSourceContext(filter, changes); + if (filter == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + filter.Block = this.VisitBlock(filter.Block, changes.Block, deletions.Block, insertions.Block); + } + } + else if (deletions != null) + return null; + return filter; + } + public virtual FilterList VisitFilterList(FilterList filters, FilterList changes, FilterList deletions, FilterList insertions) + { + if (filters == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return filters; + } + public virtual Statement VisitFinally(Finally Finally, Finally changes, Finally deletions, Finally insertions) + { + this.UpdateSourceContext(Finally, changes); + if (Finally == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Finally; + } + public virtual Statement VisitFixed(Fixed Fixed, Fixed changes, Fixed deletions, Fixed insertions) + { + this.UpdateSourceContext(Fixed, changes); + if (Fixed == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Fixed; + } + public virtual Statement VisitFor(For For, For changes, For deletions, For insertions) + { + this.UpdateSourceContext(For, changes); + if (For == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return For; + } + public virtual Statement VisitForEach(ForEach forEach, ForEach changes, ForEach deletions, ForEach insertions) + { + this.UpdateSourceContext(forEach, changes); + if (forEach == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return forEach; + } + public virtual Statement VisitFunctionDeclaration(FunctionDeclaration functionDeclaration, FunctionDeclaration changes, FunctionDeclaration deletions, FunctionDeclaration insertions) + { + this.UpdateSourceContext(functionDeclaration, changes); + if (functionDeclaration == null) return changes; + return functionDeclaration; + } + public virtual Expression VisitTemplateInstance(TemplateInstance instance, TemplateInstance changes, TemplateInstance deletions, TemplateInstance insertions) + { + this.UpdateSourceContext(instance, changes); + if (instance == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return instance; + } + public virtual Expression VisitStackAlloc(StackAlloc alloc, StackAlloc changes, StackAlloc deletions, StackAlloc insertions) + { + this.UpdateSourceContext(alloc, changes); + if (alloc == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return alloc; + } + public virtual Statement VisitGoto(Goto Goto, Goto changes, Goto deletions, Goto insertions) + { + this.UpdateSourceContext(Goto, changes); + if (Goto == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Goto; + } + public virtual Statement VisitGotoCase(GotoCase gotoCase, GotoCase changes, GotoCase deletions, GotoCase insertions) + { + this.UpdateSourceContext(gotoCase, changes); + if (gotoCase == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return gotoCase; + } + public virtual Expression VisitIdentifier(Identifier identifier, Identifier changes, Identifier deletions, Identifier insertions) + { + this.UpdateSourceContext(identifier, changes); + if (identifier == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return identifier; + } + public virtual Statement VisitIf(If If, If changes, If deletions, If insertions) + { + this.UpdateSourceContext(If, changes); + if (If == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return If; + } + public virtual Expression VisitImplicitThis(ImplicitThis implicitThis, ImplicitThis changes, ImplicitThis deletions, ImplicitThis insertions) + { + this.UpdateSourceContext(implicitThis, changes); + if (implicitThis == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return implicitThis; + } + public virtual Expression VisitIndexer(Indexer indexer, Indexer changes, Indexer deletions, Indexer insertions) + { + this.UpdateSourceContext(indexer, changes); + if (indexer == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return indexer; + } + public virtual Interface VisitInterface(Interface Interface, Interface changes, Interface deletions, Interface insertions) + { + return (Interface)this.VisitTypeNode(Interface, changes, deletions, insertions); + } + public virtual InterfaceList VisitInterfaceReferenceList(InterfaceList interfaces, InterfaceList changes, InterfaceList deletions, InterfaceList insertions) + { + if (interfaces == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return interfaces; + } + public virtual Interface VisitInterfaceReference(Interface Interface, Interface changes) + { + return (Interface)this.VisitTypeReference(Interface, changes); + } + public virtual InstanceInitializer VisitInstanceInitializer(InstanceInitializer cons, InstanceInitializer changes, InstanceInitializer deletions, InstanceInitializer insertions) + { + return (InstanceInitializer)this.VisitMethod(cons, changes, deletions, insertions); + } + public virtual Statement VisitLabeledStatement(LabeledStatement lStatement, LabeledStatement changes, LabeledStatement deletions, LabeledStatement insertions) + { + this.UpdateSourceContext(lStatement, changes); + if (lStatement == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return lStatement; + } + public virtual Literal VisitLiteral(Literal literal, Literal changes, Literal deletions, Literal insertions) + { + this.UpdateSourceContext(literal, changes); + if (literal == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return literal; + } + public virtual Expression VisitLocal(Local local, Local changes, Local deletions, Local insertions) + { + this.UpdateSourceContext(local, changes); + if (local == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return local; + } + public virtual LocalDeclaration VisitLocalDeclaration(LocalDeclaration localDeclaration, LocalDeclaration changes, LocalDeclaration deletions, LocalDeclaration insertions) + { + this.UpdateSourceContext(localDeclaration, changes); + if (localDeclaration == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return localDeclaration; + } + public virtual LocalDeclarationList VisitLocalDeclarationList(LocalDeclarationList localDeclarations, LocalDeclarationList changes, LocalDeclarationList deletions, LocalDeclarationList insertions) + { + if (localDeclarations == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return localDeclarations; + } + public virtual Statement VisitLocalDeclarationsStatement(LocalDeclarationsStatement localDeclarations, LocalDeclarationsStatement changes, LocalDeclarationsStatement deletions, LocalDeclarationsStatement insertions) + { + this.UpdateSourceContext(localDeclarations, changes); + if (localDeclarations == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return localDeclarations; + } + public virtual Statement VisitLock(Lock Lock, Lock changes, Lock deletions, Lock insertions) + { + this.UpdateSourceContext(Lock, changes); + if (Lock == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Lock; + } + public virtual Expression VisitLRExpression(LRExpression expr, LRExpression changes, LRExpression deletions, LRExpression insertions) + { + this.UpdateSourceContext(expr, changes); + if (expr == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return expr; + } + public virtual Expression VisitMemberBinding(MemberBinding memberBinding, MemberBinding changes, MemberBinding deletions, MemberBinding insertions) + { + this.UpdateSourceContext(memberBinding, changes); + if (memberBinding == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return memberBinding; + } + public virtual MemberList VisitMemberList(MemberList members, MemberList changes, MemberList deletions, MemberList insertions) + { + if (members == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return members; + } + public virtual Method VisitMethod(Method method, Method changes, Method deletions, Method insertions) + { + this.UpdateSourceContext(method, changes); + if (method == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return method; + } + public virtual Expression VisitMethodCall(MethodCall call, MethodCall changes, MethodCall deletions, MethodCall insertions) + { + this.UpdateSourceContext(call, changes); + if (call == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return call; + } + public virtual Method VisitMethodReference(Method method, Method changes) + { + return method; + } + public virtual MethodList VisitMethodReferenceList(MethodList methodList, MethodList changesList) + { + return methodList; + } + public virtual Module VisitModule(Module module, Module changes, Module deletions, Module insertions) + { + this.UpdateSourceContext(module, changes); + if (module == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return module; + } + public virtual ModuleReference VisitModuleReference(ModuleReference moduleReference, ModuleReference changes, ModuleReference deletions, ModuleReference insertions) + { + this.UpdateSourceContext(moduleReference, changes); + if (moduleReference == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return moduleReference; + } + public virtual ModuleReferenceList VisitModuleReferenceList(ModuleReferenceList moduleReferences, ModuleReferenceList changes, ModuleReferenceList deletions, ModuleReferenceList insertions) + { + return moduleReferences; + } + public virtual Expression VisitNameBinding(NameBinding nameBinding, NameBinding changes, NameBinding deletions, NameBinding insertions) + { + this.UpdateSourceContext(nameBinding, changes); + if (nameBinding == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return nameBinding; + } + public virtual Expression VisitNamedArgument(NamedArgument namedArgument, NamedArgument changes, NamedArgument deletions, NamedArgument insertions) + { + this.UpdateSourceContext(namedArgument, changes); + if (namedArgument == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return namedArgument; + } + public virtual Namespace VisitNamespace(Namespace nspace, Namespace changes, Namespace deletions, Namespace insertions) + { + this.UpdateSourceContext(nspace, changes); + if (nspace == null) return changes; + return nspace; + } + public virtual NamespaceList VisitNamespaceList(NamespaceList namespaces, NamespaceList changes, NamespaceList deletions, NamespaceList insertions) + { + if (namespaces == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return namespaces; + } + public virtual NodeList VisitNodeList(NodeList nodeList, NodeList changes, NodeList deletions, NodeList insertions) + { + if (changes == null || deletions == null || insertions == null) return nodeList; + int n = nodeList == null ? 0 : nodeList.Count; + if (n > changes.Count) { Debug.Assert(false); n = changes.Count; } + if (n > deletions.Count) { Debug.Assert(false); n = deletions.Count; } + if (n > insertions.Count) { Debug.Assert(false); n = insertions.Count; } + if (nodeList != null) + for (int i = 0; i < n; i++) + nodeList[i] = this.Visit(nodeList[i], changes[i], deletions[i], insertions[i]); + NodeList result = new NodeList(insertions.Count - n); + for (int i = n, m = insertions.Count; i < m; i++) + result.Add(insertions[i]); + return result; + } + public virtual Expression VisitParameter(Parameter parameter, Parameter changes, Parameter deletions, Parameter insertions) + { + this.UpdateSourceContext(parameter, changes); + if (parameter == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return parameter; + } + public virtual ParameterList VisitParameterList(ParameterList parameterList, ParameterList changes, ParameterList deletions, ParameterList insertions) + { + if (parameterList == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return parameterList; + } + public virtual Expression VisitPrefixExpression(PrefixExpression pExpr, PrefixExpression changes, PrefixExpression deletions, PrefixExpression insertions) + { + this.UpdateSourceContext(pExpr, changes); + if (pExpr == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return pExpr; + } + public virtual Expression VisitPostfixExpression(PostfixExpression pExpr, PostfixExpression changes, PostfixExpression deletions, PostfixExpression insertions) + { + this.UpdateSourceContext(pExpr, changes); + if (pExpr == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return pExpr; + } + public virtual Property VisitProperty(Property property, Property changes, Property deletions, Property insertions) + { + this.UpdateSourceContext(property, changes); + if (property == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return property; + } + public virtual Expression VisitQualifiedIdentifier(QualifiedIdentifier qualifiedIdentifier, QualifiedIdentifier changes, QualifiedIdentifier deletions, QualifiedIdentifier insertions) + { + this.UpdateSourceContext(qualifiedIdentifier, changes); + if (qualifiedIdentifier == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return qualifiedIdentifier; + } + public virtual Statement VisitRepeat(Repeat repeat, Repeat changes, Repeat deletions, Repeat insertions) + { + this.UpdateSourceContext(repeat, changes); + if (repeat == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return repeat; + } + public virtual Statement VisitResourceUse(ResourceUse resourceUse, ResourceUse changes, ResourceUse deletions, ResourceUse insertions) + { + this.UpdateSourceContext(resourceUse, changes); + if (resourceUse == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return resourceUse; + } + public virtual Statement VisitReturn(Return Return, Return changes, Return deletions, Return insertions) + { + this.UpdateSourceContext(Return, changes); + if (Return == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Return; + } + public virtual SecurityAttribute VisitSecurityAttribute(SecurityAttribute attribute, SecurityAttribute changes, SecurityAttribute deletions, SecurityAttribute insertions) + { + this.UpdateSourceContext(attribute, changes); + if (attribute == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return attribute; + } + public virtual SecurityAttributeList VisitSecurityAttributeList(SecurityAttributeList attributes, SecurityAttributeList changes, SecurityAttributeList deletions, SecurityAttributeList insertions) + { + if (attributes == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return attributes; + } + public virtual Expression VisitSetterValue(SetterValue value, SetterValue changes, SetterValue deletions, SetterValue insertions) + { + this.UpdateSourceContext(value, changes); + if (value == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return value; + } + public virtual StatementList VisitStatementList(StatementList statements, StatementList changes, StatementList deletions, StatementList insertions) + { + if (statements == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return statements; + } + public virtual StatementSnippet VisitStatementSnippet(StatementSnippet snippet, StatementSnippet changes, StatementSnippet deletions, StatementSnippet insertions) + { + this.UpdateSourceContext(snippet, changes); + if (snippet == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return snippet; + } + public virtual StaticInitializer VisitStaticInitializer(StaticInitializer cons, StaticInitializer changes, StaticInitializer deletions, StaticInitializer insertions) + { + return (StaticInitializer)this.VisitMethod(cons, changes, deletions, insertions); + } + public virtual Struct VisitStruct(Struct Struct, Struct changes, Struct deletions, Struct insertions) + { + return (Struct)this.VisitTypeNode(Struct, changes, deletions, insertions); + } + public virtual Statement VisitSwitch(Switch Switch, Switch changes, Switch deletions, Switch insertions) + { + this.UpdateSourceContext(Switch, changes); + if (Switch == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Switch; + } + public virtual SwitchCase VisitSwitchCase(SwitchCase switchCase, SwitchCase changes, SwitchCase deletions, SwitchCase insertions) + { + this.UpdateSourceContext(switchCase, changes); + if (switchCase == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return switchCase; + } + public virtual SwitchCaseList VisitSwitchCaseList(SwitchCaseList switchCases, SwitchCaseList changes, SwitchCaseList deletions, SwitchCaseList insertions) + { + if (switchCases == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return switchCases; + } + public virtual Statement VisitSwitchInstruction(SwitchInstruction switchInstruction, SwitchInstruction changes, SwitchInstruction deletions, SwitchInstruction insertions) + { + this.UpdateSourceContext(switchInstruction, changes); + if (switchInstruction == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return switchInstruction; + } + public virtual Statement VisitTypeswitch(Typeswitch Typeswitch, Typeswitch changes, Typeswitch deletions, Typeswitch insertions) + { + this.UpdateSourceContext(Typeswitch, changes); + if (Typeswitch == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Typeswitch; + } + public virtual TypeswitchCase VisitTypeswitchCase(TypeswitchCase typeswitchCase, TypeswitchCase changes, TypeswitchCase deletions, TypeswitchCase insertions) + { + this.UpdateSourceContext(typeswitchCase, changes); + if (typeswitchCase == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return typeswitchCase; + } + public virtual TypeswitchCaseList VisitTypeswitchCaseList(TypeswitchCaseList typeswitchCases, TypeswitchCaseList changes, TypeswitchCaseList deletions, TypeswitchCaseList insertions) + { + if (typeswitchCases == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return typeswitchCases; + } + public virtual Expression VisitTargetExpression(Expression expression, Expression changes, Expression deletions, Expression insertions) + { + return this.VisitExpression(expression, changes, deletions, insertions); + } + public virtual Expression VisitTernaryExpression(TernaryExpression expression, TernaryExpression changes, TernaryExpression deletions, TernaryExpression insertions) + { + this.UpdateSourceContext(expression, changes); + if (expression == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return expression; + } + public virtual Expression VisitThis(This This, This changes, This deletions, This insertions) + { + this.UpdateSourceContext(This, changes); + if (This == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return This; + } + public virtual Statement VisitThrow(Throw Throw, Throw changes, Throw deletions, Throw insertions) + { + this.UpdateSourceContext(Throw, changes); + if (Throw == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Throw; + } + public virtual Statement VisitTry(Try Try, Try changes, Try deletions, Try insertions) + { + this.UpdateSourceContext(Try, changes); + if (Try == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Try; + } +#if ExtendedRuntime + public virtual TupleType VisitTupleType(TupleType tuple, TupleType changes, TupleType deletions, TupleType insertions){ + return (TupleType)this.VisitTypeNode(tuple, changes, deletions, insertions); + } + public virtual TypeAlias VisitTypeAlias(TypeAlias tAlias, TypeAlias changes, TypeAlias deletions, TypeAlias insertions){ + this.UpdateSourceContext(tAlias, changes); + if (tAlias == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return tAlias; + } + public virtual TypeIntersection VisitTypeIntersection(TypeIntersection typeIntersection, TypeIntersection changes, TypeIntersection deletions, TypeIntersection insertions){ + return (TypeIntersection)this.VisitTypeNode(typeIntersection, changes, deletions, insertions); + } +#endif + public virtual TypeMemberSnippet VisitTypeMemberSnippet(TypeMemberSnippet snippet, TypeMemberSnippet changes, TypeMemberSnippet deletions, TypeMemberSnippet insertions) + { + this.UpdateSourceContext(snippet, changes); + return snippet; + } + public virtual TypeModifier VisitTypeModifier(TypeModifier typeModifier, TypeModifier changes, TypeModifier deletions, TypeModifier insertions) + { + this.UpdateSourceContext(typeModifier, changes); + if (typeModifier == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return typeModifier; + } + public virtual TypeNode VisitTypeNode(TypeNode typeNode, TypeNode changes, TypeNode deletions, TypeNode insertions) + { + this.UpdateSourceContext(typeNode, changes); + if (typeNode == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return typeNode; + } + public virtual TypeNodeList VisitTypeNodeList(TypeNodeList types, TypeNodeList changes, TypeNodeList deletions, TypeNodeList insertions) + { + if (types == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return types; + } + public virtual TypeNode VisitTypeParameter(TypeNode typeParameter, TypeNode changes, TypeNode deletions, TypeNode insertions) + { + this.UpdateSourceContext(typeParameter, changes); + if (typeParameter == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return typeParameter; + } + public virtual TypeNodeList VisitTypeParameterList(TypeNodeList typeParameters, TypeNodeList changes, TypeNodeList deletions, TypeNodeList insertions) + { + if (typeParameters == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return typeParameters; + } + public virtual TypeNode VisitTypeReference(TypeNode type, TypeNode changes) + { + return type; + } + public virtual TypeReference VisitTypeReference(TypeReference type, TypeReference changes, TypeReference deletions, TypeReference insertions) + { + return type; + } + public virtual TypeNodeList VisitTypeReferenceList(TypeNodeList typeReferences, TypeNodeList changes, TypeNodeList deletions, TypeNodeList insertions) + { + if (typeReferences == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return typeReferences; + } +#if ExtendedRuntime + public virtual TypeUnion VisitTypeUnion(TypeUnion typeUnion, TypeUnion changes, TypeUnion deletions, TypeUnion insertions){ + return (TypeUnion)this.VisitTypeNode(typeUnion, changes, deletions, insertions); + } +#endif + public virtual Expression VisitUnaryExpression(UnaryExpression unaryExpression, UnaryExpression changes, UnaryExpression deletions, UnaryExpression insertions) + { + this.UpdateSourceContext(unaryExpression, changes); + if (unaryExpression == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return unaryExpression; + } + public virtual Statement VisitVariableDeclaration(VariableDeclaration variableDeclaration, VariableDeclaration changes, VariableDeclaration deletions, VariableDeclaration insertions) + { + this.UpdateSourceContext(variableDeclaration, changes); + if (variableDeclaration == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return variableDeclaration; + } + public virtual UsedNamespace VisitUsedNamespace(UsedNamespace usedNamespace, UsedNamespace changes, UsedNamespace deletions, UsedNamespace insertions) + { + this.UpdateSourceContext(usedNamespace, changes); + if (usedNamespace == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return usedNamespace; + } + public virtual UsedNamespaceList VisitUsedNamespaceList(UsedNamespaceList usedNspaces, UsedNamespaceList changes, UsedNamespaceList deletions, UsedNamespaceList insertions) + { + if (usedNspaces == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return usedNspaces; + } + public virtual Statement VisitWhile(While While, While changes, While deletions, While insertions) + { + this.UpdateSourceContext(While, changes); + if (While == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return While; + } + public virtual Statement VisitYield(Yield Yield, Yield changes, Yield deletions, Yield insertions) + { + this.UpdateSourceContext(Yield, changes); + if (Yield == null) return changes; + if (changes != null) + { + if (deletions == null || insertions == null) + Debug.Assert(false); + else + { + } + } + else if (deletions != null) + return null; + return Yield; + } +#if ExtendedRuntime + // query nodes + public virtual Node VisitQueryAggregate(QueryAggregate qa, QueryAggregate changes, QueryAggregate deletions, QueryAggregate insertions){ + this.UpdateSourceContext(qa, changes); + if (qa == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return qa; + } + public virtual Node VisitQueryAlias(QueryAlias alias, QueryAlias changes, QueryAlias deletions, QueryAlias insertions){ + this.UpdateSourceContext(alias, changes); + if (alias == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return alias; + } + public virtual Node VisitQueryAxis(QueryAxis axis, QueryAxis changes, QueryAxis deletions, QueryAxis insertions){ + this.UpdateSourceContext(axis, changes); + if (axis == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return axis; + } + public virtual Node VisitQueryCommit(QueryCommit qc, QueryCommit changes, QueryCommit deletions, QueryCommit insertions){ + this.UpdateSourceContext(qc, changes); + if (qc == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return qc; + } + public virtual Node VisitQueryContext(QueryContext context, QueryContext changes, QueryContext deletions, QueryContext insertions){ + this.UpdateSourceContext(context, changes); + if (context == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return context; + } + public virtual Node VisitQueryDelete(QueryDelete delete, QueryDelete changes, QueryDelete deletions, QueryDelete insertions){ + this.UpdateSourceContext(delete, changes); + if (delete == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return delete; + } + public virtual Node VisitQueryDifference(QueryDifference diff, QueryDifference changes, QueryDifference deletions, QueryDifference insertions){ + this.UpdateSourceContext(diff, changes); + if (diff == null) return changes; + return diff; + } + public virtual Node VisitQueryDistinct(QueryDistinct distinct, QueryDistinct changes, QueryDistinct deletions, QueryDistinct insertions){ + this.UpdateSourceContext(distinct, changes); + if (distinct == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return distinct; + } + public virtual Node VisitQueryExists(QueryExists exists, QueryExists changes, QueryExists deletions, QueryExists insertions){ + this.UpdateSourceContext(exists, changes); + if (exists == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return exists; + } + public virtual Node VisitQueryFilter(QueryFilter filter, QueryFilter changes, QueryFilter deletions, QueryFilter insertions){ + this.UpdateSourceContext(filter, changes); + if (filter == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return filter; + } + public virtual Node VisitQueryGroupBy(QueryGroupBy groupby, QueryGroupBy changes, QueryGroupBy deletions, QueryGroupBy insertions){ + this.UpdateSourceContext(groupby, changes); + if (groupby == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return groupby; + } + public virtual Statement VisitQueryGeneratedType(QueryGeneratedType qgt, QueryGeneratedType changes, QueryGeneratedType deletions, QueryGeneratedType insertions){ + this.UpdateSourceContext(qgt, changes); + if (qgt == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return qgt; + } + public virtual Node VisitQueryInsert(QueryInsert insert, QueryInsert changes, QueryInsert deletions, QueryInsert insertions){ + this.UpdateSourceContext(insert, changes); + if (insert == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return insert; + } + public virtual Node VisitQueryIntersection(QueryIntersection intersection, QueryIntersection changes, QueryIntersection deletions, QueryIntersection insertions){ + this.UpdateSourceContext(intersection, changes); + if (intersection == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return intersection; + } + public virtual Node VisitQueryIterator(QueryIterator xiterator, QueryIterator changes, QueryIterator deletions, QueryIterator insertions){ + this.UpdateSourceContext(xiterator, changes); + if (xiterator == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return xiterator; + } + public virtual Node VisitQueryJoin(QueryJoin join, QueryJoin changes, QueryJoin deletions, QueryJoin insertions){ + this.UpdateSourceContext(join, changes); + if (join == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return join; + } + public virtual Node VisitQueryLimit(QueryLimit limit, QueryLimit changes, QueryLimit deletions, QueryLimit insertions){ + this.UpdateSourceContext(limit, changes); + if (limit == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return limit; + } + public virtual Node VisitQueryOrderBy(QueryOrderBy orderby, QueryOrderBy changes, QueryOrderBy deletions, QueryOrderBy insertions){ + this.UpdateSourceContext(orderby, changes); + if (orderby == null) return changes; + return orderby; + } + public virtual Node VisitQueryOrderItem(QueryOrderItem item, QueryOrderItem changes, QueryOrderItem deletions, QueryOrderItem insertions){ + this.UpdateSourceContext(item, changes); + if (item == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return item; + } + public virtual Node VisitQueryPosition(QueryPosition position, QueryPosition changes, QueryPosition deletions, QueryPosition insertions){ + this.UpdateSourceContext(position, changes); + if (position == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return position; + } + public virtual Node VisitQueryProject(QueryProject project, QueryProject changes, QueryProject deletions, QueryProject insertions){ + this.UpdateSourceContext(project, changes); + if (project == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return project; + } + public virtual Node VisitQueryRollback(QueryRollback qr, QueryRollback changes, QueryRollback deletions, QueryRollback insertions){ + this.UpdateSourceContext(qr, changes); + if (qr == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return qr; + } + public virtual Node VisitQueryQuantifier(QueryQuantifier qq, QueryQuantifier changes, QueryQuantifier deletions, QueryQuantifier insertions){ + this.UpdateSourceContext(qq, changes); + if (qq == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return qq; + } + public virtual Node VisitQueryQuantifiedExpression(QueryQuantifiedExpression qqe, QueryQuantifiedExpression changes, QueryQuantifiedExpression deletions, QueryQuantifiedExpression insertions){ + this.UpdateSourceContext(qqe, changes); + if (qqe == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return qqe; + } + public virtual Node VisitQuerySelect(QuerySelect select, QuerySelect changes, QuerySelect deletions, QuerySelect insertions){ + this.UpdateSourceContext(select, changes); + if (select == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return select; + } + public virtual Node VisitQuerySingleton(QuerySingleton singleton, QuerySingleton changes, QuerySingleton deletions, QuerySingleton insertions){ + this.UpdateSourceContext(singleton, changes); + if (singleton == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return singleton; + } + public virtual Node VisitQueryTransact(QueryTransact qt, QueryTransact changes, QueryTransact deletions, QueryTransact insertions){ + this.UpdateSourceContext(qt, changes); + if (qt == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return qt; + } + public virtual Node VisitQueryTypeFilter(QueryTypeFilter filter, QueryTypeFilter changes, QueryTypeFilter deletions, QueryTypeFilter insertions){ + this.UpdateSourceContext(filter, changes); + if (filter == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return filter; + } + public virtual Node VisitQueryUnion(QueryUnion union, QueryUnion changes, QueryUnion deletions, QueryUnion insertions){ + this.UpdateSourceContext(union, changes); + if (union == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return union; + } + public virtual Node VisitQueryUpdate(QueryUpdate update, QueryUpdate changes, QueryUpdate deletions, QueryUpdate insertions){ + this.UpdateSourceContext(update, changes); + if (update == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return update; + } + public virtual Node VisitQueryYielder(QueryYielder yielder, QueryYielder changes, QueryYielder deletions, QueryYielder insertions){ + this.UpdateSourceContext(yielder, changes); + if (yielder == null) return changes; + if (changes != null){ + if (deletions == null || insertions == null) + Debug.Assert(false); + else{ + } + }else if (deletions != null) + return null; + return yielder; + } +#endif + } +} +#endif
\ No newline at end of file |