# In file 1 we set up some basic types and IDs to refer to them. In this file
# we will set up the same types. For some of them we will make them identical
# but re-order the records in the file to make sure they have different type
# indices and appear in different orders. In other cases we will make slight
# adjustments to the types, to ensure that they do not get merged in.
#
# For easy understanding, a semantic representation of the types we will set up
# is as follows:
# - int main(int, char**) // This record should share an LF_PROCEDURE and id
# // record with corresponding function from the
# // first file.
# - int main2(int, char**) // This record should share the LF_PROCEDURE
# // record but have a unique id record.
# - void foo(int, char**) // This record should have a unique LF_PROCEDURE
# // record, but the LF_ARGLIST record internally
# // should be shared.
#
# - struct FooBar { // Because the type of this record exactly matches
# // the corresponding file, its entire type record
# // hierarchy should be shared.
# public:
# void *FooMember;
# void FooMethod2(int); // Note that the *type* of this member should be
# // the same as the type of the record from the
# // first stream. But since it has a different
# // name, it will not share an id record.
# };
TpiStream:
Records:
# TypeIndex: 4096 (0x1000)
# (int)
- Kind: LF_ARGLIST
ArgList:
ArgIndices: [ 116 ]
# TypeIndex: 4097 (0x1001)
# public void *FooMember
- Kind: LF_FIELDLIST
FieldList:
- Kind: LF_MEMBER
DataMember:
Attrs: 3 # public
Type: 1027 # void*
FieldOffset: 0
Name: FooMember # FooMember
# TypeIndex: 4098 (0x1002)
# char**
- Kind: LF_POINTER
Pointer:
ReferentType: 1136
Attrs: 32778
# TypeIndex: 4099 (0x1003)
# (int, char**)
- Kind: LF_ARGLIST
ArgList:
ArgIndices: [ 116, 4098 ]
# TypeIndex: 4100 (0x1004)
# struct FooBar {
# public:
# void *FooMember;
# };
- Kind: LF_STRUCTURE
Class:
MemberCount: 1
Options: [ None, HasUniqueName ]
FieldList: 4097
Name: FooBar
UniqueName: 'FooBar'
DerivationList: 0
VTableShape: 0
Size: 4
# TypeIndex: 4101 (0x1005)
# void (int, char**)
- Kind: LF_PROCEDURE
Procedure:
ReturnType: 3 # void
CallConv: NearC
Options: [ None ]
ParameterCount: 2
ArgumentList: 4099 # (int, char**)
# TypeIndex: 4102 (0x1006)
# FooBar *
- Kind: LF_POINTER
Pointer:
ReferentType: 4100 # FooBar
Attrs: 32778
# TypeIndex: 4103 (0x1007)
# int (int, char**)
- Kind: LF_PROCEDURE
Procedure:
ReturnType: 116 # int
CallConv: NearC
Options: [ None ]
ParameterCount: 2
ArgumentList: 4099 # (int, char**)
# TypeIndex: 4104 (0x1008)
- Kind: LF_MFUNCTION
MemberFunction:
ReturnType: 3 # void
ClassType: 4100 # struct FooBar
ThisType: 4102 # FooBar *
CallConv: ThisCall
Options: [ None, Constructor ]
ParameterCount: 1
ArgumentList: 4096 # (int)
ThisPointerAdjustment: 0
IpiStream:
Records:
# TypeIndex: 4096 (0x1000)
# struct FooBar
- Kind: LF_UDT_MOD_SRC_LINE
UdtModSourceLine:
UDT: 4100 # struct FooBar
SourceFile: 0 # We don't support this yet
LineNumber: 0
Module: 0 # We don't support this yet
# TypeIndex: 4097 (0x1001)
# int main2(int, char **)
- Kind: LF_FUNC_ID
FuncId:
ParentScope: 0
FunctionType: 4103 # int main2(int, char**)
Name: main2
# TypeIndex: 4098 (0x1002)
# void foo(int, char **)
- Kind: LF_FUNC_ID
FuncId:
ParentScope: 0
FunctionType: 4101 # void main2(int, char**)
Name: foo
# TypeIndex: 4099 (0x1003)
# void FooBar::FooMethod2(int)
- Kind: LF_MFUNC_ID
MemberFuncId:
ClassType: 4100 # struct FooBar
FunctionType: 4104 # void FooBar::FooMethod2(int)
Name: FooMethod2
# TypeIndex: 4100 (0x1004)
# int main(int, char **)
- Kind: LF_FUNC_ID
FuncId:
ParentScope: 0
FunctionType: 4103 # int main(int, char**)
Name: main