55 private void Out(
char c)
134 switch (
node.NodeType)
258 string name =
node.Name;
259 if (
string.IsNullOrEmpty(name))
272 if (
node.ParameterCount == 1)
327 if (
node.Value !=
null)
329 string text =
node.Value.ToString();
336 else if (
text ==
node.Value.GetType().ToString())
356 Out(
$"<DebugInfo({node.Document.FileName}: {node.StartLine}, {node.StartColumn}, {node.EndLine}, {node.EndColumn})>");
368 if (instance !=
null)
388 if (
node.NewExpression.ArgumentCount == 0 &&
node.NewExpression.Type.Name.
Contains(
'<'))
517 switch (
node.NodeType)
538 for (
int i = 0; i <
node.ArgumentCount; i++)
560 switch (
node.NodeType)
576 switch (
node.NodeType)
601 Out(
"ConvertChecked(");
635 switch (
node.NodeType)
701 GotoExpressionKind.Goto =>
"goto",
702 GotoExpressionKind.Break =>
"break",
703 GotoExpressionKind.Continue =>
"continue",
704 GotoExpressionKind.Return =>
"return",
705 _ => throw new InvalidOperationException(),
709 if (
node.Value !=
null)
745 if (!
string.IsNullOrEmpty(
node.Variable?.Name))
762 if (
node.Object !=
null)
768 Out(
node.Indexer.DeclaringType.Name);
770 if (
node.Indexer !=
null)
789 [
UnconditionalSuppressMessage(
"ReflectionAnalysis",
"IL2075:UnrecognizedReflectionPattern", Justification =
"The 'ToString' method cannot be trimmed on any Expression type because we are calling Expression.ToString() in this method.")]
806 if (!
string.IsNullOrEmpty(target.
Name))
820 return node.Type ==
typeof(
bool?);
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
bool ICollection< KeyValuePair< TKey, TValue > >. Contains(KeyValuePair< TKey, TValue > keyValuePair)
void Add(TKey key, TValue value)
override Expression VisitUnary(UnaryExpression node)
override Expression VisitConstant(ConstantExpression node)
override Expression VisitLambda< T >(Expression< T > node)
override Expression VisitInvocation(InvocationExpression node)
override MemberListBinding VisitMemberListBinding(MemberListBinding binding)
readonly StringBuilder _out
override Expression VisitParameter(ParameterExpression node)
override ElementInit VisitElementInit(ElementInit initializer)
void VisitExpressions< T >(char open, ReadOnlyCollection< T > expressions, char close)
override Expression VisitExtension(Expression node)
static bool IsBool(Expression node)
override Expression VisitMemberInit(MemberInitExpression node)
override Expression VisitTry(TryExpression node)
static string CatchBlockToString(CatchBlock node)
void DumpLabel(LabelTarget target)
override Expression VisitListInit(ListInitExpression node)
void OutMember(Expression instance, MemberInfo member)
override CatchBlock VisitCatchBlock(CatchBlock node)
override Expression VisitNewArray(NewArrayExpression node)
override MemberAssignment VisitMemberAssignment(MemberAssignment assignment)
static string ExpressionToString(Expression node)
override Expression VisitNew(NewExpression node)
Dictionary< object, int > _ids
override Expression VisitTypeBinary(TypeBinaryExpression node)
override Expression VisitMember(MemberExpression node)
static string SwitchCaseToString(SwitchCase node)
ExpressionStringBuilder()
int GetLabelId(LabelTarget label)
override Expression VisitSwitch(SwitchExpression node)
override Expression VisitRuntimeVariables(RuntimeVariablesExpression node)
static string MemberBindingToString(MemberBinding node)
override Expression VisitGoto(GotoExpression node)
override Expression VisitBlock(BlockExpression node)
static string ElementInitBindingToString(ElementInit node)
override SwitchCase VisitSwitchCase(SwitchCase node)
override Expression VisitMethodCall(MethodCallExpression node)
override Expression VisitDefault(DefaultExpression node)
int GetParamId(ParameterExpression p)
override string ToString()
override Expression VisitConditional(ConditionalExpression node)
override Expression VisitDebugInfo(DebugInfoExpression node)
override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding)
override Expression VisitIndex(IndexExpression node)
override Expression VisitLoop(LoopExpression node)
override Expression VisitLabel(LabelExpression node)
override Expression VisitBinary(BinaryExpression node)
virtual ? Expression Visit(Expression? node)
virtual MemberBinding VisitMemberBinding(MemberBinding node)
override string ToString()
StringBuilder Append(char value, int repeatCount)
static readonly Type[] EmptyTypes