public DebugStructType(IStructType llvmType
                        , NativeModule module
                        , DIScope scope
                        , string name
                        , DIFile file
                        , uint line
                        , DebugInfoFlags debugFlags
                        , DIType derivedFrom
                        , IEnumerable <DIType> elements
                        , uint alignment = 0
                        )
     : base(llvmType)
 {
     module.VerifyArgNotNull(nameof(module));
     DIType = module.DIBuilder
              .CreateStructType(scope
                                , name
                                , file
                                , line
                                , module.Layout.BitSizeOf(llvmType)
                                , alignment
                                , debugFlags
                                , derivedFrom
                                , elements
                                );
 }
Exemple #2
0
 public DebugPointerType(IPointerType llvmPtrType, NativeModule module, DIType elementType, string name = null, uint alignment = 0)
     : base(llvmPtrType)
 {
     module.VerifyArgNotNull(nameof(module));
     DIType = module.DIBuilder
              .CreatePointerType(elementType
                                 , name
                                 , module.Layout.BitSizeOf(llvmPtrType)
                                 , alignment
                                 );
 }
 /// <summary>Constructs a new <see cref="DebugFunctionType"/></summary>
 /// <param name="llvmType">Native LLVM function signature</param>
 /// <param name="module"><see cref="NativeModule"/> to use when construction debug information</param>
 /// <param name="debugFlags"><see cref="DebugInfoFlags"/> for this signature</param>
 /// <param name="retType">Return type for the function</param>
 /// <param name="argTypes">Potentially empty set of argument types for the signature</param>
 public DebugFunctionType(IFunctionType llvmType
                          , NativeModule module
                          , DebugInfoFlags debugFlags
                          , DebugType <ITypeRef, DIType> retType
                          , params DebugType <ITypeRef, DIType>[] argTypes
                          )
     : base(llvmType.VerifyArgNotNull(nameof(llvmType)))
 {
     DIType = module.VerifyArgNotNull(nameof(module))
              .DIBuilder
              .CreateSubroutineType(debugFlags
                                    , retType.VerifyArgNotNull(nameof(retType)).DIType
                                    , argTypes.Select(t => t.DIType)
                                    );
 }
 public DebugStructType(NativeModule module
                        , string nativeName
                        , DIScope scope
                        , string name
                        , DIFile file = null
                        , uint line   = 0
                        )
     : this(module.VerifyArgNotNull(nameof(module)).Context.CreateStructType(nativeName)
            , module
            , scope
            , name
            , file
            , line
            )
 {
 }
 public DebugStructType(IStructType llvmType
                        , NativeModule module
                        , DIScope scope
                        , string name
                        , DIFile file
                        , uint line
                        )
     : base(llvmType)
 {
     DIType = module.VerifyArgNotNull(nameof(module))
              .DIBuilder
              .CreateReplaceableCompositeType(Tag.StructureType
                                              , name
                                              , scope
                                              , file
                                              , line
                                              );
 }
        public DebugStructType(NativeModule module
                               , string nativeName
                               , DIScope scope
                               , string name
                               , DIFile diFile
                               , uint line
                               , DebugInfoFlags debugFlags
                               , IEnumerable <DebugMemberInfo> debugElements
                               , DIType derivedFrom = null
                               , bool packed        = false
                               , uint?bitSize       = null
                               , uint bitAlignment  = 0
                               )
        {
            module.VerifyArgNotNull(nameof(module));
            DebugMembers = new ReadOnlyCollection <DebugMemberInfo>(debugElements as IList <DebugMemberInfo> ?? debugElements.ToList( ));

            NativeType = module.Context.CreateStructType(nativeName, packed, debugElements.Select(e => e.DebugType).ToArray( ));
            DIType     = module.DIBuilder.CreateReplaceableCompositeType(Tag.StructureType
                                                                         , name
                                                                         , scope
                                                                         , diFile
                                                                         , line
                                                                         );

            var memberTypes = from memberInfo in DebugMembers
                              select CreateMemberType(module, memberInfo);

            var concreteType = module.DIBuilder.CreateStructType(scope: scope
                                                                 , name: name
                                                                 , file: diFile
                                                                 , line: line
                                                                 , bitSize: bitSize ?? module.Layout.BitSizeOf(NativeType)
                                                                 , bitAlign: bitAlignment
                                                                 , debugFlags: debugFlags
                                                                 , derivedFrom: derivedFrom
                                                                 , elements: memberTypes
                                                                 );

            // assignment performs RAUW
            DIType = concreteType;
        }