258 lines
8.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|