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 return python_runtime_link_init(DYNAMIC_PYTHON_DLL, verbose) == OK; 736 } 737 738 /* 739 * Load the standard Python exceptions - don't import the symbols from the 740 * DLL, as this can cause errors (importing data symbols is not reliable). 741 */ 742 static void 743 get_exceptions(void) 744 { 745 PyObject *exmod = PyImport_ImportModule("exceptions"); 746 PyObject *exdict = PyModule_GetDict(exmod); 747 imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError"); 748 imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError"); 749 imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError"); 750 imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt"); 751 imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError"); 752 imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError"); 753 imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit"); 754 imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError"); 755 imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError"); 756 imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError"); 757 Py_XINCREF(imp_PyExc_AttributeError); 758 Py_XINCREF(imp_PyExc_IndexError); 759 Py_XINCREF(imp_PyExc_KeyError); 760 Py_XINCREF(imp_PyExc_KeyboardInterrupt); 761 Py_XINCREF(imp_PyExc_TypeError); 762 Py_XINCREF(imp_PyExc_ValueError); 763 Py_XINCREF(imp_PyExc_SystemExit); 764 Py_XINCREF(imp_PyExc_RuntimeError); 765 Py_XINCREF(imp_PyExc_ImportError); 766 Py_XINCREF(imp_PyExc_OverflowError); 767 Py_XDECREF(exmod); 768 } 769 #endif /* DYNAMIC_PYTHON */ 770 771 static int initialised = 0; 772 #define PYINITIALISED initialised 773 774 #define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self); 775 776 #define WIN_PYTHON_REF(win) win->w_python_ref 777 #define BUF_PYTHON_REF(buf) buf->b_python_ref 778 #define TAB_PYTHON_REF(tab) tab->tp_python_ref 779 780 static PyObject *OutputGetattr(PyObject *, char *); 781 static PyObject *BufferGetattr(PyObject *, char *); 782 static PyObject *WindowGetattr(PyObject *, char *); 783 static PyObject *TabPageGetattr(PyObject *, char *); 784 static PyObject *RangeGetattr(PyObject *, char *); 785 static PyObject *DictionaryGetattr(PyObject *, char*); 786 static PyObject *ListGetattr(PyObject *, char *); 787 static PyObject *FunctionGetattr(PyObject *, char *); 788 789 #ifndef Py_VISIT 790 # define Py_VISIT(obj) visit(obj, arg) 791 #endif 792 #ifndef Py_CLEAR 793 # define Py_CLEAR(obj) \ 794 { \ 795 Py_XDECREF(obj); \ 796 obj = NULL; \ 797 } 798 #endif 799 800 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 801 static void * 802 py_memsave(void *p, size_t len) 803 { 804 void *r; 805 806 if (!(r = PyMem_Malloc(len))) 807 return NULL; 808 mch_memmove(r, p, len); 809 return r; 810 } 811 812 # define PY_STRSAVE(s) ((char_u *) py_memsave(s, STRLEN(s) + 1)) 813 #endif 814 815 typedef PySliceObject PySliceObject_T; 816 817 /* 818 * Include the code shared with if_python3.c 819 */ 820 #include "if_py_both.h" 821 822 823 /****************************************************** 824 * Internal function prototypes. 825 */ 826 827 static int PythonMod_Init(void); 828 829 830 /****************************************************** 831 * 1. Python interpreter main program. 832 */ 833 834 #if PYTHON_API_VERSION < 1007 /* Python 1.4 */ 835 typedef PyObject PyThreadState; 836 #endif 837 838 #ifndef PY_CAN_RECURSE 839 static PyThreadState *saved_python_thread = NULL; 840 841 /* 842 * Suspend a thread of the Python interpreter, other threads are allowed to 843 * run. 844 */ 845 static void 846 Python_SaveThread(void) 847 { 848 saved_python_thread = PyEval_SaveThread(); 849 } 850 851 /* 852 * Restore a thread of the Python interpreter, waits for other threads to 853 * block. 854 */ 855 static void 856 Python_RestoreThread(void) 857 { 858 PyEval_RestoreThread(saved_python_thread); 859 saved_python_thread = NULL; 860 } 861 #endif 862 863 void 864 python_end() 865 { 866 static int recurse = 0; 867 868 /* If a crash occurs while doing this, don't try again. */ 869 if (recurse != 0) 870 return; 871 872 ++recurse; 873 874 #ifdef DYNAMIC_PYTHON 875 if (hinstPython && Py_IsInitialized()) 876 { 877 # ifdef PY_CAN_RECURSE 878 PyGILState_Ensure(); 879 # else 880 Python_RestoreThread(); /* enter python */ 881 # endif 882 Py_Finalize(); 883 } 884 end_dynamic_python(); 885 #else 886 if (Py_IsInitialized()) 887 { 888 # ifdef PY_CAN_RECURSE 889 PyGILState_Ensure(); 890 # else 891 Python_RestoreThread(); /* enter python */ 892 # endif 893 Py_Finalize(); 894 } 895 #endif 896 897 --recurse; 898 } 899 900 #if (defined(DYNAMIC_PYTHON) && defined(FEAT_PYTHON3)) || defined(PROTO) 901 int 902 python_loaded() 903 { 904 return (hinstPython != 0); 905 } 906 #endif 907 908 static int 909 Python_Init(void) 910 { 911 if (!initialised) 912 { 913 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 914 PyObject *site; 915 #endif 916 917 #ifdef DYNAMIC_PYTHON 918 if (!python_enabled(TRUE)) 919 { 920 EMSG(_("E263: Sorry, this command is disabled, the Python library could not be loaded.")); 921 goto fail; 922 } 923 #endif 924 925 #ifdef PYTHON_HOME 926 Py_SetPythonHome(PYTHON_HOME); 927 #endif 928 929 init_structs(); 930 931 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 932 /* Disable implicit 'import site', because it may cause Vim to exit 933 * when it can't be found. */ 934 Py_NoSiteFlag++; 935 #endif 936 937 #if !defined(MACOS) || defined(MACOS_X_UNIX) 938 Py_Initialize(); 939 #else 940 PyMac_Initialize(); 941 #endif 942 943 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 944 /* 'import site' explicitly. */ 945 site = PyImport_ImportModule("site"); 946 if (site == NULL) 947 { 948 EMSG(_("E887: Sorry, this command is disabled, the Python's site module could not be loaded.")); 949 goto fail; 950 } 951 Py_DECREF(site); 952 #endif 953 954 /* Initialise threads, and below save the state using 955 * PyEval_SaveThread. Without the call to PyEval_SaveThread, thread 956 * specific state (such as the system trace hook), will be lost 957 * between invocations of Python code. */ 958 PyEval_InitThreads(); 959 #ifdef DYNAMIC_PYTHON 960 get_exceptions(); 961 #endif 962 963 if (PythonIO_Init_io()) 964 goto fail; 965 966 if (PythonMod_Init()) 967 goto fail; 968 969 globals = PyModule_GetDict(PyImport_AddModule("__main__")); 970 971 /* Remove the element from sys.path that was added because of our 972 * argv[0] value in PythonMod_Init(). Previously we used an empty 973 * string, but depending on the OS we then get an empty entry or 974 * the current directory in sys.path. */ 975 PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)"); 976 977 /* lock is created and acquired in PyEval_InitThreads() and thread 978 * state is created in Py_Initialize() 979 * there _PyGILState_NoteThreadState() also sets gilcounter to 1 980 * (python must have threads enabled!) 981 * so the following does both: unlock GIL and save thread state in TLS 982 * without deleting thread state 983 */ 984 #ifndef PY_CAN_RECURSE 985 saved_python_thread = 986 #endif 987 PyEval_SaveThread(); 988 989 initialised = 1; 990 } 991 992 return 0; 993 994 fail: 995 /* We call PythonIO_Flush() here to print any Python errors. 996 * This is OK, as it is possible to call this function even 997 * if PythonIO_Init_io() has not completed successfully (it will 998 * not do anything in this case). 999 */ 1000 PythonIO_Flush(); 1001 return -1; 1002 } 1003 1004 /* 1005 * External interface 1006 */ 1007 static void 1008 DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg) 1009 { 1010 #ifndef PY_CAN_RECURSE 1011 static int recursive = 0; 1012 #endif 1013 #if defined(MACOS) && !defined(MACOS_X_UNIX) 1014 GrafPtr oldPort; 1015 #endif 1016 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 1017 char *saved_locale; 1018 #endif 1019 #ifdef PY_CAN_RECURSE 1020 PyGILState_STATE pygilstate; 1021 #endif 1022 1023 #ifndef PY_CAN_RECURSE 1024 if (recursive) 1025 { 1026 EMSG(_("E659: Cannot invoke Python recursively")); 1027 return; 1028 } 1029 ++recursive; 1030 #endif 1031 1032 #if defined(MACOS) && !defined(MACOS_X_UNIX) 1033 GetPort(&oldPort); 1034 /* Check if the Python library is available */ 1035 if ((Ptr)PyMac_Initialize == (Ptr)kUnresolvedCFragSymbolAddress) 1036 goto theend; 1037 #endif 1038 if (Python_Init()) 1039 goto theend; 1040 1041 init_range(arg); 1042 1043 Python_Release_Vim(); /* leave vim */ 1044 1045 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 1046 /* Python only works properly when the LC_NUMERIC locale is "C". */ 1047 saved_locale = setlocale(LC_NUMERIC, NULL); 1048 if (saved_locale == NULL || STRCMP(saved_locale, "C") == 0) 1049 saved_locale = NULL; 1050 else 1051 { 1052 /* Need to make a copy, value may change when setting new locale. */ 1053 saved_locale = (char *) PY_STRSAVE(saved_locale); 1054 (void)setlocale(LC_NUMERIC, "C"); 1055 } 1056 #endif 1057 1058 #ifdef PY_CAN_RECURSE 1059 pygilstate = PyGILState_Ensure(); 1060 #else 1061 Python_RestoreThread(); /* enter python */ 1062 #endif 1063 1064 run((char *) cmd, arg 1065 #ifdef PY_CAN_RECURSE 1066 , &pygilstate 1067 #endif 1068 ); 1069 1070 #ifdef PY_CAN_RECURSE 1071 PyGILState_Release(pygilstate); 1072 #else 1073 Python_SaveThread(); /* leave python */ 1074 #endif 1075 1076 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 1077 if (saved_locale != NULL) 1078 { 1079 (void)setlocale(LC_NUMERIC, saved_locale); 1080 PyMem_Free(saved_locale); 1081 } 1082 #endif 1083 1084 Python_Lock_Vim(); /* enter vim */ 1085 PythonIO_Flush(); 1086 #if defined(MACOS) && !defined(MACOS_X_UNIX) 1087 SetPort(oldPort); 1088 #endif 1089 1090 theend: 1091 #ifndef PY_CAN_RECURSE 1092 --recursive; 1093 #endif 1094 return; 1095 } 1096 1097 /* 1098 * ":python" 1099 */ 1100 void 1101 ex_python(exarg_T *eap) 1102 { 1103 char_u *script; 1104 1105 script = script_get(eap, eap->arg); 1106 if (!eap->skip) 1107 { 1108 DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script, 1109 (rangeinitializer) init_range_cmd, 1110 (runner) run_cmd, 1111 (void *) eap); 1112 } 1113 vim_free(script); 1114 } 1115 1116 #define BUFFER_SIZE 1024 1117 1118 /* 1119 * ":pyfile" 1120 */ 1121 void 1122 ex_pyfile(exarg_T *eap) 1123 { 1124 static char buffer[BUFFER_SIZE]; 1125 const char *file = (char *)eap->arg; 1126 char *p; 1127 1128 /* Have to do it like this. PyRun_SimpleFile requires you to pass a 1129 * stdio file pointer, but Vim and the Python DLL are compiled with 1130 * different options under Windows, meaning that stdio pointers aren't 1131 * compatible between the two. Yuk. 1132 * 1133 * Put the string "execfile('file')" into buffer. But, we need to 1134 * escape any backslashes or single quotes in the file name, so that 1135 * Python won't mangle the file name. 1136 */ 1137 strcpy(buffer, "execfile('"); 1138 p = buffer + 10; /* size of "execfile('" */ 1139 1140 while (*file && p < buffer + (BUFFER_SIZE - 3)) 1141 { 1142 if (*file == '\\' || *file == '\'') 1143 *p++ = '\\'; 1144 *p++ = *file++; 1145 } 1146 1147 /* If we didn't finish the file name, we hit a buffer overflow */ 1148 if (*file != '\0') 1149 return; 1150 1151 /* Put in the terminating "')" and a null */ 1152 *p++ = '\''; 1153 *p++ = ')'; 1154 *p++ = '\0'; 1155 1156 /* Execute the file */ 1157 DoPyCommand(buffer, 1158 (rangeinitializer) init_range_cmd, 1159 (runner) run_cmd, 1160 (void *) eap); 1161 } 1162 1163 void 1164 ex_pydo(exarg_T *eap) 1165 { 1166 DoPyCommand((char *)eap->arg, 1167 (rangeinitializer) init_range_cmd, 1168 (runner)run_do, 1169 (void *)eap); 1170 } 1171 1172 /****************************************************** 1173 * 2. Python output stream: writes output via [e]msg(). 1174 */ 1175 1176 /* Implementation functions 1177 */ 1178 1179 static PyObject * 1180 OutputGetattr(PyObject *self, char *name) 1181 { 1182 if (strcmp(name, "softspace") == 0) 1183 return PyInt_FromLong(((OutputObject *)(self))->softspace); 1184 else if (strcmp(name, "__members__") == 0) 1185 return ObjectDir(NULL, OutputAttrs); 1186 1187 return Py_FindMethod(OutputMethods, self, name); 1188 } 1189 1190 /****************************************************** 1191 * 3. Implementation of the Vim module for Python 1192 */ 1193 1194 /* Window type - Implementation functions 1195 * -------------------------------------- 1196 */ 1197 1198 #define WindowType_Check(obj) ((obj)->ob_type == &WindowType) 1199 1200 /* Buffer type - Implementation functions 1201 * -------------------------------------- 1202 */ 1203 1204 #define BufferType_Check(obj) ((obj)->ob_type == &BufferType) 1205 1206 static PyInt BufferAssItem(PyObject *, PyInt, PyObject *); 1207 static PyInt BufferAssSlice(PyObject *, PyInt, PyInt, PyObject *); 1208 1209 /* Line range type - Implementation functions 1210 * -------------------------------------- 1211 */ 1212 1213 #define RangeType_Check(obj) ((obj)->ob_type == &RangeType) 1214 1215 static PyInt RangeAssItem(PyObject *, PyInt, PyObject *); 1216 static PyInt RangeAssSlice(PyObject *, PyInt, PyInt, PyObject *); 1217 1218 /* Current objects type - Implementation functions 1219 * ----------------------------------------------- 1220 */ 1221 1222 static PySequenceMethods BufferAsSeq = { 1223 (PyInquiry) BufferLength, /* sq_length, len(x) */ 1224 (binaryfunc) 0, /* BufferConcat, sq_concat, x+y */ 1225 (PyIntArgFunc) 0, /* BufferRepeat, sq_repeat, x*n */ 1226 (PyIntArgFunc) BufferItem, /* sq_item, x[i] */ 1227 (PyIntIntArgFunc) BufferSlice, /* sq_slice, x[i:j] */ 1228 (PyIntObjArgProc) BufferAssItem, /* sq_ass_item, x[i]=v */ 1229 (PyIntIntObjArgProc) BufferAssSlice, /* sq_ass_slice, x[i:j]=v */ 1230 (objobjproc) 0, 1231 (binaryfunc) 0, 1232 0, 1233 }; 1234 1235 /* Buffer object - Implementation 1236 */ 1237 1238 static PyObject * 1239 BufferGetattr(PyObject *self, char *name) 1240 { 1241 PyObject *r; 1242 1243 if ((r = BufferAttrValid((BufferObject *)(self), name))) 1244 return r; 1245 1246 if (CheckBuffer((BufferObject *)(self))) 1247 return NULL; 1248 1249 r = BufferAttr((BufferObject *)(self), name); 1250 if (r || PyErr_Occurred()) 1251 return r; 1252 else 1253 return Py_FindMethod(BufferMethods, self, name); 1254 } 1255 1256 /******************/ 1257 1258 static PyInt 1259 BufferAssItem(PyObject *self, PyInt n, PyObject *val) 1260 { 1261 return RBAsItem((BufferObject *)(self), n, val, 1, -1, NULL); 1262 } 1263 1264 static PyInt 1265 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) 1266 { 1267 return RBAsSlice((BufferObject *)(self), lo, hi, val, 1, -1, NULL); 1268 } 1269 1270 static PySequenceMethods RangeAsSeq = { 1271 (PyInquiry) RangeLength, /* sq_length, len(x) */ 1272 (binaryfunc) 0, /* RangeConcat, */ /* sq_concat, x+y */ 1273 (PyIntArgFunc) 0, /* RangeRepeat, */ /* sq_repeat, x*n */ 1274 (PyIntArgFunc) RangeItem, /* sq_item, x[i] */ 1275 (PyIntIntArgFunc) RangeSlice, /* sq_slice, x[i:j] */ 1276 (PyIntObjArgProc) RangeAssItem, /* sq_ass_item, x[i]=v */ 1277 (PyIntIntObjArgProc) RangeAssSlice, /* sq_ass_slice, x[i:j]=v */ 1278 (objobjproc) 0, 1279 #if PY_MAJOR_VERSION >= 2 1280 (binaryfunc) 0, 1281 0, 1282 #endif 1283 }; 1284 1285 /* Line range object - Implementation 1286 */ 1287 1288 static PyObject * 1289 RangeGetattr(PyObject *self, char *name) 1290 { 1291 if (strcmp(name, "start") == 0) 1292 return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->start - 1); 1293 else if (strcmp(name, "end") == 0) 1294 return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->end - 1); 1295 else if (strcmp(name, "__members__") == 0) 1296 return ObjectDir(NULL, RangeAttrs); 1297 else 1298 return Py_FindMethod(RangeMethods, self, name); 1299 } 1300 1301 /****************/ 1302 1303 static PyInt 1304 RangeAssItem(PyObject *self, PyInt n, PyObject *val) 1305 { 1306 return RBAsItem(((RangeObject *)(self))->buf, n, val, 1307 ((RangeObject *)(self))->start, 1308 ((RangeObject *)(self))->end, 1309 &((RangeObject *)(self))->end); 1310 } 1311 1312 static PyInt 1313 RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) 1314 { 1315 return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val, 1316 ((RangeObject *)(self))->start, 1317 ((RangeObject *)(self))->end, 1318 &((RangeObject *)(self))->end); 1319 } 1320 1321 /* TabPage object - Implementation 1322 */ 1323 1324 static PyObject * 1325 TabPageGetattr(PyObject *self, char *name) 1326 { 1327 PyObject *r; 1328 1329 if ((r = TabPageAttrValid((TabPageObject *)(self), name))) 1330 return r; 1331 1332 if (CheckTabPage((TabPageObject *)(self))) 1333 return NULL; 1334 1335 r = TabPageAttr((TabPageObject *)(self), name); 1336 if (r || PyErr_Occurred()) 1337 return r; 1338 else 1339 return Py_FindMethod(TabPageMethods, self, name); 1340 } 1341 1342 /* Window object - Implementation 1343 */ 1344 1345 static PyObject * 1346 WindowGetattr(PyObject *self, char *name) 1347 { 1348 PyObject *r; 1349 1350 if ((r = WindowAttrValid((WindowObject *)(self), name))) 1351 return r; 1352 1353 if (CheckWindow((WindowObject *)(self))) 1354 return NULL; 1355 1356 r = WindowAttr((WindowObject *)(self), name); 1357 if (r || PyErr_Occurred()) 1358 return r; 1359 else 1360 return Py_FindMethod(WindowMethods, self, name); 1361 } 1362 1363 /* Tab page list object - Definitions 1364 */ 1365 1366 static PySequenceMethods TabListAsSeq = { 1367 (PyInquiry) TabListLength, /* sq_length, len(x) */ 1368 (binaryfunc) 0, /* sq_concat, x+y */ 1369 (PyIntArgFunc) 0, /* sq_repeat, x*n */ 1370 (PyIntArgFunc) TabListItem, /* sq_item, x[i] */ 1371 (PyIntIntArgFunc) 0, /* sq_slice, x[i:j] */ 1372 (PyIntObjArgProc) 0, /* sq_ass_item, x[i]=v */ 1373 (PyIntIntObjArgProc) 0, /* sq_ass_slice, x[i:j]=v */ 1374 (objobjproc) 0, 1375 #if PY_MAJOR_VERSION >= 2 1376 (binaryfunc) 0, 1377 0, 1378 #endif 1379 }; 1380 1381 /* Window list object - Definitions 1382 */ 1383 1384 static PySequenceMethods WinListAsSeq = { 1385 (PyInquiry) WinListLength, /* sq_length, len(x) */ 1386 (binaryfunc) 0, /* sq_concat, x+y */ 1387 (PyIntArgFunc) 0, /* sq_repeat, x*n */ 1388 (PyIntArgFunc) WinListItem, /* sq_item, x[i] */ 1389 (PyIntIntArgFunc) 0, /* sq_slice, x[i:j] */ 1390 (PyIntObjArgProc) 0, /* sq_ass_item, x[i]=v */ 1391 (PyIntIntObjArgProc) 0, /* sq_ass_slice, x[i:j]=v */ 1392 (objobjproc) 0, 1393 #if PY_MAJOR_VERSION >= 2 1394 (binaryfunc) 0, 1395 0, 1396 #endif 1397 }; 1398 1399 /* External interface 1400 */ 1401 1402 void 1403 python_buffer_free(buf_T *buf) 1404 { 1405 if (BUF_PYTHON_REF(buf) != NULL) 1406 { 1407 BufferObject *bp = BUF_PYTHON_REF(buf); 1408 bp->buf = INVALID_BUFFER_VALUE; 1409 BUF_PYTHON_REF(buf) = NULL; 1410 } 1411 } 1412 1413 #if defined(FEAT_WINDOWS) || defined(PROTO) 1414 void 1415 python_window_free(win_T *win) 1416 { 1417 if (WIN_PYTHON_REF(win) != NULL) 1418 { 1419 WindowObject *wp = WIN_PYTHON_REF(win); 1420 wp->win = INVALID_WINDOW_VALUE; 1421 WIN_PYTHON_REF(win) = NULL; 1422 } 1423 } 1424 1425 void 1426 python_tabpage_free(tabpage_T *tab) 1427 { 1428 if (TAB_PYTHON_REF(tab) != NULL) 1429 { 1430 TabPageObject *tp = TAB_PYTHON_REF(tab); 1431 tp->tab = INVALID_TABPAGE_VALUE; 1432 TAB_PYTHON_REF(tab) = NULL; 1433 } 1434 } 1435 #endif 1436 1437 static int 1438 PythonMod_Init(void) 1439 { 1440 /* The special value is removed from sys.path in Python_Init(). */ 1441 static char *(argv[2]) = {"/must>not&exist/foo", NULL}; 1442 1443 if (init_types()) 1444 return -1; 1445 1446 /* Set sys.argv[] to avoid a crash in warn(). */ 1447 PySys_SetArgv(1, argv); 1448 1449 vim_module = Py_InitModule4("vim", VimMethods, (char *)NULL, 1450 (PyObject *)NULL, PYTHON_API_VERSION); 1451 1452 if (populate_module(vim_module)) 1453 return -1; 1454 1455 if (init_sys_path()) 1456 return -1; 1457 1458 return 0; 1459 } 1460 1461 /************************************************************************* 1462 * 4. Utility functions for handling the interface between Vim and Python. 1463 */ 1464 1465 /* Convert a Vim line into a Python string. 1466 * All internal newlines are replaced by null characters. 1467 * 1468 * On errors, the Python exception data is set, and NULL is returned. 1469 */ 1470 static PyObject * 1471 LineToString(const char *str) 1472 { 1473 PyObject *result; 1474 PyInt len = strlen(str); 1475 char *p; 1476 1477 /* Allocate an Python string object, with uninitialised contents. We 1478 * must do it this way, so that we can modify the string in place 1479 * later. See the Python source, Objects/stringobject.c for details. 1480 */ 1481 result = PyString_FromStringAndSize(NULL, len); 1482 if (result == NULL) 1483 return NULL; 1484 1485 p = PyString_AsString(result); 1486 1487 while (*str) 1488 { 1489 if (*str == '\n') 1490 *p = '\0'; 1491 else 1492 *p = *str; 1493 1494 ++p; 1495 ++str; 1496 } 1497 1498 return result; 1499 } 1500 1501 static PyObject * 1502 DictionaryGetattr(PyObject *self, char *name) 1503 { 1504 DictionaryObject *this = ((DictionaryObject *) (self)); 1505 1506 if (strcmp(name, "locked") == 0) 1507 return PyInt_FromLong(this->dict->dv_lock); 1508 else if (strcmp(name, "scope") == 0) 1509 return PyInt_FromLong(this->dict->dv_scope); 1510 else if (strcmp(name, "__members__") == 0) 1511 return ObjectDir(NULL, DictionaryAttrs); 1512 1513 return Py_FindMethod(DictionaryMethods, self, name); 1514 } 1515 1516 static PyObject * 1517 ListGetattr(PyObject *self, char *name) 1518 { 1519 if (strcmp(name, "locked") == 0) 1520 return PyInt_FromLong(((ListObject *)(self))->list->lv_lock); 1521 else if (strcmp(name, "__members__") == 0) 1522 return ObjectDir(NULL, ListAttrs); 1523 1524 return Py_FindMethod(ListMethods, self, name); 1525 } 1526 1527 static PyObject * 1528 FunctionGetattr(PyObject *self, char *name) 1529 { 1530 FunctionObject *this = (FunctionObject *)(self); 1531 1532 if (strcmp(name, "name") == 0) 1533 return PyString_FromString((char *)(this->name)); 1534 else if (strcmp(name, "__members__") == 0) 1535 return ObjectDir(NULL, FunctionAttrs); 1536 else 1537 return Py_FindMethod(FunctionMethods, self, name); 1538 } 1539 1540 void 1541 do_pyeval (char_u *str, typval_T *rettv) 1542 { 1543 DoPyCommand((char *) str, 1544 (rangeinitializer) init_range_eval, 1545 (runner) run_eval, 1546 (void *) rettv); 1547 switch(rettv->v_type) 1548 { 1549 case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break; 1550 case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break; 1551 case VAR_FUNC: func_ref(rettv->vval.v_string); break; 1552 case VAR_UNKNOWN: 1553 rettv->v_type = VAR_NUMBER; 1554 rettv->vval.v_number = 0; 1555 break; 1556 } 1557 } 1558 1559 /* Don't generate a prototype for the next function, it generates an error on 1560 * newer Python versions. */ 1561 #if PYTHON_API_VERSION < 1007 /* Python 1.4 */ && !defined(PROTO) 1562 1563 char * 1564 Py_GetProgramName(void) 1565 { 1566 return "vim"; 1567 } 1568 #endif /* Python 1.4 */ 1569 1570 int 1571 set_ref_in_python (int copyID) 1572 { 1573 return set_ref_in_py(copyID); 1574 } 1575