1 # The idea is to set up some types in the TPI stream, and then have records in
2 # the IPI stream that refer to them. There are three types of IPI records that
3 # can refer to TPI records. They are:
4 # 1) LF_PROCEDURE - Referred to by LF_FUNC_ID
5 # 2) LF_STRUCTURE - Referred to by LF_UDT_MOD_SRC_LINE
6 # Referred to by LF_UDT_SRC_LINE
7 # 3) LF_MFUNCTION - Referred to by LF_MFUNC_ID
8 # We will set up one of each of these, and then create IPI records that refer to
9 # them. We intentionally choose an unintuitive ordering of the records in both
10 # streams (while still maintaining the topological sorting required by CodeView
11 # type streams), to make sure the merging algorithm is sufficiently exercised.
12 # For easy understanding, a semantic representation of the types we will set up
14 # - int main(int, char**)
19 # void FooMethod(int);
23 # TypeIndex: 4096 (0x1000)
29 # TypeIndex: 4097 (0x1001)
30 # public void *FooMember
38 Name: FooMember # FooMember
39 # TypeIndex: 4098 (0x1002)
43 ArgIndices: [ 116, 4096 ]
44 # TypeIndex: 4099 (0x1003)
52 Options: [ None, HasUniqueName ]
59 # TypeIndex: 4100 (0x1004)
63 ReferentType: 4099 # FooBar
65 # TypeIndex: 4101 (0x1005)
70 # TypeIndex: 4102 (0x1006)
74 ClassType: 4099 # struct FooBar
75 ThisType: 4100 # FooBar *
77 Options: [ None, Constructor ]
79 ArgumentList: 4101 # (int)
80 ThisPointerAdjustment: 0
81 # TypeIndex: 4103 (0x1007)
89 ArgumentList: 4098 # (int, char**)
92 # TypeIndex: 4096 (0x1000)
93 # int main(int, char **)
97 FunctionType: 4103 # int main(int, char**)
99 # TypeIndex: 4097 (0x1001)
100 # void FooBar::FooMethod(int)
103 ClassType: 4099 # struct FooBar
104 FunctionType: 4102 # void FooMethod(int)
106 # TypeIndex: 4098 (0x1002)
108 - Kind: LF_UDT_MOD_SRC_LINE
110 UDT: 4099 # struct FooBar
111 SourceFile: 0 # We don't support this yet
113 Module: 0 # We don't support this yet