private void CreateTypeObject(TypeDesc typeDesc) { if (typeDesc.BaseClass != null && !_typesHeap.ContainsType(typeDesc.BaseClass.Metadata)) { throw new InvalidOperationException("Base class for this class was not loaded into domain. Load base class first"); } VTableBuilder vtb = new VTableBuilder(typeDesc, null); var vtBuilder = new VTableBuilder(typeDesc, null); if (typeDesc.BaseClass != null) { vtBuilder.CloneBaseVTable(_typesHeap.GetTypeObject(typeDesc.BaseClass.Metadata).VTable); } VTable vTable = vtBuilder.ExtendBaseTypeVTable().Create(); //Add to heap TypeObject typeObj = new TypeObject(typeDesc.Metadata, typeDesc, vTable); _typesHeap.AddTypeObject(typeDesc.Metadata, typeObj); }
public VTable Create() { VTable vTable = new VTable(_methodsTable, _ioTable); return(vTable); }
//public Int32 HeapObjAddr; public TypeObject(ClassToken token, TypeDesc typeDesc, VTable vTable) { TypeDesc = typeDesc; VTable = vTable; Token = token; }