protected override MethodEmitter BuildProxiedMethodBody(MethodEmitter emitter, ClassEmitter @class,
                                                                ProxyGenerationOptions options, INamingScope namingScope)
        {
            if (emitter.ReturnType == typeof(int))
            {
                MethodBuilder   methodBuilder  = emitter.MethodBuilder;
                ILGenerator     ilGenerator    = methodBuilder.GetILGenerator();
                ParameterInfo[] parameterInfos = MethodToOverride.GetParameters();

                var v      = new ILTemplateEmitter(ilGenerator, templateMethod, MethodToOverride, methodBuilder);
                var reader = new ILReader(templateMethod);
                reader.Accept(v);

                return(emitter);
            }

            InitOutParameters(emitter, MethodToOverride.GetParameters());

            if (emitter.ReturnType == typeof(void))
            {
                emitter.CodeBuilder.AddStatement(new ReturnStatement());
            }
            else
            {
                emitter.CodeBuilder.AddStatement(new ReturnStatement(new DefaultValueExpression(emitter.ReturnType)));
            }

            return(emitter);
        }
        private Expression IfNotNull(Reference targetReference)
        {
            var expression = new MultiStatementExpression();
            var arguments  = ArgumentsUtil.ConvertToArgumentReferenceExpression(MethodToOverride.GetParameters());

            expression.AddStatement(new ReturnStatement(
                                        new MethodInvocationExpression(
                                            targetReference,
                                            MethodToOverride,
                                            arguments)
            {
                VirtualCall = true
            }));
            return(expression);
        }
Esempio n. 3
0
        protected override MethodEmitter BuildProxiedMethodBody(MethodEmitter emitter, ClassEmitter @class, ProxyGenerationOptions options, INamingScope namingScope)
        {
            InitOutParameters(emitter, MethodToOverride.GetParameters());

            if (emitter.ReturnType == typeof(void))
            {
                emitter.CodeBuilder.AddStatement(new ReturnStatement());
            }
            else
            {
                emitter.CodeBuilder.AddStatement(new ReturnStatement(new DefaultValueExpression(emitter.ReturnType)));
            }

            return(emitter);
        }
        private IStatement IfNotNull(Reference targetReference)
        {
            var statements = new BlockStatement();
            var arguments  = ArgumentsUtil.ConvertToArgumentReferenceExpression(MethodToOverride.GetParameters());

            statements.AddStatement(new ReturnStatement(
                                        new MethodInvocationExpression(
                                            targetReference,
                                            MethodToOverride,
                                            arguments)
            {
                VirtualCall = true
            }));
            return(statements);
        }
Esempio n. 5
0
        protected override MethodEmitter BuildProxiedMethodBody(MethodEmitter emitter, ClassEmitter @class, ProxyGenerationOptions options, INamingScope namingScope)
        {
            var targetReference = getTargetReference(@class, MethodToOverride);
            var arguments       = ArgumentsUtil.ConvertToArgumentReferenceExpression(MethodToOverride.GetParameters());

            emitter.CodeBuilder.AddStatement(new ReturnStatement(
                                                 new MethodInvocationExpression(
                                                     targetReference,
                                                     MethodToOverride,
                                                     arguments)
            {
                VirtualCall = true
            }));
            return(emitter);
        }
        private Expression IfNull(Type returnType)
        {
            var expression = new MultiStatementExpression();

            InitOutParameters(expression, MethodToOverride.GetParameters());

            if (returnType == typeof(void))
            {
                expression.AddStatement(new ReturnStatement());
            }
            else
            {
                expression.AddStatement(new ReturnStatement(new DefaultValueExpression(returnType)));
            }
            return(expression);
        }
        private IStatement IfNull(Type returnType)
        {
            var statements = new BlockStatement();

            InitOutParameters(statements, MethodToOverride.GetParameters());

            if (returnType == typeof(void))
            {
                statements.AddStatement(new ReturnStatement());
            }
            else
            {
                statements.AddStatement(new ReturnStatement(new DefaultValueExpression(returnType)));
            }
            return(statements);
        }