Ejemplo n.º 1
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);
            }
        }
Ejemplo n.º 2
0
 protected void CompleteInitCacheMethod(ConstructorCodeBuilder constCodeBuilder)
 {
     constCodeBuilder.AddStatement(new ReturnStatement());
 }