Exemple #1
0
        // Only called by the context.
        public void Initialize()
        {
            if (null != _fields)
            {
                return;
            }

            // 1) fields.
            _fields = new MemberList();
            if (null != parent)
            {
                for (int ii = 0; ii < parent._fields.Count; ++ii)
                {
                    ClassMember member       = parent._fields.Get(ii);
                    bool        modified     = false;
                    ITypeDef    resolvedType = parent.IsGeneric() ? member.typeDef.ResolveTemplateTypes(typeDef.genericTypes, ref modified) : member.typeDef;
                    ClassMember newMember    = new ClassMember(member.name, resolvedType, member.initializer, member.isGetonly);
                    newMember.index = _fields.Add(member.name, newMember);
                }
            }

            // 2) Functions
            _memberFuncs = new MemberList();
            if (null != parent)
            {
                for (int ii = 0; ii < parent._memberFuncs.Count; ++ii)
                {
                    ClassMember member       = parent._memberFuncs.Get(ii);
                    bool        modified     = false;
                    ITypeDef    resolvedType = parent.IsGeneric() ? member.typeDef.ResolveTemplateTypes(typeDef.genericTypes, ref modified) : member.typeDef;
                    ClassMember newMember    = new ClassMember(member.name, resolvedType, member.initializer, member.isGetonly);
                    newMember.index = _memberFuncs.Add(member.name, newMember);
                }

                vftableVars = new List <Variable>(parent.vftableVars);
            }
            else
            {
                vftableVars = new List <Variable>();
            }

            // 3) Statics aren't copied.
            _statics   = new MemberList();
            staticVars = new List <Variable>();
        }