public ToExpression ( ) : Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.Expression | ||
Результат | Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.Expression |
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)); }
/// <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); } }