Exemple #1
0
 public ExprDotNodeForgePropertyExprEvalIndexed(
     ExprDotNodeForgePropertyExpr forge,
     ExprEvaluator exprEvaluator)
 {
     this.forge = forge;
     this.exprEvaluator = exprEvaluator;
 }
Exemple #2
0
        public static CodegenExpression Codegen(
            ExprDotNodeForgePropertyExpr forge,
            CodegenMethodScope codegenMethodScope,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            CodegenMethod methodNode = codegenMethodScope.MakeChild(
                forge.EvaluationType,
                typeof(ExprDotNodeForgePropertyExprEvalIndexed),
                codegenClassScope);

            CodegenExpressionRef refEPS = exprSymbol.GetAddEPS(methodNode);
            methodNode.Block
                .DeclareVar<EventBean>("@event", ArrayAtIndex(refEPS, Constant(forge.StreamNum)))
                .IfRefNullReturnNull("@event")
                .DeclareVar<int?>(
                    "index",
                    forge.ExprForge.EvaluateCodegen(typeof(int?), methodNode, exprSymbol, codegenClassScope))
                .IfRefNullReturnNull("index")
                .MethodReturn(
                    CodegenLegoCast.CastSafeFromObjectType(
                        forge.EvaluationType,
                        forge.IndexedGetter.EventBeanGetIndexedCodegen(
                            methodNode,
                            codegenClassScope,
                            Ref("@event"),
                            Unbox(Ref("index")))));
            return LocalMethod(methodNode);
        }
        public static CodegenExpression Codegen(
            ExprDotNodeForgePropertyExpr forge,
            CodegenMethodScope codegenMethodScope,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            var methodNode = codegenMethodScope.MakeChild(
                forge.EvaluationType,
                typeof(ExprDotNodeForgePropertyExprEvalMapped),
                codegenClassScope);
            var refEPS = exprSymbol.GetAddEPS(methodNode);

            methodNode.Block
                .DeclareVar<EventBean>("@event", ArrayAtIndex(refEPS, Constant(forge.StreamNum)))
                .IfRefNullReturnNull("@event")
                .DeclareVar<string>(
                    "result",
                    forge.ExprForge.EvaluateCodegen(typeof(string), methodNode, exprSymbol, codegenClassScope))
                .IfRefNullReturnNull("result")
                .DebugStack();
                
            methodNode.Block
                .MethodReturn(
                    CodegenLegoCast.CastSafeFromObjectType(
                        forge.EvaluationType,
                        forge.MappedGetter.EventBeanGetMappedCodegen(
                            methodNode,
                            codegenClassScope,
                            Ref("@event"),
                            Ref("result"))));

            return LocalMethod(methodNode);
        }