summaryrefslogtreecommitdiffstats
path: root/tools/Sandcastle/Source/CCI/Updater.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tools/Sandcastle/Source/CCI/Updater.cs')
-rw-r--r--tools/Sandcastle/Source/CCI/Updater.cs2979
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