ToExpression() public method

public ToExpression ( ) : Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.Expression
return Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.Expression
Example #1
0
        public void WriteInitialization(AbstractCodeBuilder codebuilder,
            Reference targetArgument, Reference mixinArray)
        {
            NewInstanceExpression newInst = null;

            if (SourceArgIndex == EmptyIndex)
            {
                newInst = new NewInstanceExpression(Callable,
                                                    targetArgument.ToExpression(), new MethodPointerExpression(_callback));
            }
            else
            {
                newInst = new NewInstanceExpression(Callable,
                                                    new LoadRefArrayElementExpression(SourceArgIndex, mixinArray),
                                                    new MethodPointerExpression(_callback));
            }

            codebuilder.AddStatement(new AssignStatement(
                                     	Field, newInst));
        }
Example #2
0
        /// <summary>
        /// Common initializatio code for the default constructor
        /// </summary>
        /// <param name="codebuilder"></param>
        /// <param name="interceptorArg"></param>
        /// <param name="targetArgument"></param>
        /// <param name="mixinArray"></param>
        protected virtual void GenerateConstructorCode(ConstructorCodeBuilder codebuilder,
            Reference interceptorArg, Reference targetArgument,
            Reference mixinArray)
        {
            codebuilder.AddStatement(new AssignStatement(
                                     	InterceptorField, interceptorArg.ToExpression()));

            int mixins = Context.MixinsAsArray().Length;

            codebuilder.AddStatement(new AssignStatement(
                                     	MixinField, new NewArrayExpression(mixins, typeof(object))));

            if (Context.HasMixins)
            {
                for(int i = 0; i < mixins; i++)
                {
                    codebuilder.AddStatement(new AssignArrayStatement(
                                             	MixinField, i,
                                             	new LoadRefArrayElementExpression(i, mixinArray)));
                }
            }

            codebuilder.AddStatement(new AssignStatement(
                                     	CacheField, new NewInstanceExpression(
                                     	            	typeof(HybridDictionary).GetConstructor(new Type[0]))));

            // Initialize the delegate fields
            foreach(CallableField field in _cachedFields)
            {
                field.WriteInitialization(codebuilder, targetArgument, mixinArray);
            }
        }