/// <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); } }
protected void CompleteInitCacheMethod(ConstructorCodeBuilder constCodeBuilder) { constCodeBuilder.AddStatement(new ReturnStatement()); }