public static T ReplaceValueInfoRefsWithData <T>(T expr, string dataSrcName, Dictionary <string, object> dictValues = null) where T : Expr { var dataRef = new ReferenceExpr(dataSrcName); T res = (T)expr.Visit(Expr.RecursiveModifier(e => { var refExpr = e as ReferenceExpr; if (refExpr == null || !ValueInfo.IsDescriptor(refExpr.name)) { return(e); } if (dictValues != null) { dictValues[refExpr.name] = null; } return(new IndexExpr(dataRef, new ConstExpr(refExpr.name))); })); return(res); }