<?xml version="1.0"?>
<def format="2">
  <!-- Python C API. see https://docs.python.org/2/c-api/index.html -->
  <!-- Those are macros, but it's helpful to declare a function here -->
  <function name="Py_INCREF,Py_IncRef,Py_DECREF,Py_DecRef">
    <leak-ignore/>
    <noreturn>false</noreturn>
    <returnValue type="void"/>
    <arg nr="1">
      <not-null/>
      <not-uninit/>
    </arg>
  </function>
  <!-- Those are macros, but it's helpful to declare a function here -->
  <function name="Py_XINCREF,Py_XDECREF">
    <leak-ignore/>
    <noreturn>false</noreturn>
    <returnValue type="void"/>
    <arg nr="1">
      <not-uninit/>
    </arg>
  </function>
  <function name="Py_Initialize,Py_Finalize">
    <noreturn>false</noreturn>
    <returnValue type="void"/>
  </function>
  <function name="Py_InitializeEx">
    <noreturn>false</noreturn>
    <returnValue type="void"/>
    <arg nr="1">
      <not-bool/>
      <not-uninit/>
    </arg>
  </function>
  <function name="Py_IsInitialized">
    <noreturn>false</noreturn>
    <pure/>
    <returnValue type="int"/>
    <use-retval/>
  </function>
  <function name="Py_Main">
    <leak-ignore/>
    <returnValue type="int"/>
    <arg nr="1">
      <not-uninit/>
      <valid>0:</valid>
    </arg>
    <arg nr="2">
      <not-uninit/>
    </arg>
  </function>
  <function name="Py_SetProgramName,Py_SetPythonHome">
    <leak-ignore/>
    <noreturn>false</noreturn>
    <returnValue type="void"/>
    <arg nr="1">
      <not-null/>
      <not-uninit/>
      <strz/>
    </arg>
  </function>
  <function name="PyErr_Clear">
    <noreturn>false</noreturn>
    <returnValue type="void"/>
  </function>
  <function name="PyErr_SetObject">
    <leak-ignore/>
    <noreturn>false</noreturn>
    <returnValue type="void"/>
    <arg nr="1">
      <not-null/>
      <not-uninit/>
    </arg>
    <arg nr="2">
      <not-null/>
      <not-uninit/>
    </arg>
  </function>
  <!-- void PyErr_SetString(PyObject *type, const char *message) -->
  <function name="PyErr_SetString">
    <leak-ignore/>
    <noreturn>false</noreturn>
    <returnValue type="void"/>
    <arg nr="1">
      <not-uninit/>
    </arg>
    <arg nr="2">
      <strz/>
      <not-null/>
      <not-uninit/>
    </arg>
  </function>
  <function name="Py_GetProgramName,Py_GetExecPrefix,Py_GetProgramFullPath,Py_GetPath,Py_GetPythonHome">
    <noreturn>false</noreturn>
    <returnValue type="char *"/>
    <pure/>
    <use-retval/>
  </function>
  <function name="Py_GetVersion,Py_GetPlatform,Py_GetCopyright,Py_GetCompiler,Py_GetBuildInfo">
    <noreturn>false</noreturn>
    <returnValue type="const char *"/>
    <pure/>
    <use-retval/>
  </function>
  <!-- Deprecated DL_IMPORT and DL_EXPORT macros -->
  <define name="DL_IMPORT(RTYPE)" value="RTYPE"/>
  <define name="DL_EXPORT(RTYPE)" value="RTYPE"/>
</def>
