Files
2026-06-04 11:42:34 +02:00

258 lines
8.0 KiB
C#

using System;
using System.Collections.ObjectModel;
namespace System.Linq.Expressions
{
// Token: 0x02000020 RID: 32
internal abstract class ExpressionVisitor
{
// Token: 0x060001E6 RID: 486 RVA: 0x0000B0B0 File Offset: 0x000092B0
protected virtual void Visit(Expression expression)
{
if (expression == null)
{
return;
}
switch (expression.NodeType)
{
case ExpressionType.Add:
case ExpressionType.AddChecked:
case ExpressionType.And:
case ExpressionType.AndAlso:
case ExpressionType.ArrayIndex:
case ExpressionType.Coalesce:
case ExpressionType.Divide:
case ExpressionType.Equal:
case ExpressionType.ExclusiveOr:
case ExpressionType.GreaterThan:
case ExpressionType.GreaterThanOrEqual:
case ExpressionType.LeftShift:
case ExpressionType.LessThan:
case ExpressionType.LessThanOrEqual:
case ExpressionType.Modulo:
case ExpressionType.Multiply:
case ExpressionType.MultiplyChecked:
case ExpressionType.NotEqual:
case ExpressionType.Or:
case ExpressionType.OrElse:
case ExpressionType.Power:
case ExpressionType.RightShift:
case ExpressionType.Subtract:
case ExpressionType.SubtractChecked:
this.VisitBinary((BinaryExpression)expression);
break;
case ExpressionType.ArrayLength:
case ExpressionType.Convert:
case ExpressionType.ConvertChecked:
case ExpressionType.Negate:
case ExpressionType.UnaryPlus:
case ExpressionType.NegateChecked:
case ExpressionType.Not:
case ExpressionType.Quote:
case ExpressionType.TypeAs:
this.VisitUnary((UnaryExpression)expression);
break;
case ExpressionType.Call:
this.VisitMethodCall((MethodCallExpression)expression);
break;
case ExpressionType.Conditional:
this.VisitConditional((ConditionalExpression)expression);
break;
case ExpressionType.Constant:
this.VisitConstant((ConstantExpression)expression);
break;
case ExpressionType.Invoke:
this.VisitInvocation((InvocationExpression)expression);
break;
case ExpressionType.Lambda:
this.VisitLambda((LambdaExpression)expression);
break;
case ExpressionType.ListInit:
this.VisitListInit((ListInitExpression)expression);
break;
case ExpressionType.MemberAccess:
this.VisitMemberAccess((MemberExpression)expression);
break;
case ExpressionType.MemberInit:
this.VisitMemberInit((MemberInitExpression)expression);
break;
case ExpressionType.New:
this.VisitNew((NewExpression)expression);
break;
case ExpressionType.NewArrayInit:
case ExpressionType.NewArrayBounds:
this.VisitNewArray((NewArrayExpression)expression);
break;
case ExpressionType.Parameter:
this.VisitParameter((ParameterExpression)expression);
break;
case ExpressionType.TypeIs:
this.VisitTypeIs((TypeBinaryExpression)expression);
break;
default:
throw new ArgumentException(string.Format("Unhandled expression type: '{0}'", expression.NodeType));
}
}
// Token: 0x060001E7 RID: 487 RVA: 0x0000B298 File Offset: 0x00009498
protected virtual void VisitBinding(MemberBinding binding)
{
switch (binding.BindingType)
{
case MemberBindingType.Assignment:
this.VisitMemberAssignment((MemberAssignment)binding);
break;
case MemberBindingType.MemberBinding:
this.VisitMemberMemberBinding((MemberMemberBinding)binding);
break;
case MemberBindingType.ListBinding:
this.VisitMemberListBinding((MemberListBinding)binding);
break;
default:
throw new ArgumentException(string.Format("Unhandled binding type '{0}'", binding.BindingType));
}
}
// Token: 0x060001E8 RID: 488 RVA: 0x0000B314 File Offset: 0x00009514
protected virtual void VisitElementInitializer(ElementInit initializer)
{
this.VisitExpressionList(initializer.Arguments);
}
// Token: 0x060001E9 RID: 489 RVA: 0x0000B324 File Offset: 0x00009524
protected virtual void VisitUnary(UnaryExpression unary)
{
this.Visit(unary.Operand);
}
// Token: 0x060001EA RID: 490 RVA: 0x0000B334 File Offset: 0x00009534
protected virtual void VisitBinary(BinaryExpression binary)
{
this.Visit(binary.Left);
this.Visit(binary.Right);
this.Visit(binary.Conversion);
}
// Token: 0x060001EB RID: 491 RVA: 0x0000B368 File Offset: 0x00009568
protected virtual void VisitTypeIs(TypeBinaryExpression type)
{
this.Visit(type.Expression);
}
// Token: 0x060001EC RID: 492 RVA: 0x0000B378 File Offset: 0x00009578
protected virtual void VisitConstant(ConstantExpression constant)
{
}
// Token: 0x060001ED RID: 493 RVA: 0x0000B37C File Offset: 0x0000957C
protected virtual void VisitConditional(ConditionalExpression conditional)
{
this.Visit(conditional.Test);
this.Visit(conditional.IfTrue);
this.Visit(conditional.IfFalse);
}
// Token: 0x060001EE RID: 494 RVA: 0x0000B3B0 File Offset: 0x000095B0
protected virtual void VisitParameter(ParameterExpression parameter)
{
}
// Token: 0x060001EF RID: 495 RVA: 0x0000B3B4 File Offset: 0x000095B4
protected virtual void VisitMemberAccess(MemberExpression member)
{
this.Visit(member.Expression);
}
// Token: 0x060001F0 RID: 496 RVA: 0x0000B3C4 File Offset: 0x000095C4
protected virtual void VisitMethodCall(MethodCallExpression methodCall)
{
this.Visit(methodCall.Object);
this.VisitExpressionList(methodCall.Arguments);
}
// Token: 0x060001F1 RID: 497 RVA: 0x0000B3EC File Offset: 0x000095EC
protected virtual void VisitList<T>(ReadOnlyCollection<T> list, Action<T> visitor)
{
foreach (T t in list)
{
visitor(t);
}
}
// Token: 0x060001F2 RID: 498 RVA: 0x0000B44C File Offset: 0x0000964C
protected virtual void VisitExpressionList(ReadOnlyCollection<Expression> list)
{
this.VisitList<Expression>(list, new Action<Expression>(this.Visit));
}
// Token: 0x060001F3 RID: 499 RVA: 0x0000B464 File Offset: 0x00009664
protected virtual void VisitMemberAssignment(MemberAssignment assignment)
{
this.Visit(assignment.Expression);
}
// Token: 0x060001F4 RID: 500 RVA: 0x0000B474 File Offset: 0x00009674
protected virtual void VisitMemberMemberBinding(MemberMemberBinding binding)
{
this.VisitBindingList(binding.Bindings);
}
// Token: 0x060001F5 RID: 501 RVA: 0x0000B484 File Offset: 0x00009684
protected virtual void VisitMemberListBinding(MemberListBinding binding)
{
this.VisitElementInitializerList(binding.Initializers);
}
// Token: 0x060001F6 RID: 502 RVA: 0x0000B494 File Offset: 0x00009694
protected virtual void VisitBindingList(ReadOnlyCollection<MemberBinding> list)
{
this.VisitList<MemberBinding>(list, new Action<MemberBinding>(this.VisitBinding));
}
// Token: 0x060001F7 RID: 503 RVA: 0x0000B4AC File Offset: 0x000096AC
protected virtual void VisitElementInitializerList(ReadOnlyCollection<ElementInit> list)
{
this.VisitList<ElementInit>(list, new Action<ElementInit>(this.VisitElementInitializer));
}
// Token: 0x060001F8 RID: 504 RVA: 0x0000B4C4 File Offset: 0x000096C4
protected virtual void VisitLambda(LambdaExpression lambda)
{
this.Visit(lambda.Body);
}
// Token: 0x060001F9 RID: 505 RVA: 0x0000B4D4 File Offset: 0x000096D4
protected virtual void VisitNew(NewExpression nex)
{
this.VisitExpressionList(nex.Arguments);
}
// Token: 0x060001FA RID: 506 RVA: 0x0000B4E4 File Offset: 0x000096E4
protected virtual void VisitMemberInit(MemberInitExpression init)
{
this.VisitNew(init.NewExpression);
this.VisitBindingList(init.Bindings);
}
// Token: 0x060001FB RID: 507 RVA: 0x0000B50C File Offset: 0x0000970C
protected virtual void VisitListInit(ListInitExpression init)
{
this.VisitNew(init.NewExpression);
this.VisitElementInitializerList(init.Initializers);
}
// Token: 0x060001FC RID: 508 RVA: 0x0000B534 File Offset: 0x00009734
protected virtual void VisitNewArray(NewArrayExpression newArray)
{
this.VisitExpressionList(newArray.Expressions);
}
// Token: 0x060001FD RID: 509 RVA: 0x0000B544 File Offset: 0x00009744
protected virtual void VisitInvocation(InvocationExpression invocation)
{
this.VisitExpressionList(invocation.Arguments);
this.Visit(invocation.Expression);
}
}
}