public CodegenExpression CodegenMake(
     CodegenMethodScope parent,
     CodegenClassScope classScope)
 {
     var method = parent.MakeChild(
         typeof(EventAdvancedIndexProvisionRuntime),
         typeof(EventAdvancedIndexProvisionCompileTime),
         classScope);
     var indexExpressions =
         ExprNodeUtilityPrint.ToExpressionStringMinPrecedenceAsArray(IndexDesc.IndexedExpressions);
     var indexProperties = GetPropertiesPerExpressionExpectSingle(IndexDesc.IndexedExpressions);
     method.Block
         .DeclareVar<EventAdvancedIndexProvisionRuntime>(
             "desc",
             NewInstance(typeof(EventAdvancedIndexProvisionRuntime)))
         .SetProperty(Ref("desc"), "IndexExpressionTexts", Constant(indexExpressions))
         .SetProperty(Ref("desc"), "IndexProperties", Constant(indexProperties))
         .SetProperty(
             Ref("desc"),
             "IsIndexExpressionsAllProps",
             Constant(IsExpressionsAllPropsOnly(IndexDesc.IndexedExpressions)))
         .SetProperty(Ref("desc"), "Factory", Factory.CodegenMake(parent, classScope))
         .SetProperty(
             Ref("desc"),
             "ParameterExpressionTexts",
             Constant(ExprNodeUtilityPrint.ToExpressionStringsMinPrecedence(Parameters)))
         .SetProperty(
             Ref("desc"),
             "ParameterEvaluators",
             ExprNodeUtilityCodegen.CodegenEvaluators(Parameters, parent, GetType(), classScope))
         .SetProperty(Ref("desc"), "ConfigStatement", ConfigStatement.CodegenMake(parent, classScope))
         .SetProperty(Ref("desc"), "IndexTypeName", Constant(IndexDesc.IndexTypeName))
         .MethodReturn(Ref("desc"));
     return LocalMethod(method);
 }
 public EventAdvancedIndexProvisionRuntime ToRuntime()
 {
     var runtime = new EventAdvancedIndexProvisionRuntime();
     runtime.IndexExpressionTexts =
         ExprNodeUtilityPrint.ToExpressionStringMinPrecedenceAsArray(IndexDesc.IndexedExpressions);
     runtime.IndexProperties = GetPropertiesPerExpressionExpectSingle(IndexDesc.IndexedExpressions);
     runtime.IndexExpressionsOpt = IndexDesc.IndexedExpressions;
     runtime.IsIndexExpressionsAllProps = IsExpressionsAllPropsOnly(IndexDesc.IndexedExpressions);
     runtime.Factory = Factory.RuntimeFactory;
     runtime.ParameterExpressionTexts = ExprNodeUtilityPrint.ToExpressionStringsMinPrecedence(Parameters);
     runtime.ParameterEvaluators = GetEvaluatorsNoCompile(Parameters);
     runtime.ParameterExpressionsOpt = Parameters;
     runtime.ConfigStatement = ConfigStatement.ToRuntime();
     runtime.IndexTypeName = IndexDesc.IndexTypeName;
     return runtime;
 }