Changeset 37

Show
Ignore:
Timestamp:
07/26/04 08:49:01 (4 years ago)
Author:
aldacron
Message:

*[DerelictPY] started filling out python.d, which had previously been empty
*[DerelictPY] updated several existing modules to include *_Type variables (such as PyInt?_Type in intobject.d)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/DerelictPY/derelict/python/boolobject.d

    r36 r37  
    99typedef PyIntObject PyBoolObject; 
    1010 
    11 /* 
    12  TODO Figure out how to handle this: 
    13 PyAPI_DATA(PyIntObject) _Py_ZeroStruct, _Py_TrueStruct; 
    14 #define Py_False ((PyObject *) &_Py_ZeroStruct) 
    15 #define Py_True ((PyObject *) &_Py_TrueStruct) 
    16 */ 
     11PyObject* Py_False; 
     12PyObject* Py_True; 
     13 
     14PyTypeObject* PyBool_Type; 
    1715 
    1816//============================================================================== 
  • trunk/DerelictPY/derelict/python/bufferobject.d

    r36 r37  
    77//============================================================================== 
    88const int Py_END_OF_BUFFER          = -1; 
     9 
     10PyTypeObject* PyBuffer_Type; 
    911 
    1012//============================================================================== 
  • trunk/DerelictPY/derelict/python/complexobject.d

    r33 r37  
    2121    Py_complex cval; 
    2222} 
     23 
     24PyTypeObject* PyComplex_Type; 
    2325 
    2426} // extern(C) 
  • trunk/DerelictPY/derelict/python/descrobject.d

    r36 r37  
    7272} 
    7373 
     74PyTypeObject* PyWrapperDescr_Type; 
     75PyTypeObject* PyProperty_Type; 
     76 
    7477//============================================================================== 
    7578// MACROS 
  • trunk/DerelictPY/derelict/python/floatobject.d

    r33 r37  
    66// TYPES 
    77//============================================================================== 
    8 extern(C) 
    9 { 
    10      
    118struct PyFloatObject 
    129{ 
     
    1613} 
    1714 
    18 } // extern(C) 
     15PyTypeObject* PyFloat_Type; 
    1916 
    2017//============================================================================== 
  • trunk/DerelictPY/derelict/python/intobject.d

    r34 r37  
    77// TYPES 
    88//============================================================================== 
    9 extern(C) 
    10 { 
    11  
    129struct PyIntObject 
    1310{ 
     
    1714} 
    1815 
    19 } // extern(C) 
     16PyTypeObject* PyInt_Type; 
    2017 
    2118//============================================================================== 
  • trunk/DerelictPY/derelict/python/python.d

    r33 r37  
    22 
    33 
     4import derelict.python.boolobject; 
     5import derelict.python.bufferobject; 
     6import derelict.python.complexobject; 
     7import derelict.python.descrobject; 
     8import derelict.python.floatobject; 
     9import derelict.python.intobject; 
     10import derelict.python.longintrepr; 
     11import derelict.python.longobject; 
     12import derelict.python.methodobject; 
     13import derelict.python.object; 
     14import derelict.python.unicodeobject; 
    415 
    516 
     17private import std.loader; 
    618 
     19private HXModule hpy; 
    720 
     21private void* getProc(char[] procname) 
     22{ 
     23    void *symbol = ExeModule_GetSymbol(hpy, procname); 
     24    if(null == symbol) 
     25        throw new Exception("Failed to load python proc address " ~ procname); 
     26    return symbol; 
     27} 
    828 
     29private void load() 
     30{ 
     31    // boolobject.d 
     32    Py_False = cast(PyObject*)getProc("_Py_ZeroStruct"); 
     33    Py_True = cast(PyObject*)getProc("_Py_TrueStruct"); 
     34    PyBool_Type = cast(PyTypeObject*)getProc("PyBool_Type"); 
     35    PyBoolFromLong = cast(pfPyBool_FromLong)getProc("PyBool_FromLong"); 
     36    // bufferobject.d 
     37    PyBuffer_Type = cast(PyTypeObject*)getProc("PyBuffer_Type"); 
     38    PyBuffer_FromObject = cast(pfPyBuffer_FromObject)getProc("PyBuffer_FromObject"); 
     39    PyBuffer_FromReadWriteObject = cast(pfPyBuffer_FromReadWriteObject)getProc("PyBuffer_FromReadWriteObject"); 
     40    PyBuffer_FromMemory = cast(pfPyBuffer_FromMemory)getProc("PyBuffer_FromMemory"); 
     41    PyBuffer_FromReadWriteMemory = cast(pfPyBuffer_FromReadWriteMemory)getProc("PyBuffer_FromReadWriteMemory"); 
     42    PyBuffer_New = cast(pfPyBuffer_New)getProc("PyBuffer_New"); 
     43    // complexobject.d 
     44    PyComplex_Type = cast(PyTypeObject*)getProc("PyComplex_Type"); 
     45    PyComplex_FromCComplex = cast(pfPyComplex_FromCComplex)getProc("PyComplex_FromCComplex"); 
     46    PyComplex_FromDoubles = cast(pfPyComplex_FromDoubles)getProc("PyComplex_FromDoubles"); 
     47    PyComplex_RealAsDouble = cast(pfPyComplex_RealAsDouble)getProc("PyComplex_RealAsDouble"); 
     48    PyComplex_ImagAsDouble = cast(pfPyComplex_ImagAsDouble)getProc("PyComplex_ImagAsDouble"); 
     49    PyComplex_AsCComplex = cast(pfPyComplex_AsCComplex)getProc("PyComplex_AsCComplex"); 
     50    c_sum = cast(pfc_sum)getProc("_Py_c_sum"); 
     51    c_diff = cast(pfc_diff)getProc("_Py_c_diff"); 
     52    c_neg = cast(pfc_neg)getProc("_Py_c_neg); 
     53    c_prod = cast(pfc_prod)getProc("_Py_c_prod"); 
     54    c_quot = cast(pfc_quot)getProc("_Py_c_quot"); 
     55    c_pow = cast(pfc_pow)getProc("_Py_c_pow"); 
     56    // descrobject.d 
     57    PyWrapperDescr_Type = cast(PyTypeObject*)getProc("PyWrapperDescr_Type"); 
     58    PyProperty_Type = cast(PyTypeObject*)getProc("PyProperty_Type"); 
     59    PyDescr_NewMethod = cast(pfPyDescr_NewMethod)getProc("PyDescr_NewMethod"); 
     60    PyDescr_NewClassMethod = cast(pfPyDescr_NewMethod)getProc("PyDescr_NewMethod"); 
     61    PyDescr_NewMember = cast(pfPyDescr_NewMember)getProc("PyDescr_NewMember"); 
     62    PyDescr_NewGetSet = cast(pfPyDescr_NewGetSet)getProc("PyDescr_NewGetSet"); 
     63    PyDescr_NewWrapper = cast(pfPyDescr_NewWrapper)getProc("PyDescr_NewWrapper"); 
     64    PyDictProxy_New = cast(pfPyDictProxy_New)getProc("PyDictProxy_New"); 
     65    PyWrapper_New = cast(pfPyWrapper_New)getProc("PyWrapper_New"); 
     66    // floatobject.d 
     67    PyFloat_Type = cast(PyTypeObject*)getProc("PyFloat_Type"); 
     68    PyFloat_FromString = cast(pfPyFloat_FromString)getProc("PyFloat_FromString"); 
     69    PyFloat_FromDouble = cast(pfPyFloat_FromDouble)getProc("PyFloat_FromDouble"); 
     70    PyFloat_AsDouble = cast(pfPyFloat_AsDouble)getProc("PyFloat_AsDouble"); 
     71    PyFloat_AsReprString = cast(pfPyFloat_AsReprString)getProc("PyFloat_AsReprString"); 
     72    PyFloat_AsString = cast(pfPyFloat_AsString)getProc("PyFloat_AsString"); 
     73    _PyFloat_Pack4 = cast(pf_PyFloat_Pack4)getProc("_PyFloat_Pack4"); 
     74    _PyFloat_Pack8 = cast(pf_PyFloat_Pack8)getProc("_PyFloat_Pack8"); 
     75    _PyFloat_Unpack4 = cast(pf_PyFloat_Unpack4)getProc("_PyFloat_Unpack4"); 
     76    _PyFloat_Unpack8 = cast(pf_PyFloat_Unpack8)getProc("_PyFloat_Unpack8"); 
     77    // intobject.d 
     78    PyInt_Type = cast(PyTypeObject*)getProc("PyInt_Type"); 
     79    PyInt_FromString = cast(pfPyInt_FromString)getProc("PyInt_FromString"); 
     80    PyInt_FromUnicode = cast(pfPyInt_FromUnicode)getProc("PyInt_FromUnicode"); 
     81    PyInt_FromLong = cast(pfPyInt_FromLong)getProc("PyInt_FromLong"); 
     82    PyInt_AsLong = cast(pfPyInt_AsLong)getProc("PyInt_AsLong"); 
     83    PyInt_AsUnsignedLongMask = cast(pfPyInt_AsUnsignedLongMask)getProc("PyInt_AsUnsignedLongMask"); 
     84    PyInt_AsUnsignedLongLongMask = cast(pfPyInt_AsUnsignedLongLongMask)getProc("PyInt_AsUnsignedLongLongMask"); 
     85    PyInt_GetMax = cast(pfPyInt_GetMax)getProc("PyInt_GetMax"); 
     86    PyOS_strtoul = cast(pfPyOS_strtoul)getProc("PyOS_strtoul"); 
     87    PyOS_strtol = cast(pfPyOS_strtol)getProc("PyOS_strtol"); 
     88} 
    989 
     90public void DerelictPY_Load() 
     91{ 
     92    if(hpy !== null) 
     93        return; 
     94         
     95    version(Windows) 
     96        hpy = ExeModule_Load("python23.dll"); 
     97         
     98    load();  
     99} 
     100 
     101static this() 
     102{ 
     103    ExeModule_Init(); 
     104} 
     105 
     106static ~this() 
     107{ 
     108    ExeModule_Release(hpy); 
     109    ExeModule_Uninit(); 
     110}