<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />

EXPRExtensions

static class EXPRExtensions
using System; using System.Collections.Generic; namespace Microsoft.CSharp.RuntimeBinder.Semantics { internal static class EXPRExtensions { public static Expr Map(this Expr expr, Func<Expr, Expr> f) { if (expr == null) return f(null); Expr first = null; Expr last = null; foreach (Expr item in expr.ToEnumerable()) { Expr newItem = f(item); ExprFactory.AppendItemToList(newItem, ref first, ref last); } return first; } public static IEnumerable<Expr> ToEnumerable(this Expr expr) { Expr expr2 = expr; while (true) { if (expr2 == null) yield break; ExprList list = expr2 as ExprList; if (list == null) break; yield return list.OptionalElement; expr2 = list.OptionalNextListNode; } yield return expr2; } public static bool isLvalue(this Expr expr) { if (expr != null) return (expr.Flags & EXPRFLAG.EXF_LVALUE) != (EXPRFLAG)0; return false; } public static bool isChecked(this Expr expr) { if (expr != null) return (expr.Flags & EXPRFLAG.EXF_CHECKOVERFLOW) != (EXPRFLAG)0; return false; } public static bool isNull(this Expr expr) { ExprConstant exprConstant = expr as ExprConstant; if (exprConstant != null && expr.Type.FundamentalType == FUNDTYPE.FT_REF) return exprConstant.Val.IsNullRef; return false; } public static bool IsZero(this Expr expr) { return (expr as ExprConstant)?.IsZero ?? false; } private static Expr GetSeqVal(this Expr expr) { if (expr == null) return null; Expr expr2 = expr; while (expr2.Kind == ExpressionKind.Sequence) { expr2 = ((ExprBinOp)expr2).OptionalRightChild; } return expr2; } public static Expr GetConst(this Expr expr) { Expr seqVal = expr.GetSeqVal(); ExpressionKind? nullable = seqVal?.Kind; if (nullable.HasValue) { ExpressionKind valueOrDefault = nullable.GetValueOrDefault(); if (valueOrDefault == ExpressionKind.Constant || valueOrDefault == ExpressionKind.ZeroInit) return seqVal; } return null; } } }