Type Records Referenced from Type Records

(0x1200) Skip

This is used by incremental compilers to reserve space for future indexes.

2

4

*

LF_SKIP

index

pad


index In processing $$TYPES, the index counter is advanced to index count, skipping all intermediate indices. This is the next valid index.

pad Space reserved for incremental compilations. Note that this record is removed by the link/pack utility so there is no requirement for maintaining natural alignment for this record.

(0x1201) Argument List

2

4

4*argcount

LF_ARGLIST

argcount

indices


argcount Count of number of indices in list

indices List of type indices for describing the formal parameters to a function or method.

(0x1202) Default Argument

2

4

*

LF_DEFARG

@index

expression


index Type index of resulting expression

expression Length-prefixed string of supplied default

(0x1203) Field List

A field list contains the descriptors of the fields of a structure, class, union, or enumeration. The field list is composed of zero or more subfields. Because of the requirement for natural alignment, there may be padding between elements of the field list. As a program walks down the field list, the address of the next subfield is calculated by adding the length of the previous field to the address of the previous field. The byte at the new address is examined and if it is greater than 0xf0, the low four bits are extracted and added to the address to find the address of the next subfield. These padding fields are not included in the count field of the class, structure, union, or enumeration type records. If the field list is broken into two or more pieces by the compiler, then the last field of each piece is a LF_INDEX with the type being the index of the continuation record. The LF_INDEX and LF_PADx fields of the field list are not included in field list count specified in the class, structure, union, or enumeration record. See Section 3.5 for field list elements

2

*

*

...

*

2

*

leaf

data

pad

...

pad

leaf

data


(0x1204) Derived Classes

This type record specifies all of the classes that are directly derived from the class that references this type record.

2

4

4*count

LF_DERIVED

count

@type


count Number of types in the list

@type Type indices of the classes that directly inherit from the class that references this type record

(0x1205) Bit Fields

Bit fields are represented by an entry in the field list that indexes a bit field type definition.

2

42

1

1

LF_BITFIELD

@type

length

position


@type Type index of the field

length The length in bits of the object

position Starting position (from bit 0) of the object in the word.

(0x1206) Method List

2

2

2

4

4

LF_MLIST

attribute

pad0

@type

vtab offset

optional

repeated


attribute Attribute of the member function

pad0 Two bytes of padding for native alignment on type index to follow, must be 0.@type Type index of the procedure record for this occurrence of the function.

vtab offset Present only when property attribute is introducing virtual (optional). Offset in vtable of the class which contains the pointer to the function.

Once a method has been found in this list, its symbol is found by qualifying the method name with its class (T::name) and then searching the symbol table for a symbol by that name with the correct type index. Note that the number of repeats is determined by the subleaf of the field list that references this LF_MLIST record.

(0x1207) Dimensioned Array with Constant Upper Bound

This record is used to describe a dimensioned array with default lower bound and constant upper bound. The default lower bound is language specific.

2

42

2

s*rank

LF_DIMCONU

@index

rank

bound


@index Type of the index

rank Number of dimensions

bound Constants for the upper bound of each dimension of the array. Each constant is of the size s specified by @index.

(0x0209) Dimensioned Array with Constant Lower and Upper Bounds

This record is used to describe a dimensioned array with constant lower and upper bound.

2

42

2

2*s*rank

LF_DIMCONLU

@index

rank

bound


@index Type of the index

rank Number of dimensions

bound Pairs of constants for the lower and upper bound of each dimension of the array. Each constant is of the size s specified by @index. The ordering is lower bound followed by upper bound for each dimension.

(0x020a) Dimensioned Array with Variable Upper Bound

This record is used to describe a dimensioned array with default lower bound and variable upper bound. The default lower bound is language specific.

2

4

4

rank

LF_DIMVARU

rank

@index

@var


rank Number of dimensions

@index Type of the index

@var Array of type index of LF_REFSYM record describing the variable upper bound. If one dimension of the array is variable, then all dimensions must be described using LF_REFSYM records.

(0x020b) Dimensioned Array with Variable Lower and Upper Bounds

This record is used to describe a dimensioned array with variable lower and upper bound.

2

4

4

2*rank

LF_DIMVARLU

rank

@index

var


rank Number of dimensions

@index Type of the index

@var Array of type indices of LF_REFSYM records describing the variable lower and upper bounds. If one dimension of the array is variable, then all dimensions must be described using LF_REFSYM records. The order is lower bound followed by upper bound for each dimension.

(0x020c) Referenced Symbol

This record is used to describe a symbol that is referenced by a type record. The record is defined because type records cannot reference symbols or locations in the $$SYMBOLS table because global symbol compaction will move symbols.

2

*

LF_REFSYM

sym


sym Copy of the referenced symbol including the length field