protected override string VisitFunctionCall(CallExpression exp, out object resultObj) { Depth++; var function = exp.Name; var paramBuilder = new StringBuilder(); var iParam = 0; var donutFn = _functionDict.GetFunction(function); donutFn.Parameters = exp.Parameters; string result; var aggStage = _aggTree.AddFunction(donutFn); if (donutFn is IDonutTemplateFunction <string> fnTemplate) { FeatureFunctions.Enqueue(donutFn); var codeContext = new DonutCodeContext(_script); result = fnTemplate.GetTemplate(exp, codeContext); donutFn.Content = new DonutFeatureDefinition(result); resultObj = donutFn; } else if (donutFn.IsAggregate) { string aggregateResult = donutFn.GetValue(); if (aggregateResult == null) { resultObj = null; return(""); } donutFn.Content = new DonutFeatureDefinition(aggregateResult = aggStage.GetValue());//FillCallParameters(donutFn, exp.Parameters); resultObj = donutFn; Aggregates.Enqueue(donutFn); result = aggregateResult; } else { FeatureFunctions.Enqueue(donutFn); foreach (var parameter in exp.Parameters) { var paramStr = Visit(parameter as IExpression); paramBuilder.Append(paramStr); if (iParam < exp.Parameters.Count - 1) { paramBuilder.Append(", "); } iParam++; } result = $"{donutFn}({paramBuilder})"; resultObj = donutFn; } Depth--; return(result); }
protected override string VisitFunctionCall(CallExpression exp, out object resultObj) { Depth++; resultObj = null; var function = exp.Name; var paramBuilder = new StringBuilder(); var iParam = 0; var donutFn = _functionDict.GetFunction(function); donutFn.Parameters = exp.Parameters; //string result; //var aggStage = _aggTree.AddFunction(donutFn); if (donutFn is IDonutTemplateFunction <DonutCodeFeatureDefinition> fnTemplate) { FeatureFunctions.Enqueue(donutFn); var codeContext = new DonutCodeContext(_script); var donutFeatureDefinition = fnTemplate.GetTemplate(exp, codeContext); if (donutFeatureDefinition == DonutCodeFeatureDefinition.Empty) { return(null); } //result = donutFeatureDefinition.ToString(); donutFn.Content = donutFeatureDefinition; resultObj = donutFn; } else { FeatureFunctions.Enqueue(donutFn); foreach (var parameter in exp.Parameters) { var paramStr = Visit(parameter as IExpression); paramBuilder.Append(paramStr); if (iParam < exp.Parameters.Count - 1) { paramBuilder.Append(", "); } iParam++; } //result = $"{donutFn}({paramBuilder})"; resultObj = donutFn; } Depth--; return(""); }