"""
Auto-generated Python stub file from llvmlite.__types.py
Module: llvmlite.__types
"""


import t, c
from stdint import *
import viperlib
import string
import memhub
from linkedlist import GSListNode

@t.NoVTable
class ParamNode(GSListNode[ParamNode]):
    Ty: t.CVoid | t.CPtr
class LLVMType(t.REnum):
    class Int:
        Bits: t.CInt
    class Ptr:
        Pointee: LLVMType | t.CPtr
    class Func:
        Ret: LLVMType | t.CPtr
        Params: ParamNode | t.CPtr
        PCount: t.CInt
    class Array:
        ElemTy: LLVMType | t.CPtr
        Count: t.CInt
    class Struct:
        Fields: ParamNode | t.CPtr
        FCount: t.CInt
        Name: t.CChar | t.CPtr
    class Float:
        Bits: t.CInt
    class Void:
        pass
    class Label:
        pass
    class Metadata:
        pass

def _new_type(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Int1(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Int8(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Int16(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Int32(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Int64(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Ptr(pool: memhub.MemBuddy | t.CPtr, pointee: LLVMType | t.CPtr) -> LLVMType | t.CPtr: pass

def Func(pool: memhub.MemBuddy | t.CPtr, ret: LLVMType | t.CPtr, params: ParamNode | t.CPtr, count: t.CInt) -> LLVMType | t.CPtr: pass

def Void(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Array(pool: memhub.MemBuddy | t.CPtr, elem_ty: LLVMType | t.CPtr, count: t.CInt) -> LLVMType | t.CPtr: pass

def Struct(pool: memhub.MemBuddy | t.CPtr, fields: ParamNode | t.CPtr, fcount: t.CInt, name: t.CChar | t.CPtr) -> LLVMType | t.CPtr: pass

def Half(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Float(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Double(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def FP128(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass

def Label(pool: memhub.MemBuddy | t.CPtr) -> LLVMType | t.CPtr: pass


PNODE_SIZE: t.CDefine = 16

def new_param_node(pool: memhub.MemBuddy | t.CPtr, ty: LLVMType | t.CPtr) -> ParamNode | t.CPtr: pass

def param_list_append(head: ParamNode | t.CPtr, tail: ParamNode | t.CPtr, node: ParamNode | t.CPtr) -> ParamNode | t.CPtr: pass

def paramnode_get_ty(node: ParamNode | t.CPtr) -> LLVMType | t.CPtr: pass

def paramnode_get_next(node: ParamNode | t.CPtr) -> ParamNode | t.CPtr: pass

def paramnode_set_ty(node: ParamNode | t.CPtr, ty: LLVMType | t.CPtr) -> t.CInt: pass

def paramnode_set_next(node: ParamNode | t.CPtr, nxt: ParamNode | t.CPtr) -> t.CInt: pass


@t.NoVTable
class LLVMTypeCore:
    Pool: memhub.MemBuddy | t.CPtr
    def __init__(self: LLVMTypeCore, pool: memhub.MemBuddy | t.CPtr) -> t.CInt: pass
    def Int1(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Int8(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Int16(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Int32(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Int64(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Ptr(self: LLVMTypeCore, pointee: LLVMType | t.CPtr) -> LLVMType | t.CPtr: pass
    def Func(self: LLVMTypeCore, ret: LLVMType | t.CPtr, params: ParamNode | t.CPtr, count: t.CInt) -> LLVMType | t.CPtr: pass
    def Array(self: LLVMTypeCore, elem_ty: LLVMType | t.CPtr, count: t.CInt) -> LLVMType | t.CPtr: pass
    def Struct(self: LLVMTypeCore, fields: ParamNode | t.CPtr, fcount: t.CInt, name: t.CChar | t.CPtr) -> LLVMType | t.CPtr: pass
    def Void(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Half(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Float(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Double(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def FP128(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def Label(self: LLVMTypeCore) -> LLVMType | t.CPtr: pass
    def NewParamNode(self: LLVMTypeCore, ty: LLVMType | t.CPtr) -> ParamNode | t.CPtr: pass
    def ParamListAppend(self: LLVMTypeCore, head: ParamNode | t.CPtr, tail: ParamNode | t.CPtr, node: ParamNode | t.CPtr) -> ParamNode | t.CPtr: pass
    def PrintType(self: LLVMTypeCore, buf: t.CChar | t.CPtr, size: t.CSizeT, ty: LLVMType | t.CPtr) -> t.CInt: pass

def TypePrint(buf: t.CChar | t.CPtr, size: t.CSizeT, ty: LLVMType | t.CPtr, pool: memhub.MemBuddy | t.CPtr) -> t.CInt: pass

def _strappend(dst: t.CChar | t.CPtr, dst_size: t.CSizeT, src: t.CChar | t.CPtr) -> t.CInt: pass

def _print_struct_body(buf: t.CChar | t.CPtr, size: t.CSizeT, fields: ParamNode | t.CPtr, pool: memhub.MemBuddy | t.CPtr) -> t.CInt: pass

def PrintStructDefinition(buf: t.CChar | t.CPtr, size: t.CSizeT, ty: LLVMType | t.CPtr, pool: memhub.MemBuddy | t.CPtr) -> t.CInt: pass

def get_struct_name(ty: LLVMType | t.CPtr) -> t.CChar | t.CPtr: pass
