Improved the support of records (classes and structures) to include virtual and non-virtual methods, virtual and non-virtual inheritance, bitfield members.
Major changes included in the patch
- Introduced "ClassInfo" container that is used to collect record info from current debug info metadata that is needed to emit CodeView records.
- Extended the TypeIndices map to have another dimension, i.e. from {DINode -> TypeIndex} to {DIType -> {DINode -> TypeIndex} }.
- This is needed as DISubroutine might be shared for static methods from different classes as well as regular functions, e.g. all three functions bellow (f1, f2, and f3) will have same DISubroutine.
void f1() {} class A { static void f2() {} }; class B { static void f3() {} };
It would be more consistent to directly take the TypeRecordKind as a parameter here.