# 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
