// 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>(); }