Type String

A type string is a series of consecutive leaf structures:

2

*

2

*

2

*

leaf

data

leaf

data

...

leaf

data


leaf LF_... index, as described below

data Data specified to each leaf type

No LF_... index can have a value of 0x0000. The leaf indices are separated into four ranges according to the use of the type record. The first range is for the type records that are directly referenced in symbols. The second range is for type records that are not referenced by symbols but instead are referenced by other type records. All type records must have a starting leaf index in these first two ranges.

The third range of leaf indices is used to build up complex lists such as the field list of a class type record. No type record can begin with one of the leaf indices in this range.

The fourth ranges of type indices are used to represent numeric data in a symbol or type records. These leaf indices are greater than 0x8000. At the point that the type or symbol processor is expecting a numeric field, the next two bytes in the type record are examined. If the value is less than 0x8000, then the two bytes contain the numeric value. If the value is greater than 0x8000, then the data follows the leaf index in a format specified by the leaf index. See the Section 4 for a detailed description of the numeric leaf indices.

Because of the method used to maintain natural alignment in complex lists, no leaf index can have a value greater than or equal to 0xf000. Also, no leaf index can have a value such that the least significant 8 bits of the value is greater than or equal to 0xf0.

*[Note: All type records that included one or more CV_typ_t fields have been renamed by having "_16t" appended to their original names. For instance, the symbol record for LF_MODIFIER that included a 16-bit CV_typ_t (now known as CV_typ16_t) is now LF_MODIFIER_16t. The records that were so changed all have indices (record type fields) with the 0x1000 bit set. Records that did not contain CV_typ_t fields were left unchanged.]

Leaf indices for type records that can be referenced from symbols:

0x1001 LF_MODIFIER

0x1002 LF_POINTER

0x1003 LF_ARRAY

0x1004 LF_CLASS

0x1005 LF_STRUCTURE

0x1006 LF_UNION

0x1007 LF_ENUM

0x1008 LF_PROCEDURE

0x1009 LF_MFUNCTION

0x000a LF_VTSHAPE

0x100a LF_COBOL0

0x000c LF_COBOL1

0x100b LF_BARRAY

0x000e LF_LABEL

0x000f LF_NULL

0x0010 LF_NOTTRAN

0x100c LF_DIMARRAY

0x100d LF_VFTPATH

0x100e LF_PRECOMP

0x0014 LF_ENDPRECOMP

0x100f LF_OEM

0x0016 LF_TYPESERVER

Leaf indices for type records that can be referenced from other type records:

0x1200 LF_SKIP

0x1201 LF_ARGLIST

0x1202 LF_DEFARG

0x1203 LF_FIELDLIST

0x1204 LF_DERIVED

0x1205 LF_BITFIELD

0x1206 LF_METHODLIST

0x1207 LF_DIMCONU

0x1208 LF_DIMCONLU

0x1209 LF_DIMVARU

0x120a LF_DIMVARLU

0x020c LF_REFSYM

Leaf indices for fields of complex lists:

0x1400 LF_BCLASS

0x1401 LF_VBCLASS

0x1402 LF_IVBCLASS

0x0403 LF_ENUMERATE

0x1403 LF_FRIENDFCN

0x1404 LF_INDEX

0x1405 LF_MEMBER

0x1406 LF_STMEMBER

0x1407 LF_METHOD

0x1408 LF_NESTTYPE

0x1409 LF_VFUNCTAB

0x140a LF_FRIENDCLS

0x140b LF_ONEMETHOD

0x140c LF_VFUNCOFF

0x140d LF_NESTTYPEEX

0x140e LF_MEMBERMODIFY

Leaf indices for numeric fields of symbols and type records:

0x8000 LF_NUMERIC

0x8000 LF_CHAR

0x8001 LF_SHORT

0x8002 LF_USHORT

0x8003 LF_LONG

0x8004 LF_ULONG

0x8005 LF_REAL32

0x8006 LF_REAL64

0x8007 LF_REAL80

0x8008 LF_REAL128

0x8009 LF_QUADWORD

0x800a LF_UQUADWORD

0x800b LF_REAL48

0x800c LF_COMPLEX32

0x800d LF_COMPLEX64

0x800e LF_COMPLEX80

0x800f LF_COMPLEX128

0x8010 LF_VARSTRING

0xf0 LF_PAD0

0xf1 LF_PAD1

0xf2 LF_PAD2

0xf3 LF_PAD3

0xf4 LF_PAD4

0xf5 LF_PAD5

0xf6 LF_PAD6

0xf7 LF_PAD7

0xf8 LF_PAD8

0xf9 LF_PAD9

0xfa LF_PAD10

0xfb LF_PAD11

0xfc LF_PAD12

0xfc LF_PAD13

0xfe LF_PAD14

0xff LF_PAD15

Member attribute field

Several of the type records below reference a field attribute bit field. This bit field has the following format:

access :2 Specifies the access protection of the item

0 No access protection

1 Private

2 Protected

3 Public

mprop :3 Specifies the properties for methods

0 Vanilla method

1 Virtual method

2 Static method

3 Friend method

4 Introducing virtual method

5 Pure virtual method

6 Pure introducing virtual method

7 Reserved

pseudo :1 True if the method is never instantiated by the compiler

noinherit :1 True if the class cannot be inherited

noconstruct :1 True if the class cannot be constructed

compgenx :1 True if the method is instantiated by the compiler

reserved :7