Exemple #1
0
        public override CodegenExpression Codegen(
            InternalEventRouterWriterForge writer,
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent
                         .MakeChild(typeof(InternalEventRouterWriterArrayElement), GetType(), classScope);

            var indexExpr = ExprNodeUtilityCodegen.CodegenEvaluator(
                _indexExpression.Forge,
                method,
                typeof(VariableTriggerWriteArrayElementForge),
                classScope);
            var rhsExpr = ExprNodeUtilityCodegen.CodegenEvaluator(
                _rhsExpression.Forge,
                method,
                typeof(VariableTriggerWriteArrayElementForge),
                classScope);
            var typeWidenerExpr = _widener == null
                                ? ConstantNull()
                                : TypeWidenerFactory.CodegenWidener(_widener, method, GetType(), classScope);

            method.Block
            .DeclareVar <InternalEventRouterWriterArrayElement>("desc", NewInstance(typeof(InternalEventRouterWriterArrayElement)))
            .SetProperty(Ref("desc"), "IndexExpression", indexExpr)
            .SetProperty(Ref("desc"), "RhsExpression", rhsExpr)
            .SetProperty(Ref("desc"), "TypeWidener", typeWidenerExpr)
            .SetProperty(Ref("desc"), "PropertyName", Constant(_propertyName))
            .MethodReturn(Ref("desc"));
            return(LocalMethod(method));
        }
Exemple #2
0
        private CodegenExpression MakeWideners(
            TypeWidenerSPI[] wideners,
            CodegenMethod method,
            CodegenClassScope classScope)
        {
            var init = new CodegenExpression[wideners.Length];
            for (var i = 0; i < init.Length; i++) {
                if (wideners[i] != null) {
                    init[i] = TypeWidenerFactory.CodegenWidener(wideners[i], method, GetType(), classScope);
                }
                else {
                    init[i] = ConstantNull();
                }
            }

            return NewArrayWithInit(typeof(TypeWidener), init);
        }
Exemple #3
0
        public override CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            CodegenMethod method = parent.MakeChild(typeof(VariableTriggerWriteArrayElement), this.GetType(), classScope);

            method.Block
            .DeclareVar <VariableTriggerWriteArrayElement>("desc", NewInstance(typeof(VariableTriggerWriteArrayElement)))
            .SetProperty(Ref("desc"), "VariableName", Constant(variableName))
            .SetProperty(
                Ref("desc"),
                "IndexExpression",
                ExprNodeUtilityCodegen.CodegenEvaluator(indexExpression, method, typeof(VariableTriggerWriteArrayElementForge), classScope))
            .SetProperty(
                Ref("desc"),
                "TypeWidener",
                widener == null ? ConstantNull() : TypeWidenerFactory.CodegenWidener(widener, method, this.GetType(), classScope))
            .MethodReturn(Ref("desc"));
            return(LocalMethod(method));
        }