コード例 #1
0
        public override void InitBlock(
            CodegenBlock block,
            CodegenMethod methodNode,
            ExprForgeCodegenSymbol scope,
            CodegenClassScope codegenClassScope)
        {
            innerValue = InnerExpression.EvaluateCodegen(typeof(bool?), methodNode, scope, codegenClassScope);
            EnumTakeWhileHelper.InitBlockSizeOneEventPlus(numParameters, block, innerValue, StreamNumLambda, InnerExpression.EvaluationType);
            block.DeclareVar(
                typeof(EventBean[]),
                "all",
                StaticMethod(typeof(EnumTakeWhileHelper), "TakeWhileLastEventBeanToArray", EnumForgeCodegenNames.REF_ENUMCOLL));

            var forEach = block.ForLoop(
                typeof(int),
                "i",
                Op(ArrayLength(Ref("all")), "-", Constant(1)),
                Relational(Ref("i"), GE, Constant(0)),
                DecrementRef("i"))
                          .AssignArrayElement(EnumForgeCodegenNames.REF_EPS, Constant(StreamNumLambda), ArrayAtIndex(Ref("all"), Ref("i")))
                          .IncrementRef("count")
                          .AssignArrayElement("props", Constant(0), Ref("count"));

            CodegenLegoBooleanExpression.CodegenBreakIfNotNullAndNotPass(forEach, InnerExpression.EvaluationType, innerValue);
            forEach.Expression(ExprDotMethod(Ref("result"), "AddFirst", ArrayAtIndex(Ref("all"), Ref("i"))));
        }
コード例 #2
0
 public override void InitBlock(
     CodegenBlock block,
     CodegenMethod methodNode,
     ExprForgeCodegenSymbol scope,
     CodegenClassScope codegenClassScope)
 {
     innerValue = InnerExpression.EvaluateCodegen(typeof(bool?), methodNode, scope, codegenClassScope);
     EnumTakeWhileHelper.InitBlockSizeOneEventPlus(numParameters, block, innerValue, StreamNumLambda, InnerExpression.EvaluationType);
 }