public static CodegenExpression Codegen( EnumSumEventsForge forge, EnumForgeCodegenParams args, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { var innerType = forge.InnerExpression.EvaluationType; var scope = new ExprForgeCodegenSymbol(false, null); var methodNode = codegenMethodScope .MakeChildWithScope( forge.sumMethodFactory.ValueType.GetBoxedType(), typeof(EnumSumEventsForgeEval), scope, codegenClassScope) .AddParam(EnumForgeCodegenNames.PARAMS); var block = methodNode.Block; forge.sumMethodFactory.CodegenDeclare(block); var forEach = block.ForEach(typeof(EventBean), "next", EnumForgeCodegenNames.REF_ENUMCOLL) .AssignArrayElement(EnumForgeCodegenNames.REF_EPS, Constant(forge.StreamNumLambda), Ref("next")) .DeclareVar( innerType.GetBoxedType(), "value", forge.InnerExpression.EvaluateCodegen(innerType, methodNode, scope, codegenClassScope)); if (innerType.CanBeNull()) { forEach.IfRefNull("value").BlockContinue(); } forge.sumMethodFactory.CodegenEnterNumberTypedNonNull(forEach, Ref("value")); forge.sumMethodFactory.CodegenReturn(block); return LocalMethod(methodNode, args.Eps, args.Enumcoll, args.IsNewData, args.ExprCtx); }
public EnumSumEventsForgeEval( EnumSumEventsForge forge, ExprEvaluator innerExpression) { _forge = forge; _innerExpression = innerExpression; }