Subfields of complex lists

Currently, the only complex list that uses the following leaf indices is the field list of a structure, class, union, or enumeration.

(0x1400) Real Base Class

This leaf specifies an real base class. If a class inherits real base classes, the corresponding REAL Base Class records will precede all other member records in the field list of that class. Base class records are emitted in left to right declaration order for real bases.

2

42

*

LF_BCLASS

attribute

@type

offset


attribute Member attribute bit field

@type Index to type record of the class. The class name can be obtained from this record.

offset Offset of subobject that represents the base class within the structure.

(0x1401) Direct Virtual Base Class

This leaf specifies directly inherited virtual base class. If a class directly inherits virtual base classes, the corresponding Direct Virtual BaseClass records will follow all Real Base Class member records and precede all other member records in the field list of that class. Direct Virtual Base class records are emitted in bottommost left-to-right inheritance order for directly inherited virtual bases.

2

2

4

4

*

*

LF_VBCLASS

attribute

@btype

@vbtype

vbpoff

vboff


attribute Member attribute bit field

@btype Index to type record of the direct or indirect virtual base class. The class name can be obtained from this record.

@vbptype Type index of the virtual base pointer for this base

vbpoff Numeric leaf specifying the offset of the virtual base pointer from the address point of the class for this virtual base

vboff Numeric leaf specifying the index into the virtual base displacement table of the entry that contains the displacement of the virtual base. The displacement is relative to the address point of the class plus vbpoff.

(0x1402) Indirect Virtual Base Class

This leaf specifies indirectly inherited virtual base class. If a class indirectly inherits virtual base classes, the corresponding Indirect Virtual Base Class records will follow all Real Base Class and Direct Virtual Base Class member records and precede all other member records in the field list of that class. Direct Virtual Base class records are emitted in bottommost left-to-right inheritance order for virtual bases.

2

2

4

4

*

*

LF_IVBCLASS

attribute

@btype

@vbtype

vbpoff

vboff


attribute Member attribute bit field

@btype Index to type record of the direct or indirect virtual base class. The class name can be obtained from this record.

@vbptype Type index of the virtual base pointer for this base

vbpoff Numeric leaf specifying the offset of the virtual base pointer from the address point of the class for this virtual base

vboff Numeric leaf specifying the index into the virtual base displacement table of the entry that contains the displacement of the virtual base. The displacement is relative to the address point of the class plus vbpoff.

(0x0403) Enumeration Name and Value

This leaf specifies the name and value of an enumerate within an enumeration.

2

2

*

*

LF_ENUMERATE

attribute

value

name


attribute Member attribute bit field

value Numeric leaf specifying the value of enumerate

name Length-prefixed name of the member field.

(0x1403) Friend Function

This leaf specifies a friend function

2

2

4

*

LF_FRIENDFCN

pad0

@type

name


pad0 Two bytes of padding for native alignment on type index to follow, must be 0.

@type Index to type record of the friend function.

name Length prefixed name of friend function

(0x1404) Index To Another Type Record

2

2

4

LF_INDEX

pad0

@index


pad0 Two bytes of padding for native alignment on type index to follow, must be 0.

index Type index. This field is emitted by the compiler when a complex list needs to be split during writing.

(0x1405) Data Member

This leaf specifies nonstatic data members of a class.

2

2

4

*

*

LF_MEMBER

attribute

@type

offset

name


attribute Member attribute bit field

@type Index to type record for field

offset Numeric leaf specifying the offset of field in the structure

name Length-prefixed name of the member field

(0x1406) Static Data Member

This leaf specifies static data member of a class. Once a static data member has been found in this list, its symbol is found by qualifying the name with its class (T::name) and then searching the symbol table for a symbol by that name with the correct type index.

2

2

4

*

LF_STMEMBER

attribute

@type

name


@type Index to type record for field

attribute Member attribute bit field

name Length-prefixed name of the member field.

(0x1407) Method

This leaf specifies the overloaded member functions of a class. This type record can also be used to specify a non-overloaded method but is inefficient. The LF_ONEMETHOD record should be used for non-overloaded methods.

2

2

4

*

LF_METHOD

count

@mList

name


count Number of occurrences of function within the class. If the function is overloaded then there will be multiple entries in the method list.

@mList Type index of method list

name Length-prefixed name of method

(0x1408) Nested Type Definition

This leaf specifies nested type definition with classes, structures, unions, or enums.

2

2

4

*

LF_NESTEDTYPE

pad0

@index

name


pad0 Two bytes of padding for native alignment on type index to follow, must be 0.

@index Type index of nested type

name Length-prefixed name of type

(0x1409) Virtual Function Table Pointer

This leaf specifies virtual table pointers within the class. It is a requirement that this record be emitted in the field list before any virtual functions are emitted to the field list.

2

2

4

LF_VFUNCTAB

pad0

@type


pad0 Two bytes of padding for native alignment on type index to follow, must be 0.

@type Index to the pointer record describing the pointer. The pointer will in turn have a LF_VTSHAPE type record as the underlying type. Note that the offset of the virtual function table pointer from the address point of the class is always zero.

(0x040b) Friend Class

This leaf specifies a friend class.

2

2

4

LF_FRIENDCLS

pad0

@type


pad0 Two bytes of padding for native alignment on type index to follow, must be 0.

@type Index to type record of the friend class. The name of the class can be obtained from the referenced record.

(0x140b) One Method

This record is used to specify a method of a class that is not overloaded.

2

2

4

4

*

LF_ONEMETHOD

attribute

@type

vbaseoff

name


attribute Method attribute

@type Type index of method

vbaseoff Offset in virtual function table if introducing virtual method. If the method is not an introducing virtual, then this field is not present.

name Length prefixed name of method

(0x140c) Virtual Function Offset

This record is used to specify a virtual function table pointer at a non-zero offset relative to the address point of a class.

2

2

4

4

LF_VFUNCOFF

pad0

@type

offset


pad0 Two bytes of padding for native alignment on type index to follow, must be 0.

@type Type index of virtual function table pointer

offset Offset of virtual function table pointer relative to address point of class.

(0x140d) Nested Type Extended Definition

This leaf specifies nested type definition with classes, structures, unions, or enums and includes the protection attributes that are missing in LF_NESTEDTYPE.

2

2

4

*

LF_NESTEDTYPEEX

attribute

@type

name


attribute Nested type attribute (protection fields are valid)

@type Type index of nested type

name Length-prefixed name of type

(0x040f) Member Modification

This leaf specifies the modification of the protection of a member or method in a sub class.

2

2

4

*

LF_MEMBERMODIFY

attribute

@type

name


attribute New protection attributes

@type Type index of base class that introduced the member

name Length-prefixed name of member