1 /* vi:set ts=8 sts=4 sw=4 noet: 2 * 3 * VIM - Vi IMproved by Bram Moolenaar 4 * 5 * Do ":help uganda" in Vim to read copying and usage conditions. 6 * Do ":help credits" in Vim to see a list of people who contributed. 7 * See README.txt for an overview of the Vim source code. 8 */ 9 /* 10 * Python extensions by Paul Moore. 11 * Changes for Unix by David Leonard. 12 * 13 * This consists of four parts: 14 * 1. Python interpreter main program 15 * 2. Python output stream: writes output via [e]msg(). 16 * 3. Implementation of the Vim module for Python 17 * 4. Utility functions for handling the interface between Vim and Python. 18 */ 19 20 #include "vim.h" 21 22 #include <limits.h> 23 24 /* uncomment this if used with the debug version of python. 25 * Checked on 2.7.4. */ 26 /* #define Py_DEBUG */ 27 /* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting 28 */ 29 /* uncomment this if used with the debug version of python, but without its 30 * allocator */ 31 /* #define Py_DEBUG_NO_PYMALLOC */ 32 33 /* Python.h defines _POSIX_THREADS itself (if needed) */ 34 #ifdef _POSIX_THREADS 35 # undef _POSIX_THREADS 36 #endif 37 38 #if defined(_WIN32) && defined(HAVE_FCNTL_H) 39 # undef HAVE_FCNTL_H 40 #endif 41 42 #ifdef _DEBUG 43 # undef _DEBUG 44 #endif 45 46 #ifdef HAVE_STDARG_H 47 # undef HAVE_STDARG_H /* Python's config.h defines it as well. */ 48 #endif 49 #ifdef _POSIX_C_SOURCE 50 # undef _POSIX_C_SOURCE /* pyconfig.h defines it as well. */ 51 #endif 52 #ifdef _XOPEN_SOURCE 53 # undef _XOPEN_SOURCE /* pyconfig.h defines it as well. */ 54 #endif 55 56 #define PY_SSIZE_T_CLEAN 57 58 #include <Python.h> 59 60 #if !defined(PY_VERSION_HEX) || PY_VERSION_HEX < 0x02050000 61 # undef PY_SSIZE_T_CLEAN 62 #endif 63 64 #if defined(MACOS) && !defined(MACOS_X_UNIX) 65 # include "macglue.h" 66 # include <CodeFragments.h> 67 #endif 68 #undef main /* Defined in python.h - aargh */ 69 #undef HAVE_FCNTL_H /* Clash with os_win32.h */ 70 71 #define PyBytes_FromString PyString_FromString 72 #define PyBytes_Check PyString_Check 73 #define PyBytes_AsStringAndSize PyString_AsStringAndSize 74 75 #if !defined(FEAT_PYTHON) && defined(PROTO) 76 /* Use this to be able to generate prototypes without python being used. */ 77 # define PyObject Py_ssize_t 78 # define PyThreadState Py_ssize_t 79 # define PyTypeObject Py_ssize_t 80 struct PyMethodDef { Py_ssize_t a; }; 81 # define PySequenceMethods Py_ssize_t 82 #endif 83 84 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 85 # define PY_USE_CAPSULE 86 #endif 87 88 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 89 # define PyInt Py_ssize_t 90 # define PyInquiry lenfunc 91 # define PyIntArgFunc ssizeargfunc 92 # define PyIntIntArgFunc ssizessizeargfunc 93 # define PyIntObjArgProc ssizeobjargproc 94 # define PyIntIntObjArgProc ssizessizeobjargproc 95 # define Py_ssize_t_fmt "n" 96 #else 97 # define PyInt int 98 # define lenfunc inquiry 99 # define PyInquiry inquiry 100 # define PyIntArgFunc intargfunc 101 # define PyIntIntArgFunc intintargfunc 102 # define PyIntObjArgProc intobjargproc 103 # define PyIntIntObjArgProc intintobjargproc 104 # define Py_ssize_t_fmt "i" 105 #endif 106 #define Py_bytes_fmt "s" 107 108 /* Parser flags */ 109 #define single_input 256 110 #define file_input 257 111 #define eval_input 258 112 113 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x020300F0 114 /* Python 2.3: can invoke ":python" recursively. */ 115 # define PY_CAN_RECURSE 116 #endif 117 118 # if defined(DYNAMIC_PYTHON) || defined(PROTO) 119 # ifndef DYNAMIC_PYTHON 120 # define HINSTANCE long_u /* for generating prototypes */ 121 # endif 122 123 # ifndef WIN3264 124 # include <dlfcn.h> 125 # define FARPROC void* 126 # define HINSTANCE void* 127 # if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL) 128 # define load_dll(n) dlopen((n), RTLD_LAZY) 129 # else 130 # define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL) 131 # endif 132 # define close_dll dlclose 133 # define symbol_from_dll dlsym 134 # else 135 # define load_dll vimLoadLib 136 # define close_dll FreeLibrary 137 # define symbol_from_dll GetProcAddress 138 # endif 139 140 /* This makes if_python.c compile without warnings against Python 2.5 141 * on Win32 and Win64. */ 142 # undef PyRun_SimpleString 143 # undef PyRun_String 144 # undef PyArg_Parse 145 # undef PyArg_ParseTuple 146 # undef Py_BuildValue 147 # undef Py_InitModule4 148 # undef Py_InitModule4_64 149 # undef PyObject_CallMethod 150 # undef PyObject_CallFunction 151 152 /* 153 * Wrapper defines 154 */ 155 # define PyArg_Parse dll_PyArg_Parse 156 # define PyArg_ParseTuple dll_PyArg_ParseTuple 157 # define PyMem_Free dll_PyMem_Free 158 # define PyMem_Malloc dll_PyMem_Malloc 159 # define PyDict_SetItemString dll_PyDict_SetItemString 160 # define PyErr_BadArgument dll_PyErr_BadArgument 161 # define PyErr_NewException dll_PyErr_NewException 162 # define PyErr_Clear dll_PyErr_Clear 163 # define PyErr_Format dll_PyErr_Format 164 # define PyErr_PrintEx dll_PyErr_PrintEx 165 # define PyErr_NoMemory dll_PyErr_NoMemory 166 # define PyErr_Occurred dll_PyErr_Occurred 167 # define PyErr_SetNone dll_PyErr_SetNone 168 # define PyErr_SetString dll_PyErr_SetString 169 # define PyErr_SetObject dll_PyErr_SetObject 170 # define PyErr_ExceptionMatches dll_PyErr_ExceptionMatches 171 # define PyEval_InitThreads dll_PyEval_InitThreads 172 # define PyEval_RestoreThread dll_PyEval_RestoreThread 173 # define PyEval_SaveThread dll_PyEval_SaveThread 174 # ifdef PY_CAN_RECURSE 175 # define PyGILState_Ensure dll_PyGILState_Ensure 176 # define PyGILState_Release dll_PyGILState_Release 177 # endif 178 # define PyInt_AsLong dll_PyInt_AsLong 179 # define PyInt_FromLong dll_PyInt_FromLong 180 # define PyLong_AsLong dll_PyLong_AsLong 181 # define PyLong_FromLong dll_PyLong_FromLong 182 # define PyBool_Type (*dll_PyBool_Type) 183 # define PyInt_Type (*dll_PyInt_Type) 184 # define PyLong_Type (*dll_PyLong_Type) 185 # define PyList_GetItem dll_PyList_GetItem 186 # define PyList_Append dll_PyList_Append 187 # define PyList_Insert dll_PyList_Insert 188 # define PyList_New dll_PyList_New 189 # define PyList_SetItem dll_PyList_SetItem 190 # define PyList_Size dll_PyList_Size 191 # define PyList_Type (*dll_PyList_Type) 192 # define PySequence_Check dll_PySequence_Check 193 # define PySequence_Size dll_PySequence_Size 194 # define PySequence_GetItem dll_PySequence_GetItem 195 # define PySequence_Fast dll_PySequence_Fast 196 # define PyTuple_Size dll_PyTuple_Size 197 # define PyTuple_GetItem dll_PyTuple_GetItem 198 # define PyTuple_Type (*dll_PyTuple_Type) 199 # define PySlice_GetIndicesEx dll_PySlice_GetIndicesEx 200 # define PyImport_ImportModule dll_PyImport_ImportModule 201 # define PyDict_New dll_PyDict_New 202 # define PyDict_GetItemString dll_PyDict_GetItemString 203 # define PyDict_Next dll_PyDict_Next 204 # define PyDict_Type (*dll_PyDict_Type) 205 # ifdef PyMapping_Keys 206 # define PY_NO_MAPPING_KEYS 207 # else 208 # define PyMapping_Keys dll_PyMapping_Keys 209 # endif 210 # define PyObject_GetItem dll_PyObject_GetItem 211 # define PyObject_CallMethod dll_PyObject_CallMethod 212 # define PyMapping_Check dll_PyMapping_Check 213 # define PyIter_Next dll_PyIter_Next 214 # define PyModule_GetDict dll_PyModule_GetDict 215 # define PyModule_AddObject dll_PyModule_AddObject 216 # define PyRun_SimpleString dll_PyRun_SimpleString 217 # define PyRun_String dll_PyRun_String 218 # define PyObject_GetAttrString dll_PyObject_GetAttrString 219 # define PyObject_HasAttrString dll_PyObject_HasAttrString 220 # define PyObject_SetAttrString dll_PyObject_SetAttrString 221 # define PyObject_CallFunctionObjArgs dll_PyObject_CallFunctionObjArgs 222 # define PyObject_CallFunction dll_PyObject_CallFunction 223 # define PyObject_Call dll_PyObject_Call 224 # define PyObject_Repr dll_PyObject_Repr 225 # define PyString_AsString dll_PyString_AsString 226 # define PyString_AsStringAndSize dll_PyString_AsStringAndSize 227 # define PyString_FromString dll_PyString_FromString 228 # define PyString_FromFormat dll_PyString_FromFormat 229 # define PyString_FromStringAndSize dll_PyString_FromStringAndSize 230 # define PyString_Size dll_PyString_Size 231 # define PyString_Type (*dll_PyString_Type) 232 # define PyUnicode_Type (*dll_PyUnicode_Type) 233 # undef PyUnicode_AsEncodedString 234 # define PyUnicode_AsEncodedString py_PyUnicode_AsEncodedString 235 # define PyFloat_AsDouble dll_PyFloat_AsDouble 236 # define PyFloat_FromDouble dll_PyFloat_FromDouble 237 # define PyFloat_Type (*dll_PyFloat_Type) 238 # define PyNumber_Check dll_PyNumber_Check 239 # define PyNumber_Long dll_PyNumber_Long 240 # define PyImport_AddModule (*dll_PyImport_AddModule) 241 # define PySys_SetObject dll_PySys_SetObject 242 # define PySys_GetObject dll_PySys_GetObject 243 # define PySys_SetArgv dll_PySys_SetArgv 244 # define PyType_Type (*dll_PyType_Type) 245 # define PySlice_Type (*dll_PySlice_Type) 246 # define PyType_Ready (*dll_PyType_Ready) 247 # define PyType_GenericAlloc dll_PyType_GenericAlloc 248 # define Py_BuildValue dll_Py_BuildValue 249 # define Py_FindMethod dll_Py_FindMethod 250 # define Py_InitModule4 dll_Py_InitModule4 251 # define Py_SetPythonHome dll_Py_SetPythonHome 252 # define Py_Initialize dll_Py_Initialize 253 # define Py_Finalize dll_Py_Finalize 254 # define Py_IsInitialized dll_Py_IsInitialized 255 # define _PyObject_New dll__PyObject_New 256 # define _PyObject_GC_New dll__PyObject_GC_New 257 # ifdef PyObject_GC_Del 258 # define Py_underscore_GC 259 # define _PyObject_GC_Del dll__PyObject_GC_Del 260 # define _PyObject_GC_UnTrack dll__PyObject_GC_UnTrack 261 # else 262 # define PyObject_GC_Del dll_PyObject_GC_Del 263 # define PyObject_GC_UnTrack dll_PyObject_GC_UnTrack 264 # endif 265 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 266 # define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented) 267 # endif 268 # define _Py_NoneStruct (*dll__Py_NoneStruct) 269 # define _Py_ZeroStruct (*dll__Py_ZeroStruct) 270 # define _Py_TrueStruct (*dll__Py_TrueStruct) 271 # define PyObject_Init dll__PyObject_Init 272 # define PyObject_GetIter dll_PyObject_GetIter 273 # define PyObject_IsTrue dll_PyObject_IsTrue 274 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 275 # define PyType_IsSubtype dll_PyType_IsSubtype 276 # ifdef Py_DEBUG 277 # define _Py_NegativeRefcount dll__Py_NegativeRefcount 278 # define _Py_RefTotal (*dll__Py_RefTotal) 279 # define _Py_Dealloc dll__Py_Dealloc 280 # endif 281 # endif 282 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000 283 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) 284 # define _PyObject_DebugMalloc dll__PyObject_DebugMalloc 285 # define _PyObject_DebugFree dll__PyObject_DebugFree 286 # else 287 # define PyObject_Malloc dll_PyObject_Malloc 288 # define PyObject_Free dll_PyObject_Free 289 # endif 290 # endif 291 # ifdef PY_USE_CAPSULE 292 # define PyCapsule_New dll_PyCapsule_New 293 # define PyCapsule_GetPointer dll_PyCapsule_GetPointer 294 # else 295 # define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr 296 # define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr 297 # endif 298 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 299 # define Py_NoSiteFlag (*dll_Py_NoSiteFlag) 300 # endif 301 302 /* 303 * Pointers for dynamic link 304 */ 305 static int(*dll_PyArg_Parse)(PyObject *, char *, ...); 306 static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...); 307 static int(*dll_PyMem_Free)(void *); 308 static void* (*dll_PyMem_Malloc)(size_t); 309 static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); 310 static int(*dll_PyErr_BadArgument)(void); 311 static PyObject *(*dll_PyErr_NewException)(char *, PyObject *, PyObject *); 312 static void(*dll_PyErr_Clear)(void); 313 static PyObject*(*dll_PyErr_Format)(PyObject *, const char *, ...); 314 static void(*dll_PyErr_PrintEx)(int); 315 static PyObject*(*dll_PyErr_NoMemory)(void); 316 static PyObject*(*dll_PyErr_Occurred)(void); 317 static void(*dll_PyErr_SetNone)(PyObject *); 318 static void(*dll_PyErr_SetString)(PyObject *, const char *); 319 static void(*dll_PyErr_SetObject)(PyObject *, PyObject *); 320 static int(*dll_PyErr_ExceptionMatches)(PyObject *); 321 static void(*dll_PyEval_InitThreads)(void); 322 static void(*dll_PyEval_RestoreThread)(PyThreadState *); 323 static PyThreadState*(*dll_PyEval_SaveThread)(void); 324 # ifdef PY_CAN_RECURSE 325 static PyGILState_STATE (*dll_PyGILState_Ensure)(void); 326 static void (*dll_PyGILState_Release)(PyGILState_STATE); 327 # endif 328 static long(*dll_PyInt_AsLong)(PyObject *); 329 static PyObject*(*dll_PyInt_FromLong)(long); 330 static long(*dll_PyLong_AsLong)(PyObject *); 331 static PyObject*(*dll_PyLong_FromLong)(long); 332 static PyTypeObject* dll_PyBool_Type; 333 static PyTypeObject* dll_PyInt_Type; 334 static PyTypeObject* dll_PyLong_Type; 335 static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt); 336 static int(*dll_PyList_Append)(PyObject *, PyObject *); 337 static int(*dll_PyList_Insert)(PyObject *, PyInt, PyObject *); 338 static PyObject*(*dll_PyList_New)(PyInt size); 339 static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *); 340 static PyInt(*dll_PyList_Size)(PyObject *); 341 static PyTypeObject* dll_PyList_Type; 342 static int (*dll_PySequence_Check)(PyObject *); 343 static PyInt(*dll_PySequence_Size)(PyObject *); 344 static PyObject*(*dll_PySequence_GetItem)(PyObject *, PyInt); 345 static PyObject*(*dll_PySequence_Fast)(PyObject *, const char *); 346 static PyInt(*dll_PyTuple_Size)(PyObject *); 347 static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt); 348 static PyTypeObject* dll_PyTuple_Type; 349 static int (*dll_PySlice_GetIndicesEx)(PySliceObject *r, PyInt length, 350 PyInt *start, PyInt *stop, PyInt *step, 351 PyInt *slicelen); 352 static PyObject*(*dll_PyImport_ImportModule)(const char *); 353 static PyObject*(*dll_PyDict_New)(void); 354 static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *); 355 static int (*dll_PyDict_Next)(PyObject *, PyInt *, PyObject **, PyObject **); 356 static PyTypeObject* dll_PyDict_Type; 357 # ifndef PY_NO_MAPPING_KEYS 358 static PyObject* (*dll_PyMapping_Keys)(PyObject *); 359 # endif 360 static PyObject* (*dll_PyObject_GetItem)(PyObject *, PyObject *); 361 static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *); 362 static int (*dll_PyMapping_Check)(PyObject *); 363 static PyObject* (*dll_PyIter_Next)(PyObject *); 364 static PyObject*(*dll_PyModule_GetDict)(PyObject *); 365 static int(*dll_PyModule_AddObject)(PyObject *, const char *, PyObject *); 366 static int(*dll_PyRun_SimpleString)(char *); 367 static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *); 368 static PyObject* (*dll_PyObject_GetAttrString)(PyObject *, const char *); 369 static int (*dll_PyObject_HasAttrString)(PyObject *, const char *); 370 static int (*dll_PyObject_SetAttrString)(PyObject *, const char *, PyObject *); 371 static PyObject* (*dll_PyObject_CallFunctionObjArgs)(PyObject *, ...); 372 static PyObject* (*dll_PyObject_CallFunction)(PyObject *, char *, ...); 373 static PyObject* (*dll_PyObject_Call)(PyObject *, PyObject *, PyObject *); 374 static PyObject* (*dll_PyObject_Repr)(PyObject *); 375 static char*(*dll_PyString_AsString)(PyObject *); 376 static int(*dll_PyString_AsStringAndSize)(PyObject *, char **, PyInt *); 377 static PyObject*(*dll_PyString_FromString)(const char *); 378 static PyObject*(*dll_PyString_FromFormat)(const char *, ...); 379 static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt); 380 static PyInt(*dll_PyString_Size)(PyObject *); 381 static PyTypeObject* dll_PyString_Type; 382 static PyTypeObject* dll_PyUnicode_Type; 383 static PyObject *(*py_PyUnicode_AsEncodedString)(PyObject *, char *, char *); 384 static double(*dll_PyFloat_AsDouble)(PyObject *); 385 static PyObject*(*dll_PyFloat_FromDouble)(double); 386 static PyTypeObject* dll_PyFloat_Type; 387 static int(*dll_PyNumber_Check)(PyObject *); 388 static PyObject*(*dll_PyNumber_Long)(PyObject *); 389 static int(*dll_PySys_SetObject)(char *, PyObject *); 390 static PyObject *(*dll_PySys_GetObject)(char *); 391 static int(*dll_PySys_SetArgv)(int, char **); 392 static PyTypeObject* dll_PyType_Type; 393 static PyTypeObject* dll_PySlice_Type; 394 static int (*dll_PyType_Ready)(PyTypeObject *type); 395 static PyObject* (*dll_PyType_GenericAlloc)(PyTypeObject *type, PyInt nitems); 396 static PyObject*(*dll_Py_BuildValue)(char *, ...); 397 static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *); 398 static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int); 399 static PyObject*(*dll_PyImport_AddModule)(char *); 400 static void(*dll_Py_SetPythonHome)(char *home); 401 static void(*dll_Py_Initialize)(void); 402 static void(*dll_Py_Finalize)(void); 403 static int(*dll_Py_IsInitialized)(void); 404 static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *); 405 static PyObject*(*dll__PyObject_GC_New)(PyTypeObject *); 406 # ifdef Py_underscore_GC 407 static void(*dll__PyObject_GC_Del)(void *); 408 static void(*dll__PyObject_GC_UnTrack)(void *); 409 # else 410 static void(*dll_PyObject_GC_Del)(void *); 411 static void(*dll_PyObject_GC_UnTrack)(void *); 412 # endif 413 static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *); 414 static PyObject* (*dll_PyObject_GetIter)(PyObject *); 415 static int (*dll_PyObject_IsTrue)(PyObject *); 416 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 417 static iternextfunc dll__PyObject_NextNotImplemented; 418 # endif 419 static PyObject* dll__Py_NoneStruct; 420 static PyObject* _Py_ZeroStruct; 421 static PyObject* dll__Py_TrueStruct; 422 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 423 static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *); 424 # ifdef Py_DEBUG 425 static void (*dll__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op); 426 static PyInt* dll__Py_RefTotal; 427 static void (*dll__Py_Dealloc)(PyObject *obj); 428 # endif 429 # endif 430 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000 431 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) 432 static void (*dll__PyObject_DebugFree)(void*); 433 static void* (*dll__PyObject_DebugMalloc)(size_t); 434 # else 435 static void* (*dll_PyObject_Malloc)(size_t); 436 static void (*dll_PyObject_Free)(void*); 437 # endif 438 # endif 439 # ifdef PY_USE_CAPSULE 440 static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor); 441 static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *); 442 # else 443 static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *)); 444 static void* (*dll_PyCObject_AsVoidPtr)(PyObject *); 445 # endif 446 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 447 static int* dll_Py_NoSiteFlag; 448 # endif 449 450 static HINSTANCE hinstPython = 0; /* Instance of python.dll */ 451 452 /* Imported exception objects */ 453 static PyObject *imp_PyExc_AttributeError; 454 static PyObject *imp_PyExc_IndexError; 455 static PyObject *imp_PyExc_KeyError; 456 static PyObject *imp_PyExc_KeyboardInterrupt; 457 static PyObject *imp_PyExc_TypeError; 458 static PyObject *imp_PyExc_ValueError; 459 static PyObject *imp_PyExc_SystemExit; 460 static PyObject *imp_PyExc_RuntimeError; 461 static PyObject *imp_PyExc_ImportError; 462 static PyObject *imp_PyExc_OverflowError; 463 464 # define PyExc_AttributeError imp_PyExc_AttributeError 465 # define PyExc_IndexError imp_PyExc_IndexError 466 # define PyExc_KeyError imp_PyExc_KeyError 467 # define PyExc_KeyboardInterrupt imp_PyExc_KeyboardInterrupt 468 # define PyExc_TypeError imp_PyExc_TypeError 469 # define PyExc_ValueError imp_PyExc_ValueError 470 # define PyExc_SystemExit imp_PyExc_SystemExit 471 # define PyExc_RuntimeError imp_PyExc_RuntimeError 472 # define PyExc_ImportError imp_PyExc_ImportError 473 # define PyExc_OverflowError imp_PyExc_OverflowError 474 475 /* 476 * Table of name to function pointer of python. 477 */ 478 # define PYTHON_PROC FARPROC 479 static struct 480 { 481 char *name; 482 PYTHON_PROC *ptr; 483 } python_funcname_table[] = 484 { 485 #ifndef PY_SSIZE_T_CLEAN 486 {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse}, 487 {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple}, 488 {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue}, 489 #else 490 {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse}, 491 {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple}, 492 {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue}, 493 #endif 494 {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free}, 495 {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc}, 496 {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString}, 497 {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument}, 498 {"PyErr_NewException", (PYTHON_PROC*)&dll_PyErr_NewException}, 499 {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear}, 500 {"PyErr_Format", (PYTHON_PROC*)&dll_PyErr_Format}, 501 {"PyErr_PrintEx", (PYTHON_PROC*)&dll_PyErr_PrintEx}, 502 {"PyErr_NoMemory", (PYTHON_PROC*)&dll_PyErr_NoMemory}, 503 {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred}, 504 {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone}, 505 {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString}, 506 {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject}, 507 {"PyErr_ExceptionMatches", (PYTHON_PROC*)&dll_PyErr_ExceptionMatches}, 508 {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads}, 509 {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread}, 510 {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread}, 511 # ifdef PY_CAN_RECURSE 512 {"PyGILState_Ensure", (PYTHON_PROC*)&dll_PyGILState_Ensure}, 513 {"PyGILState_Release", (PYTHON_PROC*)&dll_PyGILState_Release}, 514 # endif 515 {"PyInt_AsLong", (PYTHON_PROC*)&dll_PyInt_AsLong}, 516 {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong}, 517 {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong}, 518 {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong}, 519 {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type}, 520 {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type}, 521 {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type}, 522 {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem}, 523 {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append}, 524 {"PyList_Insert", (PYTHON_PROC*)&dll_PyList_Insert}, 525 {"PyList_New", (PYTHON_PROC*)&dll_PyList_New}, 526 {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem}, 527 {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size}, 528 {"PyList_Type", (PYTHON_PROC*)&dll_PyList_Type}, 529 {"PySequence_Size", (PYTHON_PROC*)&dll_PySequence_Size}, 530 {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check}, 531 {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem}, 532 {"PySequence_Fast", (PYTHON_PROC*)&dll_PySequence_Fast}, 533 {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem}, 534 {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size}, 535 {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type}, 536 {"PySlice_GetIndicesEx", (PYTHON_PROC*)&dll_PySlice_GetIndicesEx}, 537 {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule}, 538 {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString}, 539 {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next}, 540 {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New}, 541 {"PyDict_Type", (PYTHON_PROC*)&dll_PyDict_Type}, 542 # ifndef PY_NO_MAPPING_KEYS 543 {"PyMapping_Keys", (PYTHON_PROC*)&dll_PyMapping_Keys}, 544 # endif 545 {"PyObject_GetItem", (PYTHON_PROC*)&dll_PyObject_GetItem}, 546 {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod}, 547 {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check}, 548 {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next}, 549 {"PyModule_GetDict", (PYTHON_PROC*)&dll_PyModule_GetDict}, 550 {"PyModule_AddObject", (PYTHON_PROC*)&dll_PyModule_AddObject}, 551 {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString}, 552 {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String}, 553 {"PyObject_GetAttrString", (PYTHON_PROC*)&dll_PyObject_GetAttrString}, 554 {"PyObject_HasAttrString", (PYTHON_PROC*)&dll_PyObject_HasAttrString}, 555 {"PyObject_SetAttrString", (PYTHON_PROC*)&dll_PyObject_SetAttrString}, 556 {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&dll_PyObject_CallFunctionObjArgs}, 557 {"PyObject_CallFunction", (PYTHON_PROC*)&dll_PyObject_CallFunction}, 558 {"PyObject_Call", (PYTHON_PROC*)&dll_PyObject_Call}, 559 {"PyObject_Repr", (PYTHON_PROC*)&dll_PyObject_Repr}, 560 {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString}, 561 {"PyString_AsStringAndSize", (PYTHON_PROC*)&dll_PyString_AsStringAndSize}, 562 {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString}, 563 {"PyString_FromFormat", (PYTHON_PROC*)&dll_PyString_FromFormat}, 564 {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize}, 565 {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size}, 566 {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type}, 567 {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type}, 568 {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type}, 569 {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble}, 570 {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble}, 571 {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule}, 572 {"PyNumber_Check", (PYTHON_PROC*)&dll_PyNumber_Check}, 573 {"PyNumber_Long", (PYTHON_PROC*)&dll_PyNumber_Long}, 574 {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject}, 575 {"PySys_GetObject", (PYTHON_PROC*)&dll_PySys_GetObject}, 576 {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv}, 577 {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type}, 578 {"PySlice_Type", (PYTHON_PROC*)&dll_PySlice_Type}, 579 {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready}, 580 {"PyType_GenericAlloc", (PYTHON_PROC*)&dll_PyType_GenericAlloc}, 581 {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod}, 582 {"Py_SetPythonHome", (PYTHON_PROC*)&dll_Py_SetPythonHome}, 583 {"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize}, 584 {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize}, 585 {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized}, 586 {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New}, 587 {"_PyObject_GC_New", (PYTHON_PROC*)&dll__PyObject_GC_New}, 588 # ifdef Py_underscore_GC 589 {"_PyObject_GC_Del", (PYTHON_PROC*)&dll__PyObject_GC_Del}, 590 {"_PyObject_GC_UnTrack", (PYTHON_PROC*)&dll__PyObject_GC_UnTrack}, 591 # else 592 {"PyObject_GC_Del", (PYTHON_PROC*)&dll_PyObject_GC_Del}, 593 {"PyObject_GC_UnTrack", (PYTHON_PROC*)&dll_PyObject_GC_UnTrack}, 594 # endif 595 {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init}, 596 {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter}, 597 {"PyObject_IsTrue", (PYTHON_PROC*)&dll_PyObject_IsTrue}, 598 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 599 {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented}, 600 # endif 601 {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct}, 602 {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct}, 603 {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct}, 604 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 605 # ifdef Py_DEBUG 606 {"_Py_NegativeRefcount", (PYTHON_PROC*)&dll__Py_NegativeRefcount}, 607 {"_Py_RefTotal", (PYTHON_PROC*)&dll__Py_RefTotal}, 608 {"_Py_Dealloc", (PYTHON_PROC*)&dll__Py_Dealloc}, 609 # endif 610 {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype}, 611 # endif 612 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000 613 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) 614 {"_PyObject_DebugFree", (PYTHON_PROC*)&dll__PyObject_DebugFree}, 615 {"_PyObject_DebugMalloc", (PYTHON_PROC*)&dll__PyObject_DebugMalloc}, 616 # else 617 {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc}, 618 {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free}, 619 # endif 620 # endif 621 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \ 622 && SIZEOF_SIZE_T != VIM_SIZEOF_INT 623 # ifdef Py_DEBUG 624 {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4}, 625 # else 626 {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4}, 627 # endif 628 # else 629 # ifdef Py_DEBUG 630 {"Py_InitModule4TraceRefs", (PYTHON_PROC*)&dll_Py_InitModule4}, 631 # else 632 {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4}, 633 # endif 634 # endif 635 # ifdef PY_USE_CAPSULE 636 {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New}, 637 {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer}, 638 # else 639 {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr}, 640 {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr}, 641 # endif 642 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 643 {"Py_NoSiteFlag", (PYTHON_PROC*)&dll_Py_NoSiteFlag}, 644 # endif 645 {"", NULL}, 646 }; 647 648 /* 649 * Free python.dll 650 */ 651 static void 652 end_dynamic_python(void) 653 { 654 if (hinstPython) 655 { 656 close_dll(hinstPython); 657 hinstPython = 0; 658 } 659 } 660 661 /* 662 * Load library and get all pointers. 663 * Parameter 'libname' provides name of DLL. 664 * Return OK or FAIL. 665 */ 666 static int 667 python_runtime_link_init(char *libname, int verbose) 668 { 669 int i; 670 void *ucs_as_encoded_string; 671 672 #if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON3) 673 /* Can't have Python and Python3 loaded at the same time. 674 * It cause a crash, because RTLD_GLOBAL is needed for 675 * standard C extension libraries of one or both python versions. */ 676 if (python3_loaded()) 677 { 678 if (verbose) 679 EMSG(_("E836: This Vim cannot execute :python after using :py3")); 680 return FAIL; 681 } 682 #endif 683 684 if (hinstPython) 685 return OK; 686 hinstPython = load_dll(libname); 687 if (!hinstPython) 688 { 689 if (verbose) 690 EMSG2(_(e_loadlib), libname); 691 return FAIL; 692 } 693 694 for (i = 0; python_funcname_table[i].ptr; ++i) 695 { 696 if ((*python_funcname_table[i].ptr = symbol_from_dll(hinstPython, 697 python_funcname_table[i].name)) == NULL) 698 { 699 close_dll(hinstPython); 700 hinstPython = 0; 701 if (verbose) 702 EMSG2(_(e_loadfunc), python_funcname_table[i].name); 703 return FAIL; 704 } 705 } 706 707 /* Load unicode functions separately as only the ucs2 or the ucs4 functions 708 * will be present in the library. */ 709 ucs_as_encoded_string = symbol_from_dll(hinstPython, 710 "PyUnicodeUCS2_AsEncodedString"); 711 if (ucs_as_encoded_string == NULL) 712 ucs_as_encoded_string = symbol_from_dll(hinstPython, 713 "PyUnicodeUCS4_AsEncodedString"); 714 if (ucs_as_encoded_string != NULL) 715 py_PyUnicode_AsEncodedString = ucs_as_encoded_string; 716 else 717 { 718 close_dll(hinstPython); 719 hinstPython = 0; 720 if (verbose) 721 EMSG2(_(e_loadfunc), "PyUnicode_UCSX_*"); 722 return FAIL; 723 } 724 725 return OK; 726 } 727 728 /* 729 * If python is enabled (there is installed python on Windows system) return 730 * TRUE, else FALSE. 731 */ 732 int 733 python_enabled(int verbose) 734 { 735 #ifdef WIN3264 736 char *dll = DYNAMIC_PYTHON_DLL; 737 #else 738 char *dll = *p_pydll ? (char *)p_pydll : DYNAMIC_PYTHON_DLL; 739 #endif 740 return python_runtime_link_init(dll, verbose) == OK; 741 } 742 743 /* 744 * Load the standard Python exceptions - don't import the symbols from the 745 * DLL, as this can cause errors (importing data symbols is not reliable). 746 */ 747 static void 748 get_exceptions(void) 749 { 750 PyObject *exmod = PyImport_ImportModule("exceptions"); 751 PyObject *exdict = PyModule_GetDict(exmod); 752 imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError"); 753 imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError"); 754 imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError"); 755 imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt"); 756 imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError"); 757 imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError"); 758 imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit"); 759 imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError"); 760 imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError"); 761 imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError"); 762 Py_XINCREF(imp_PyExc_AttributeError); 763 Py_XINCREF(imp_PyExc_IndexError); 764 Py_XINCREF(imp_PyExc_KeyError); 765 Py_XINCREF(imp_PyExc_KeyboardInterrupt); 766 Py_XINCREF(imp_PyExc_TypeError); 767 Py_XINCREF(imp_PyExc_ValueError); 768 Py_XINCREF(imp_PyExc_SystemExit); 769 Py_XINCREF(imp_PyExc_RuntimeError); 770 Py_XINCREF(imp_PyExc_ImportError); 771 Py_XINCREF(imp_PyExc_OverflowError); 772 Py_XDECREF(exmod); 773 } 774 #endif /* DYNAMIC_PYTHON */ 775 776 static int initialised = 0; 777 #define PYINITIALISED initialised 778 779 #define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self); 780 781 #define WIN_PYTHON_REF(win) win->w_python_ref 782 #define BUF_PYTHON_REF(buf) buf->b_python_ref 783 #define TAB_PYTHON_REF(tab) tab->tp_python_ref 784 785 static PyObject *OutputGetattr(PyObject *, char *); 786 static PyObject *BufferGetattr(PyObject *, char *); 787 static PyObject *WindowGetattr(PyObject *, char *); 788 static PyObject *TabPageGetattr(PyObject *, char *); 789 static PyObject *RangeGetattr(PyObject *, char *); 790 static PyObject *DictionaryGetattr(PyObject *, char*); 791 static PyObject *ListGetattr(PyObject *, char *); 792 static PyObject *FunctionGetattr(PyObject *, char *); 793 794 #ifndef Py_VISIT 795 # define Py_VISIT(obj) visit(obj, arg) 796 #endif 797 #ifndef Py_CLEAR 798 # define Py_CLEAR(obj) \ 799 { \ 800 Py_XDECREF(obj); \ 801 obj = NULL; \ 802 } 803 #endif 804 805 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 806 static void * 807 py_memsave(void *p, size_t len) 808 { 809 void *r; 810 811 if (!(r = PyMem_Malloc(len))) 812 return NULL; 813 mch_memmove(r, p, len); 814 return r; 815 } 816 817 # define PY_STRSAVE(s) ((char_u *) py_memsave(s, STRLEN(s) + 1)) 818 #endif 819 820 typedef PySliceObject PySliceObject_T; 821 822 /* 823 * Include the code shared with if_python3.c 824 */ 825 #include "if_py_both.h" 826 827 828 /****************************************************** 829 * Internal function prototypes. 830 */ 831 832 static int PythonMod_Init(void); 833 834 835 /****************************************************** 836 * 1. Python interpreter main program. 837 */ 838 839 #if PYTHON_API_VERSION < 1007 /* Python 1.4 */ 840 typedef PyObject PyThreadState; 841 #endif 842 843 #ifndef PY_CAN_RECURSE 844 static PyThreadState *saved_python_thread = NULL; 845 846 /* 847 * Suspend a thread of the Python interpreter, other threads are allowed to 848 * run. 849 */ 850 static void 851 Python_SaveThread(void) 852 { 853 saved_python_thread = PyEval_SaveThread(); 854 } 855 856 /* 857 * Restore a thread of the Python interpreter, waits for other threads to 858 * block. 859 */ 860 static void 861 Python_RestoreThread(void) 862 { 863 PyEval_RestoreThread(saved_python_thread); 864 saved_python_thread = NULL; 865 } 866 #endif 867 868 void 869 python_end() 870 { 871 static int recurse = 0; 872 873 /* If a crash occurs while doing this, don't try again. */ 874 if (recurse != 0) 875 return; 876 877 ++recurse; 878 879 #ifdef DYNAMIC_PYTHON 880 if (hinstPython && Py_IsInitialized()) 881 { 882 # ifdef PY_CAN_RECURSE 883 PyGILState_Ensure(); 884 # else 885 Python_RestoreThread(); /* enter python */ 886 # endif 887 Py_Finalize(); 888 } 889 end_dynamic_python(); 890 #else 891 if (Py_IsInitialized()) 892 { 893 # ifdef PY_CAN_RECURSE 894 PyGILState_Ensure(); 895 # else 896 Python_RestoreThread(); /* enter python */ 897 # endif 898 Py_Finalize(); 899 } 900 #endif 901 902 --recurse; 903 } 904 905 #if (defined(DYNAMIC_PYTHON) && defined(FEAT_PYTHON3)) || defined(PROTO) 906 int 907 python_loaded() 908 { 909 return (hinstPython != 0); 910 } 911 #endif 912 913 static int 914 Python_Init(void) 915 { 916 if (!initialised) 917 { 918 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 919 PyObject *site; 920 #endif 921 922 #ifdef DYNAMIC_PYTHON 923 if (!python_enabled(TRUE)) 924 { 925 EMSG(_("E263: Sorry, this command is disabled, the Python library could not be loaded.")); 926 goto fail; 927 } 928 #endif 929 930 #ifdef PYTHON_HOME 931 # ifdef DYNAMIC_PYTHON 932 if (mch_getenv((char_u *)"PYTHONHOME") == NULL) 933 # endif 934 Py_SetPythonHome(PYTHON_HOME); 935 #endif 936 937 init_structs(); 938 939 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 940 /* Disable implicit 'import site', because it may cause Vim to exit 941 * when it can't be found. */ 942 Py_NoSiteFlag++; 943 #endif 944 945 #if !defined(MACOS) || defined(MACOS_X_UNIX) 946 Py_Initialize(); 947 #else 948 PyMac_Initialize(); 949 #endif 950 951 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 952 /* 'import site' explicitly. */ 953 site = PyImport_ImportModule("site"); 954 if (site == NULL) 955 { 956 EMSG(_("E887: Sorry, this command is disabled, the Python's site module could not be loaded.")); 957 goto fail; 958 } 959 Py_DECREF(site); 960 #endif 961 962 /* Initialise threads, and below save the state using 963 * PyEval_SaveThread. Without the call to PyEval_SaveThread, thread 964 * specific state (such as the system trace hook), will be lost 965 * between invocations of Python code. */ 966 PyEval_InitThreads(); 967 #ifdef DYNAMIC_PYTHON 968 get_exceptions(); 969 #endif 970 971 if (PythonIO_Init_io()) 972 goto fail; 973 974 if (PythonMod_Init()) 975 goto fail; 976 977 globals = PyModule_GetDict(PyImport_AddModule("__main__")); 978 979 /* Remove the element from sys.path that was added because of our 980 * argv[0] value in PythonMod_Init(). Previously we used an empty 981 * string, but depending on the OS we then get an empty entry or 982 * the current directory in sys.path. */ 983 PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)"); 984 985 /* lock is created and acquired in PyEval_InitThreads() and thread 986 * state is created in Py_Initialize() 987 * there _PyGILState_NoteThreadState() also sets gilcounter to 1 988 * (python must have threads enabled!) 989 * so the following does both: unlock GIL and save thread state in TLS 990 * without deleting thread state 991 */ 992 #ifndef PY_CAN_RECURSE 993 saved_python_thread = 994 #endif 995 PyEval_SaveThread(); 996 997 initialised = 1; 998 } 999 1000 return 0; 1001 1002 fail: 1003 /* We call PythonIO_Flush() here to print any Python errors. 1004 * This is OK, as it is possible to call this function even 1005 * if PythonIO_Init_io() has not completed successfully (it will 1006 * not do anything in this case). 1007 */ 1008 PythonIO_Flush(); 1009 return -1; 1010 } 1011 1012 /* 1013 * External interface 1014 */ 1015 static void 1016 DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg) 1017 { 1018 #ifndef PY_CAN_RECURSE 1019 static int recursive = 0; 1020 #endif 1021 #if defined(MACOS) && !defined(MACOS_X_UNIX) 1022 GrafPtr oldPort; 1023 #endif 1024 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 1025 char *saved_locale; 1026 #endif 1027 #ifdef PY_CAN_RECURSE 1028 PyGILState_STATE pygilstate; 1029 #endif 1030 1031 #ifndef PY_CAN_RECURSE 1032 if (recursive) 1033 { 1034 EMSG(_("E659: Cannot invoke Python recursively")); 1035 return; 1036 } 1037 ++recursive; 1038 #endif 1039 1040 #if defined(MACOS) && !defined(MACOS_X_UNIX) 1041 GetPort(&oldPort); 1042 /* Check if the Python library is available */ 1043 if ((Ptr)PyMac_Initialize == (Ptr)kUnresolvedCFragSymbolAddress) 1044 goto theend; 1045 #endif 1046 if (Python_Init()) 1047 goto theend; 1048 1049 init_range(arg); 1050 1051 Python_Release_Vim(); /* leave vim */ 1052 1053 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 1054 /* Python only works properly when the LC_NUMERIC locale is "C". */ 1055 saved_locale = setlocale(LC_NUMERIC, NULL); 1056 if (saved_locale == NULL || STRCMP(saved_locale, "C") == 0) 1057 saved_locale = NULL; 1058 else 1059 { 1060 /* Need to make a copy, value may change when setting new locale. */ 1061 saved_locale = (char *) PY_STRSAVE(saved_locale); 1062 (void)setlocale(LC_NUMERIC, "C"); 1063 } 1064 #endif 1065 1066 #ifdef PY_CAN_RECURSE 1067 pygilstate = PyGILState_Ensure(); 1068 #else 1069 Python_RestoreThread(); /* enter python */ 1070 #endif 1071 1072 run((char *) cmd, arg 1073 #ifdef PY_CAN_RECURSE 1074 , &pygilstate 1075 #endif 1076 ); 1077 1078 #ifdef PY_CAN_RECURSE 1079 PyGILState_Release(pygilstate); 1080 #else 1081 Python_SaveThread(); /* leave python */ 1082 #endif 1083 1084 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 1085 if (saved_locale != NULL) 1086 { 1087 (void)setlocale(LC_NUMERIC, saved_locale); 1088 PyMem_Free(saved_locale); 1089 } 1090 #endif 1091 1092 Python_Lock_Vim(); /* enter vim */ 1093 PythonIO_Flush(); 1094 #if defined(MACOS) && !defined(MACOS_X_UNIX) 1095 SetPort(oldPort); 1096 #endif 1097 1098 theend: 1099 #ifndef PY_CAN_RECURSE 1100 --recursive; 1101 #endif 1102 return; 1103 } 1104 1105 /* 1106 * ":python" 1107 */ 1108 void 1109 ex_python(exarg_T *eap) 1110 { 1111 char_u *script; 1112 1113 script = script_get(eap, eap->arg); 1114 if (!eap->skip) 1115 { 1116 DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script, 1117 (rangeinitializer) init_range_cmd, 1118 (runner) run_cmd, 1119 (void *) eap); 1120 } 1121 vim_free(script); 1122 } 1123 1124 #define BUFFER_SIZE 1024 1125 1126 /* 1127 * ":pyfile" 1128 */ 1129 void 1130 ex_pyfile(exarg_T *eap) 1131 { 1132 static char buffer[BUFFER_SIZE]; 1133 const char *file = (char *)eap->arg; 1134 char *p; 1135 1136 /* Have to do it like this. PyRun_SimpleFile requires you to pass a 1137 * stdio file pointer, but Vim and the Python DLL are compiled with 1138 * different options under Windows, meaning that stdio pointers aren't 1139 * compatible between the two. Yuk. 1140 * 1141 * Put the string "execfile('file')" into buffer. But, we need to 1142 * escape any backslashes or single quotes in the file name, so that 1143 * Python won't mangle the file name. 1144 */ 1145 strcpy(buffer, "execfile('"); 1146 p = buffer + 10; /* size of "execfile('" */ 1147 1148 while (*file && p < buffer + (BUFFER_SIZE - 3)) 1149 { 1150 if (*file == '\\' || *file == '\'') 1151 *p++ = '\\'; 1152 *p++ = *file++; 1153 } 1154 1155 /* If we didn't finish the file name, we hit a buffer overflow */ 1156 if (*file != '\0') 1157 return; 1158 1159 /* Put in the terminating "')" and a null */ 1160 *p++ = '\''; 1161 *p++ = ')'; 1162 *p++ = '\0'; 1163 1164 /* Execute the file */ 1165 DoPyCommand(buffer, 1166 (rangeinitializer) init_range_cmd, 1167 (runner) run_cmd, 1168 (void *) eap); 1169 } 1170 1171 void 1172 ex_pydo(exarg_T *eap) 1173 { 1174 DoPyCommand((char *)eap->arg, 1175 (rangeinitializer) init_range_cmd, 1176 (runner)run_do, 1177 (void *)eap); 1178 } 1179 1180 /****************************************************** 1181 * 2. Python output stream: writes output via [e]msg(). 1182 */ 1183 1184 /* Implementation functions 1185 */ 1186 1187 static PyObject * 1188 OutputGetattr(PyObject *self, char *name) 1189 { 1190 if (strcmp(name, "softspace") == 0) 1191 return PyInt_FromLong(((OutputObject *)(self))->softspace); 1192 else if (strcmp(name, "__members__") == 0) 1193 return ObjectDir(NULL, OutputAttrs); 1194 1195 return Py_FindMethod(OutputMethods, self, name); 1196 } 1197 1198 /****************************************************** 1199 * 3. Implementation of the Vim module for Python 1200 */ 1201 1202 /* Window type - Implementation functions 1203 * -------------------------------------- 1204 */ 1205 1206 #define WindowType_Check(obj) ((obj)->ob_type == &WindowType) 1207 1208 /* Buffer type - Implementation functions 1209 * -------------------------------------- 1210 */ 1211 1212 #define BufferType_Check(obj) ((obj)->ob_type == &BufferType) 1213 1214 static PyInt BufferAssItem(PyObject *, PyInt, PyObject *); 1215 static PyInt BufferAssSlice(PyObject *, PyInt, PyInt, PyObject *); 1216 1217 /* Line range type - Implementation functions 1218 * -------------------------------------- 1219 */ 1220 1221 #define RangeType_Check(obj) ((obj)->ob_type == &RangeType) 1222 1223 static PyInt RangeAssItem(PyObject *, PyInt, PyObject *); 1224 static PyInt RangeAssSlice(PyObject *, PyInt, PyInt, PyObject *); 1225 1226 /* Current objects type - Implementation functions 1227 * ----------------------------------------------- 1228 */ 1229 1230 static PySequenceMethods BufferAsSeq = { 1231 (PyInquiry) BufferLength, /* sq_length, len(x) */ 1232 (binaryfunc) 0, /* BufferConcat, sq_concat, x+y */ 1233 (PyIntArgFunc) 0, /* BufferRepeat, sq_repeat, x*n */ 1234 (PyIntArgFunc) BufferItem, /* sq_item, x[i] */ 1235 (PyIntIntArgFunc) BufferSlice, /* sq_slice, x[i:j] */ 1236 (PyIntObjArgProc) BufferAssItem, /* sq_ass_item, x[i]=v */ 1237 (PyIntIntObjArgProc) BufferAssSlice, /* sq_ass_slice, x[i:j]=v */ 1238 (objobjproc) 0, 1239 (binaryfunc) 0, 1240 0, 1241 }; 1242 1243 /* Buffer object - Implementation 1244 */ 1245 1246 static PyObject * 1247 BufferGetattr(PyObject *self, char *name) 1248 { 1249 PyObject *r; 1250 1251 if ((r = BufferAttrValid((BufferObject *)(self), name))) 1252 return r; 1253 1254 if (CheckBuffer((BufferObject *)(self))) 1255 return NULL; 1256 1257 r = BufferAttr((BufferObject *)(self), name); 1258 if (r || PyErr_Occurred()) 1259 return r; 1260 else 1261 return Py_FindMethod(BufferMethods, self, name); 1262 } 1263 1264 /******************/ 1265 1266 static PyInt 1267 BufferAssItem(PyObject *self, PyInt n, PyObject *val) 1268 { 1269 return RBAsItem((BufferObject *)(self), n, val, 1, -1, NULL); 1270 } 1271 1272 static PyInt 1273 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) 1274 { 1275 return RBAsSlice((BufferObject *)(self), lo, hi, val, 1, -1, NULL); 1276 } 1277 1278 static PySequenceMethods RangeAsSeq = { 1279 (PyInquiry) RangeLength, /* sq_length, len(x) */ 1280 (binaryfunc) 0, /* RangeConcat, */ /* sq_concat, x+y */ 1281 (PyIntArgFunc) 0, /* RangeRepeat, */ /* sq_repeat, x*n */ 1282 (PyIntArgFunc) RangeItem, /* sq_item, x[i] */ 1283 (PyIntIntArgFunc) RangeSlice, /* sq_slice, x[i:j] */ 1284 (PyIntObjArgProc) RangeAssItem, /* sq_ass_item, x[i]=v */ 1285 (PyIntIntObjArgProc) RangeAssSlice, /* sq_ass_slice, x[i:j]=v */ 1286 (objobjproc) 0, 1287 #if PY_MAJOR_VERSION >= 2 1288 (binaryfunc) 0, 1289 0, 1290 #endif 1291 }; 1292 1293 /* Line range object - Implementation 1294 */ 1295 1296 static PyObject * 1297 RangeGetattr(PyObject *self, char *name) 1298 { 1299 if (strcmp(name, "start") == 0) 1300 return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->start - 1); 1301 else if (strcmp(name, "end") == 0) 1302 return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->end - 1); 1303 else if (strcmp(name, "__members__") == 0) 1304 return ObjectDir(NULL, RangeAttrs); 1305 else 1306 return Py_FindMethod(RangeMethods, self, name); 1307 } 1308 1309 /****************/ 1310 1311 static PyInt 1312 RangeAssItem(PyObject *self, PyInt n, PyObject *val) 1313 { 1314 return RBAsItem(((RangeObject *)(self))->buf, n, val, 1315 ((RangeObject *)(self))->start, 1316 ((RangeObject *)(self))->end, 1317 &((RangeObject *)(self))->end); 1318 } 1319 1320 static PyInt 1321 RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) 1322 { 1323 return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val, 1324 ((RangeObject *)(self))->start, 1325 ((RangeObject *)(self))->end, 1326 &((RangeObject *)(self))->end); 1327 } 1328 1329 /* TabPage object - Implementation 1330 */ 1331 1332 static PyObject * 1333 TabPageGetattr(PyObject *self, char *name) 1334 { 1335 PyObject *r; 1336 1337 if ((r = TabPageAttrValid((TabPageObject *)(self), name))) 1338 return r; 1339 1340 if (CheckTabPage((TabPageObject *)(self))) 1341 return NULL; 1342 1343 r = TabPageAttr((TabPageObject *)(self), name); 1344 if (r || PyErr_Occurred()) 1345 return r; 1346 else 1347 return Py_FindMethod(TabPageMethods, self, name); 1348 } 1349 1350 /* Window object - Implementation 1351 */ 1352 1353 static PyObject * 1354 WindowGetattr(PyObject *self, char *name) 1355 { 1356 PyObject *r; 1357 1358 if ((r = WindowAttrValid((WindowObject *)(self), name))) 1359 return r; 1360 1361 if (CheckWindow((WindowObject *)(self))) 1362 return NULL; 1363 1364 r = WindowAttr((WindowObject *)(self), name); 1365 if (r || PyErr_Occurred()) 1366 return r; 1367 else 1368 return Py_FindMethod(WindowMethods, self, name); 1369 } 1370 1371 /* Tab page list object - Definitions 1372 */ 1373 1374 static PySequenceMethods TabListAsSeq = { 1375 (PyInquiry) TabListLength, /* sq_length, len(x) */ 1376 (binaryfunc) 0, /* sq_concat, x+y */ 1377 (PyIntArgFunc) 0, /* sq_repeat, x*n */ 1378 (PyIntArgFunc) TabListItem, /* sq_item, x[i] */ 1379 (PyIntIntArgFunc) 0, /* sq_slice, x[i:j] */ 1380 (PyIntObjArgProc) 0, /* sq_ass_item, x[i]=v */ 1381 (PyIntIntObjArgProc) 0, /* sq_ass_slice, x[i:j]=v */ 1382 (objobjproc) 0, 1383 #if PY_MAJOR_VERSION >= 2 1384 (binaryfunc) 0, 1385 0, 1386 #endif 1387 }; 1388 1389 /* Window list object - Definitions 1390 */ 1391 1392 static PySequenceMethods WinListAsSeq = { 1393 (PyInquiry) WinListLength, /* sq_length, len(x) */ 1394 (binaryfunc) 0, /* sq_concat, x+y */ 1395 (PyIntArgFunc) 0, /* sq_repeat, x*n */ 1396 (PyIntArgFunc) WinListItem, /* sq_item, x[i] */ 1397 (PyIntIntArgFunc) 0, /* sq_slice, x[i:j] */ 1398 (PyIntObjArgProc) 0, /* sq_ass_item, x[i]=v */ 1399 (PyIntIntObjArgProc) 0, /* sq_ass_slice, x[i:j]=v */ 1400 (objobjproc) 0, 1401 #if PY_MAJOR_VERSION >= 2 1402 (binaryfunc) 0, 1403 0, 1404 #endif 1405 }; 1406 1407 /* External interface 1408 */ 1409 1410 void 1411 python_buffer_free(buf_T *buf) 1412 { 1413 if (BUF_PYTHON_REF(buf) != NULL) 1414 { 1415 BufferObject *bp = BUF_PYTHON_REF(buf); 1416 bp->buf = INVALID_BUFFER_VALUE; 1417 BUF_PYTHON_REF(buf) = NULL; 1418 } 1419 } 1420 1421 #if defined(FEAT_WINDOWS) || defined(PROTO) 1422 void 1423 python_window_free(win_T *win) 1424 { 1425 if (WIN_PYTHON_REF(win) != NULL) 1426 { 1427 WindowObject *wp = WIN_PYTHON_REF(win); 1428 wp->win = INVALID_WINDOW_VALUE; 1429 WIN_PYTHON_REF(win) = NULL; 1430 } 1431 } 1432 1433 void 1434 python_tabpage_free(tabpage_T *tab) 1435 { 1436 if (TAB_PYTHON_REF(tab) != NULL) 1437 { 1438 TabPageObject *tp = TAB_PYTHON_REF(tab); 1439 tp->tab = INVALID_TABPAGE_VALUE; 1440 TAB_PYTHON_REF(tab) = NULL; 1441 } 1442 } 1443 #endif 1444 1445 static int 1446 PythonMod_Init(void) 1447 { 1448 /* The special value is removed from sys.path in Python_Init(). */ 1449 static char *(argv[2]) = {"/must>not&exist/foo", NULL}; 1450 1451 if (init_types()) 1452 return -1; 1453 1454 /* Set sys.argv[] to avoid a crash in warn(). */ 1455 PySys_SetArgv(1, argv); 1456 1457 vim_module = Py_InitModule4("vim", VimMethods, (char *)NULL, 1458 (PyObject *)NULL, PYTHON_API_VERSION); 1459 1460 if (populate_module(vim_module)) 1461 return -1; 1462 1463 if (init_sys_path()) 1464 return -1; 1465 1466 return 0; 1467 } 1468 1469 /************************************************************************* 1470 * 4. Utility functions for handling the interface between Vim and Python. 1471 */ 1472 1473 /* Convert a Vim line into a Python string. 1474 * All internal newlines are replaced by null characters. 1475 * 1476 * On errors, the Python exception data is set, and NULL is returned. 1477 */ 1478 static PyObject * 1479 LineToString(const char *str) 1480 { 1481 PyObject *result; 1482 PyInt len = strlen(str); 1483 char *p; 1484 1485 /* Allocate an Python string object, with uninitialised contents. We 1486 * must do it this way, so that we can modify the string in place 1487 * later. See the Python source, Objects/stringobject.c for details. 1488 */ 1489 result = PyString_FromStringAndSize(NULL, len); 1490 if (result == NULL) 1491 return NULL; 1492 1493 p = PyString_AsString(result); 1494 1495 while (*str) 1496 { 1497 if (*str == '\n') 1498 *p = '\0'; 1499 else 1500 *p = *str; 1501 1502 ++p; 1503 ++str; 1504 } 1505 1506 return result; 1507 } 1508 1509 static PyObject * 1510 DictionaryGetattr(PyObject *self, char *name) 1511 { 1512 DictionaryObject *this = ((DictionaryObject *) (self)); 1513 1514 if (strcmp(name, "locked") == 0) 1515 return PyInt_FromLong(this->dict->dv_lock); 1516 else if (strcmp(name, "scope") == 0) 1517 return PyInt_FromLong(this->dict->dv_scope); 1518 else if (strcmp(name, "__members__") == 0) 1519 return ObjectDir(NULL, DictionaryAttrs); 1520 1521 return Py_FindMethod(DictionaryMethods, self, name); 1522 } 1523 1524 static PyObject * 1525 ListGetattr(PyObject *self, char *name) 1526 { 1527 if (strcmp(name, "locked") == 0) 1528 return PyInt_FromLong(((ListObject *)(self))->list->lv_lock); 1529 else if (strcmp(name, "__members__") == 0) 1530 return ObjectDir(NULL, ListAttrs); 1531 1532 return Py_FindMethod(ListMethods, self, name); 1533 } 1534 1535 static PyObject * 1536 FunctionGetattr(PyObject *self, char *name) 1537 { 1538 FunctionObject *this = (FunctionObject *)(self); 1539 1540 if (strcmp(name, "name") == 0) 1541 return PyString_FromString((char *)(this->name)); 1542 else if (strcmp(name, "__members__") == 0) 1543 return ObjectDir(NULL, FunctionAttrs); 1544 else 1545 return Py_FindMethod(FunctionMethods, self, name); 1546 } 1547 1548 void 1549 do_pyeval (char_u *str, typval_T *rettv) 1550 { 1551 DoPyCommand((char *) str, 1552 (rangeinitializer) init_range_eval, 1553 (runner) run_eval, 1554 (void *) rettv); 1555 switch(rettv->v_type) 1556 { 1557 case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break; 1558 case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break; 1559 case VAR_FUNC: func_ref(rettv->vval.v_string); break; 1560 case VAR_UNKNOWN: 1561 rettv->v_type = VAR_NUMBER; 1562 rettv->vval.v_number = 0; 1563 break; 1564 } 1565 } 1566 1567 /* Don't generate a prototype for the next function, it generates an error on 1568 * newer Python versions. */ 1569 #if PYTHON_API_VERSION < 1007 /* Python 1.4 */ && !defined(PROTO) 1570 1571 char * 1572 Py_GetProgramName(void) 1573 { 1574 return "vim"; 1575 } 1576 #endif /* Python 1.4 */ 1577 1578 int 1579 set_ref_in_python (int copyID) 1580 { 1581 return set_ref_in_py(copyID); 1582 } 1583