1# In file 1 we set up some basic types and IDs to refer to them. In this file 2# we will set up the same types. For some of them we will make them identical 3# but re-order the records in the file to make sure they have different type 4# indices and appear in different orders. In other cases we will make slight 5# adjustments to the types, to ensure that they do not get merged in. 6# 7# For easy understanding, a semantic representation of the types we will set up 8# is as follows: 9# - int main(int, char**) // This record should share an LF_PROCEDURE and id 10# // record with corresponding function from the 11# // first file. 12# - int main2(int, char**) // This record should share the LF_PROCEDURE 13# // record but have a unique id record. 14# - void foo(int, char**) // This record should have a unique LF_PROCEDURE 15# // record, but the LF_ARGLIST record internally 16# // should be shared. 17# 18# - struct FooBar { // Because the type of this record exactly matches 19# // the corresponding file, its entire type record 20# // hierarchy should be shared. 21# public: 22# void *FooMember; 23# void FooMethod2(int); // Note that the *type* of this member should be 24# // the same as the type of the record from the 25# // first stream. But since it has a different 26# // name, it will not share an id record. 27# }; 28TpiStream: 29 Records: 30 # TypeIndex: 4096 (0x1000) 31 # (int) 32 - Kind: LF_ARGLIST 33 ArgList: 34 ArgIndices: [ 116 ] 35 # TypeIndex: 4097 (0x1001) 36 # public void *FooMember 37 - Kind: LF_FIELDLIST 38 FieldList: 39 - Kind: LF_MEMBER 40 DataMember: 41 Attrs: 3 # public 42 Type: 1027 # void* 43 FieldOffset: 0 44 Name: FooMember # FooMember 45 # TypeIndex: 4098 (0x1002) 46 # char** 47 - Kind: LF_POINTER 48 Pointer: 49 ReferentType: 1136 50 Attrs: 32778 51 # TypeIndex: 4099 (0x1003) 52 # (int, char**) 53 - Kind: LF_ARGLIST 54 ArgList: 55 ArgIndices: [ 116, 4098 ] 56 # TypeIndex: 4100 (0x1004) 57 # struct FooBar { 58 # public: 59 # void *FooMember; 60 # }; 61 - Kind: LF_STRUCTURE 62 Class: 63 MemberCount: 1 64 Options: [ None, HasUniqueName ] 65 FieldList: 4097 66 Name: FooBar 67 UniqueName: 'FooBar' 68 DerivationList: 0 69 VTableShape: 0 70 Size: 4 71 # TypeIndex: 4101 (0x1005) 72 # void (int, char**) 73 - Kind: LF_PROCEDURE 74 Procedure: 75 ReturnType: 3 # void 76 CallConv: NearC 77 Options: [ None ] 78 ParameterCount: 2 79 ArgumentList: 4099 # (int, char**) 80 # TypeIndex: 4102 (0x1006) 81 # FooBar * 82 - Kind: LF_POINTER 83 Pointer: 84 ReferentType: 4100 # FooBar 85 Attrs: 32778 86 # TypeIndex: 4103 (0x1007) 87 # int (int, char**) 88 - Kind: LF_PROCEDURE 89 Procedure: 90 ReturnType: 116 # int 91 CallConv: NearC 92 Options: [ None ] 93 ParameterCount: 2 94 ArgumentList: 4099 # (int, char**) 95 # TypeIndex: 4104 (0x1008) 96 - Kind: LF_MFUNCTION 97 MemberFunction: 98 ReturnType: 3 # void 99 ClassType: 4100 # struct FooBar 100 ThisType: 4102 # FooBar * 101 CallConv: ThisCall 102 Options: [ None, Constructor ] 103 ParameterCount: 1 104 ArgumentList: 4096 # (int) 105 ThisPointerAdjustment: 0 106IpiStream: 107 Records: 108 # TypeIndex: 4096 (0x1000) 109 # struct FooBar 110 - Kind: LF_UDT_MOD_SRC_LINE 111 UdtModSourceLine: 112 UDT: 4100 # struct FooBar 113 SourceFile: 0 # We don't support this yet 114 LineNumber: 0 115 Module: 0 # We don't support this yet 116 # TypeIndex: 4097 (0x1001) 117 # int main2(int, char **) 118 - Kind: LF_FUNC_ID 119 FuncId: 120 ParentScope: 0 121 FunctionType: 4103 # int main2(int, char**) 122 Name: main2 123 # TypeIndex: 4098 (0x1002) 124 # void foo(int, char **) 125 - Kind: LF_FUNC_ID 126 FuncId: 127 ParentScope: 0 128 FunctionType: 4101 # void main2(int, char**) 129 Name: foo 130 # TypeIndex: 4099 (0x1003) 131 # void FooBar::FooMethod2(int) 132 - Kind: LF_MFUNC_ID 133 MemberFuncId: 134 ClassType: 4100 # struct FooBar 135 FunctionType: 4104 # void FooBar::FooMethod2(int) 136 Name: FooMethod2 137 # TypeIndex: 4100 (0x1004) 138 # int main(int, char **) 139 - Kind: LF_FUNC_ID 140 FuncId: 141 ParentScope: 0 142 FunctionType: 4103 # int main(int, char**) 143 Name: main 144