1 /* vi:set ts=8 sts=4 sw=4: 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 /* 21 * Roland Puntaier 2009/sept/16: 22 * Adaptations to support both python3.x and python2.x 23 */ 24 25 /* uncomment this if used with the debug version of python */ 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 #include "vim.h" 34 35 #include <limits.h> 36 37 /* Python.h defines _POSIX_THREADS itself (if needed) */ 38 #ifdef _POSIX_THREADS 39 # undef _POSIX_THREADS 40 #endif 41 42 #if defined(_WIN32) && defined(HAVE_FCNTL_H) 43 # undef HAVE_FCNTL_H 44 #endif 45 46 #ifdef _DEBUG 47 # undef _DEBUG 48 #endif 49 50 #ifdef F_BLANK 51 # undef F_BLANK 52 #endif 53 54 #ifdef HAVE_STDARG_H 55 # undef HAVE_STDARG_H /* Python's config.h defines it as well. */ 56 #endif 57 #ifdef _POSIX_C_SOURCE /* defined in feature.h */ 58 # undef _POSIX_C_SOURCE 59 #endif 60 #ifdef _XOPEN_SOURCE 61 # undef _XOPEN_SOURCE /* pyconfig.h defines it as well. */ 62 #endif 63 64 #define PY_SSIZE_T_CLEAN 65 66 #include <Python.h> 67 68 #if defined(MACOS) && !defined(MACOS_X_UNIX) 69 # include "macglue.h" 70 # include <CodeFragments.h> 71 #endif 72 #undef main /* Defined in python.h - aargh */ 73 #undef HAVE_FCNTL_H /* Clash with os_win32.h */ 74 75 /* The "surrogateescape" error handler is new in Python 3.1 */ 76 #if PY_VERSION_HEX >= 0x030100f0 77 # define CODEC_ERROR_HANDLER "surrogateescape" 78 #else 79 # define CODEC_ERROR_HANDLER NULL 80 #endif 81 82 /* Python 3 does not support CObjects, always use Capsules */ 83 #define PY_USE_CAPSULE 84 85 #define PyInt Py_ssize_t 86 #define PyString_Check(obj) PyUnicode_Check(obj) 87 #define PyString_FromString(repr) PyUnicode_FromString(repr) 88 #define PyString_FromFormat PyUnicode_FromFormat 89 #define PyInt_Check(obj) PyLong_Check(obj) 90 #define PyInt_FromLong(i) PyLong_FromLong(i) 91 #define PyInt_AsLong(obj) PyLong_AsLong(obj) 92 #define Py_ssize_t_fmt "n" 93 #define Py_bytes_fmt "y" 94 95 #if defined(DYNAMIC_PYTHON3) || defined(PROTO) 96 97 # ifndef WIN3264 98 # include <dlfcn.h> 99 # define FARPROC void* 100 # define HINSTANCE void* 101 # if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL) 102 # define load_dll(n) dlopen((n), RTLD_LAZY) 103 # else 104 # define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL) 105 # endif 106 # define close_dll dlclose 107 # define symbol_from_dll dlsym 108 # else 109 # define load_dll vimLoadLib 110 # define close_dll FreeLibrary 111 # define symbol_from_dll GetProcAddress 112 # endif 113 /* 114 * Wrapper defines 115 */ 116 # undef PyArg_Parse 117 # define PyArg_Parse py3_PyArg_Parse 118 # undef PyArg_ParseTuple 119 # define PyArg_ParseTuple py3_PyArg_ParseTuple 120 # define PyMem_Free py3_PyMem_Free 121 # define PyMem_Malloc py3_PyMem_Malloc 122 # define PyDict_SetItemString py3_PyDict_SetItemString 123 # define PyErr_BadArgument py3_PyErr_BadArgument 124 # define PyErr_Clear py3_PyErr_Clear 125 # define PyErr_Format py3_PyErr_Format 126 # define PyErr_PrintEx py3_PyErr_PrintEx 127 # define PyErr_NoMemory py3_PyErr_NoMemory 128 # define PyErr_Occurred py3_PyErr_Occurred 129 # define PyErr_PrintEx py3_PyErr_PrintEx 130 # define PyErr_SetNone py3_PyErr_SetNone 131 # define PyErr_SetString py3_PyErr_SetString 132 # define PyErr_SetObject py3_PyErr_SetObject 133 # define PyErr_ExceptionMatches py3_PyErr_ExceptionMatches 134 # define PyEval_InitThreads py3_PyEval_InitThreads 135 # define PyEval_RestoreThread py3_PyEval_RestoreThread 136 # define PyEval_SaveThread py3_PyEval_SaveThread 137 # define PyGILState_Ensure py3_PyGILState_Ensure 138 # define PyGILState_Release py3_PyGILState_Release 139 # define PyLong_AsLong py3_PyLong_AsLong 140 # define PyLong_FromLong py3_PyLong_FromLong 141 # define PyList_GetItem py3_PyList_GetItem 142 # define PyList_Append py3_PyList_Append 143 # define PyList_Insert py3_PyList_Insert 144 # define PyList_New py3_PyList_New 145 # define PyList_SetItem py3_PyList_SetItem 146 # define PyList_Size py3_PyList_Size 147 # define PySequence_Check py3_PySequence_Check 148 # define PySequence_Size py3_PySequence_Size 149 # define PySequence_GetItem py3_PySequence_GetItem 150 # define PySequence_Fast py3_PySequence_Fast 151 # define PyTuple_Size py3_PyTuple_Size 152 # define PyTuple_GetItem py3_PyTuple_GetItem 153 # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx 154 # define PyImport_ImportModule py3_PyImport_ImportModule 155 # define PyObject_Init py3__PyObject_Init 156 # define PyDict_New py3_PyDict_New 157 # define PyDict_GetItemString py3_PyDict_GetItemString 158 # define PyDict_Next py3_PyDict_Next 159 # define PyMapping_Check py3_PyMapping_Check 160 # define PyMapping_Keys py3_PyMapping_Keys 161 # define PyIter_Next py3_PyIter_Next 162 # define PyObject_GetIter py3_PyObject_GetIter 163 # define PyObject_Repr py3_PyObject_Repr 164 # define PyObject_GetItem py3_PyObject_GetItem 165 # define PyObject_IsTrue py3_PyObject_IsTrue 166 # define PyModule_GetDict py3_PyModule_GetDict 167 #undef PyRun_SimpleString 168 # define PyRun_SimpleString py3_PyRun_SimpleString 169 #undef PyRun_String 170 # define PyRun_String py3_PyRun_String 171 # define PyObject_GetAttrString py3_PyObject_GetAttrString 172 # define PyObject_HasAttrString py3_PyObject_HasAttrString 173 # define PyObject_SetAttrString py3_PyObject_SetAttrString 174 # define PyObject_CallFunctionObjArgs py3_PyObject_CallFunctionObjArgs 175 # define _PyObject_CallFunction_SizeT py3__PyObject_CallFunction_SizeT 176 # define PyObject_Call py3_PyObject_Call 177 # define PyEval_GetLocals py3_PyEval_GetLocals 178 # define PyEval_GetGlobals py3_PyEval_GetGlobals 179 # define PySys_SetObject py3_PySys_SetObject 180 # define PySys_GetObject py3_PySys_GetObject 181 # define PySys_SetArgv py3_PySys_SetArgv 182 # define PyType_Ready py3_PyType_Ready 183 #undef Py_BuildValue 184 # define Py_BuildValue py3_Py_BuildValue 185 # define Py_SetPythonHome py3_Py_SetPythonHome 186 # define Py_Initialize py3_Py_Initialize 187 # define Py_Finalize py3_Py_Finalize 188 # define Py_IsInitialized py3_Py_IsInitialized 189 # define _Py_NoneStruct (*py3__Py_NoneStruct) 190 # define _Py_FalseStruct (*py3__Py_FalseStruct) 191 # define _Py_TrueStruct (*py3__Py_TrueStruct) 192 # define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented) 193 # define PyModule_AddObject py3_PyModule_AddObject 194 # define PyImport_AppendInittab py3_PyImport_AppendInittab 195 # define PyImport_AddModule py3_PyImport_AddModule 196 # if PY_VERSION_HEX >= 0x030300f0 197 # undef _PyUnicode_AsString 198 # define _PyUnicode_AsString py3_PyUnicode_AsUTF8 199 # else 200 # define _PyUnicode_AsString py3__PyUnicode_AsString 201 # endif 202 # undef PyUnicode_AsEncodedString 203 # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString 204 # undef PyBytes_AsString 205 # define PyBytes_AsString py3_PyBytes_AsString 206 # define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize 207 # undef PyBytes_FromString 208 # define PyBytes_FromString py3_PyBytes_FromString 209 # define PyFloat_FromDouble py3_PyFloat_FromDouble 210 # define PyFloat_AsDouble py3_PyFloat_AsDouble 211 # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr 212 # define PyType_Type (*py3_PyType_Type) 213 # define PySlice_Type (*py3_PySlice_Type) 214 # define PyFloat_Type (*py3_PyFloat_Type) 215 # define PyNumber_Check (*py3_PyNumber_Check) 216 # define PyNumber_Long (*py3_PyNumber_Long) 217 # define PyBool_Type (*py3_PyBool_Type) 218 # define PyErr_NewException py3_PyErr_NewException 219 # ifdef Py_DEBUG 220 # define _Py_NegativeRefcount py3__Py_NegativeRefcount 221 # define _Py_RefTotal (*py3__Py_RefTotal) 222 # define _Py_Dealloc py3__Py_Dealloc 223 # define PyModule_Create2TraceRefs py3_PyModule_Create2TraceRefs 224 # else 225 # define PyModule_Create2 py3_PyModule_Create2 226 # endif 227 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) 228 # define _PyObject_DebugMalloc py3__PyObject_DebugMalloc 229 # define _PyObject_DebugFree py3__PyObject_DebugFree 230 # else 231 # define PyObject_Malloc py3_PyObject_Malloc 232 # define PyObject_Free py3_PyObject_Free 233 # endif 234 # define _PyObject_GC_New py3__PyObject_GC_New 235 # define PyObject_GC_Del py3_PyObject_GC_Del 236 # define PyObject_GC_UnTrack py3_PyObject_GC_UnTrack 237 # define PyType_GenericAlloc py3_PyType_GenericAlloc 238 # define PyType_GenericNew py3_PyType_GenericNew 239 # undef PyUnicode_FromString 240 # define PyUnicode_FromString py3_PyUnicode_FromString 241 # ifndef PyUnicode_FromFormat 242 # define PyUnicode_FromFormat py3_PyUnicode_FromFormat 243 # else 244 # define Py_UNICODE_USE_UCS_FUNCTIONS 245 # ifdef Py_UNICODE_WIDE 246 # define PyUnicodeUCS4_FromFormat py3_PyUnicodeUCS4_FromFormat 247 # else 248 # define PyUnicodeUCS2_FromFormat py3_PyUnicodeUCS2_FromFormat 249 # endif 250 # endif 251 # undef PyUnicode_Decode 252 # define PyUnicode_Decode py3_PyUnicode_Decode 253 # define PyType_IsSubtype py3_PyType_IsSubtype 254 # define PyCapsule_New py3_PyCapsule_New 255 # define PyCapsule_GetPointer py3_PyCapsule_GetPointer 256 257 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) 258 # undef PyObject_NEW 259 # define PyObject_NEW(type, typeobj) \ 260 ( (type *) PyObject_Init( \ 261 (PyObject *) _PyObject_DebugMalloc( _PyObject_SIZE(typeobj) ), (typeobj)) ) 262 # endif 263 264 /* 265 * Pointers for dynamic link 266 */ 267 static int (*py3_PySys_SetArgv)(int, wchar_t **); 268 static void (*py3_Py_SetPythonHome)(wchar_t *home); 269 static void (*py3_Py_Initialize)(void); 270 static PyObject* (*py3_PyList_New)(Py_ssize_t size); 271 static PyGILState_STATE (*py3_PyGILState_Ensure)(void); 272 static void (*py3_PyGILState_Release)(PyGILState_STATE); 273 static int (*py3_PySys_SetObject)(char *, PyObject *); 274 static PyObject* (*py3_PySys_GetObject)(char *); 275 static int (*py3_PyList_Append)(PyObject *, PyObject *); 276 static int (*py3_PyList_Insert)(PyObject *, int, PyObject *); 277 static Py_ssize_t (*py3_PyList_Size)(PyObject *); 278 static int (*py3_PySequence_Check)(PyObject *); 279 static Py_ssize_t (*py3_PySequence_Size)(PyObject *); 280 static PyObject* (*py3_PySequence_GetItem)(PyObject *, Py_ssize_t); 281 static PyObject* (*py3_PySequence_Fast)(PyObject *, const char *); 282 static Py_ssize_t (*py3_PyTuple_Size)(PyObject *); 283 static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t); 284 static int (*py3_PyMapping_Check)(PyObject *); 285 static PyObject* (*py3_PyMapping_Keys)(PyObject *); 286 static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length, 287 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength); 288 static PyObject* (*py3_PyErr_NoMemory)(void); 289 static void (*py3_Py_Finalize)(void); 290 static void (*py3_PyErr_SetString)(PyObject *, const char *); 291 static void (*py3_PyErr_SetObject)(PyObject *, PyObject *); 292 static int (*py3_PyErr_ExceptionMatches)(PyObject *); 293 static int (*py3_PyRun_SimpleString)(char *); 294 static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *); 295 static PyObject* (*py3_PyObject_GetAttrString)(PyObject *, const char *); 296 static int (*py3_PyObject_HasAttrString)(PyObject *, const char *); 297 static PyObject* (*py3_PyObject_SetAttrString)(PyObject *, const char *, PyObject *); 298 static PyObject* (*py3_PyObject_CallFunctionObjArgs)(PyObject *, ...); 299 static PyObject* (*py3__PyObject_CallFunction_SizeT)(PyObject *, char *, ...); 300 static PyObject* (*py3_PyObject_Call)(PyObject *, PyObject *, PyObject *); 301 static PyObject* (*py3_PyEval_GetGlobals)(); 302 static PyObject* (*py3_PyEval_GetLocals)(); 303 static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t); 304 static PyObject* (*py3_PyImport_ImportModule)(const char *); 305 static PyObject* (*py3_PyImport_AddModule)(const char *); 306 static int (*py3_PyErr_BadArgument)(void); 307 static PyObject* (*py3_PyErr_Occurred)(void); 308 static PyObject* (*py3_PyModule_GetDict)(PyObject *); 309 static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *); 310 static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *); 311 static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **); 312 static PyObject* (*py3_PyLong_FromLong)(long); 313 static PyObject* (*py3_PyDict_New)(void); 314 static PyObject* (*py3_PyIter_Next)(PyObject *); 315 static PyObject* (*py3_PyObject_GetIter)(PyObject *); 316 static PyObject* (*py3_PyObject_Repr)(PyObject *); 317 static PyObject* (*py3_PyObject_GetItem)(PyObject *, PyObject *); 318 static int (*py3_PyObject_IsTrue)(PyObject *); 319 static PyObject* (*py3_Py_BuildValue)(char *, ...); 320 static int (*py3_PyType_Ready)(PyTypeObject *type); 321 static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); 322 static PyObject* (*py3_PyUnicode_FromString)(const char *u); 323 # ifndef Py_UNICODE_USE_UCS_FUNCTIONS 324 static PyObject* (*py3_PyUnicode_FromFormat)(const char *u, ...); 325 # else 326 # ifdef Py_UNICODE_WIDE 327 static PyObject* (*py3_PyUnicodeUCS4_FromFormat)(const char *u, ...); 328 # else 329 static PyObject* (*py3_PyUnicodeUCS2_FromFormat)(const char *u, ...); 330 # endif 331 # endif 332 static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size, 333 const char *encoding, const char *errors); 334 static long (*py3_PyLong_AsLong)(PyObject *); 335 static void (*py3_PyErr_SetNone)(PyObject *); 336 static void (*py3_PyEval_InitThreads)(void); 337 static void(*py3_PyEval_RestoreThread)(PyThreadState *); 338 static PyThreadState*(*py3_PyEval_SaveThread)(void); 339 static int (*py3_PyArg_Parse)(PyObject *, char *, ...); 340 static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...); 341 static int (*py3_PyMem_Free)(void *); 342 static void* (*py3_PyMem_Malloc)(size_t); 343 static int (*py3_Py_IsInitialized)(void); 344 static void (*py3_PyErr_Clear)(void); 345 static PyObject* (*py3_PyErr_Format)(PyObject *, const char *, ...); 346 static void (*py3_PyErr_PrintEx)(int); 347 static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *); 348 static iternextfunc py3__PyObject_NextNotImplemented; 349 static PyObject* py3__Py_NoneStruct; 350 static PyObject* py3__Py_FalseStruct; 351 static PyObject* py3__Py_TrueStruct; 352 static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o); 353 static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void)); 354 # if PY_VERSION_HEX >= 0x030300f0 355 static char* (*py3_PyUnicode_AsUTF8)(PyObject *unicode); 356 # else 357 static char* (*py3__PyUnicode_AsString)(PyObject *unicode); 358 # endif 359 static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors); 360 static char* (*py3_PyBytes_AsString)(PyObject *bytes); 361 static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, Py_ssize_t *length); 362 static PyObject* (*py3_PyBytes_FromString)(char *str); 363 static PyObject* (*py3_PyFloat_FromDouble)(double num); 364 static double (*py3_PyFloat_AsDouble)(PyObject *); 365 static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name); 366 static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems); 367 static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds); 368 static PyTypeObject* py3_PyType_Type; 369 static PyTypeObject* py3_PySlice_Type; 370 static PyTypeObject* py3_PyFloat_Type; 371 static PyTypeObject* py3_PyBool_Type; 372 static int (*py3_PyNumber_Check)(PyObject *); 373 static PyObject* (*py3_PyNumber_Long)(PyObject *); 374 static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict); 375 static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor); 376 static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *); 377 # ifdef Py_DEBUG 378 static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op); 379 static Py_ssize_t* py3__Py_RefTotal; 380 static void (*py3__Py_Dealloc)(PyObject *obj); 381 static PyObject* (*py3_PyModule_Create2TraceRefs)(struct PyModuleDef* module, int module_api_version); 382 # else 383 static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version); 384 # endif 385 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) 386 static void (*py3__PyObject_DebugFree)(void*); 387 static void* (*py3__PyObject_DebugMalloc)(size_t); 388 # else 389 static void (*py3_PyObject_Free)(void*); 390 static void* (*py3_PyObject_Malloc)(size_t); 391 # endif 392 static PyObject*(*py3__PyObject_GC_New)(PyTypeObject *); 393 static void(*py3_PyObject_GC_Del)(void *); 394 static void(*py3_PyObject_GC_UnTrack)(void *); 395 static int (*py3_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *); 396 397 static HINSTANCE hinstPy3 = 0; /* Instance of python.dll */ 398 399 /* Imported exception objects */ 400 static PyObject *p3imp_PyExc_AttributeError; 401 static PyObject *p3imp_PyExc_IndexError; 402 static PyObject *p3imp_PyExc_KeyError; 403 static PyObject *p3imp_PyExc_KeyboardInterrupt; 404 static PyObject *p3imp_PyExc_TypeError; 405 static PyObject *p3imp_PyExc_ValueError; 406 static PyObject *p3imp_PyExc_RuntimeError; 407 static PyObject *p3imp_PyExc_ImportError; 408 static PyObject *p3imp_PyExc_OverflowError; 409 410 # define PyExc_AttributeError p3imp_PyExc_AttributeError 411 # define PyExc_IndexError p3imp_PyExc_IndexError 412 # define PyExc_KeyError p3imp_PyExc_KeyError 413 # define PyExc_KeyboardInterrupt p3imp_PyExc_KeyboardInterrupt 414 # define PyExc_TypeError p3imp_PyExc_TypeError 415 # define PyExc_ValueError p3imp_PyExc_ValueError 416 # define PyExc_RuntimeError p3imp_PyExc_RuntimeError 417 # define PyExc_ImportError p3imp_PyExc_ImportError 418 # define PyExc_OverflowError p3imp_PyExc_OverflowError 419 420 /* 421 * Table of name to function pointer of python. 422 */ 423 # define PYTHON_PROC FARPROC 424 static struct 425 { 426 char *name; 427 PYTHON_PROC *ptr; 428 } py3_funcname_table[] = 429 { 430 {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv}, 431 {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome}, 432 {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize}, 433 {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple}, 434 {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue}, 435 {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free}, 436 {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc}, 437 {"PyList_New", (PYTHON_PROC*)&py3_PyList_New}, 438 {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure}, 439 {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release}, 440 {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject}, 441 {"PySys_GetObject", (PYTHON_PROC*)&py3_PySys_GetObject}, 442 {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append}, 443 {"PyList_Insert", (PYTHON_PROC*)&py3_PyList_Insert}, 444 {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size}, 445 {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check}, 446 {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size}, 447 {"PySequence_GetItem", (PYTHON_PROC*)&py3_PySequence_GetItem}, 448 {"PySequence_Fast", (PYTHON_PROC*)&py3_PySequence_Fast}, 449 {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size}, 450 {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem}, 451 {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx}, 452 {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory}, 453 {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize}, 454 {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString}, 455 {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject}, 456 {"PyErr_ExceptionMatches", (PYTHON_PROC*)&py3_PyErr_ExceptionMatches}, 457 {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString}, 458 {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String}, 459 {"PyObject_GetAttrString", (PYTHON_PROC*)&py3_PyObject_GetAttrString}, 460 {"PyObject_HasAttrString", (PYTHON_PROC*)&py3_PyObject_HasAttrString}, 461 {"PyObject_SetAttrString", (PYTHON_PROC*)&py3_PyObject_SetAttrString}, 462 {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&py3_PyObject_CallFunctionObjArgs}, 463 {"_PyObject_CallFunction_SizeT", (PYTHON_PROC*)&py3__PyObject_CallFunction_SizeT}, 464 {"PyObject_Call", (PYTHON_PROC*)&py3_PyObject_Call}, 465 {"PyEval_GetGlobals", (PYTHON_PROC*)&py3_PyEval_GetGlobals}, 466 {"PyEval_GetLocals", (PYTHON_PROC*)&py3_PyEval_GetLocals}, 467 {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem}, 468 {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule}, 469 {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule}, 470 {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument}, 471 {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred}, 472 {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict}, 473 {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem}, 474 {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString}, 475 {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next}, 476 {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check}, 477 {"PyMapping_Keys", (PYTHON_PROC*)&py3_PyMapping_Keys}, 478 {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next}, 479 {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter}, 480 {"PyObject_Repr", (PYTHON_PROC*)&py3_PyObject_Repr}, 481 {"PyObject_GetItem", (PYTHON_PROC*)&py3_PyObject_GetItem}, 482 {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue}, 483 {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong}, 484 {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New}, 485 {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready}, 486 {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString}, 487 {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong}, 488 {"PyErr_SetNone", (PYTHON_PROC*)&py3_PyErr_SetNone}, 489 {"PyEval_InitThreads", (PYTHON_PROC*)&py3_PyEval_InitThreads}, 490 {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread}, 491 {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread}, 492 {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&py3_PyArg_Parse}, 493 {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized}, 494 {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented}, 495 {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct}, 496 {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct}, 497 {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct}, 498 {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear}, 499 {"PyErr_Format", (PYTHON_PROC*)&py3_PyErr_Format}, 500 {"PyErr_PrintEx", (PYTHON_PROC*)&py3_PyErr_PrintEx}, 501 {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init}, 502 {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject}, 503 {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab}, 504 # if PY_VERSION_HEX >= 0x030300f0 505 {"PyUnicode_AsUTF8", (PYTHON_PROC*)&py3_PyUnicode_AsUTF8}, 506 # else 507 {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString}, 508 # endif 509 # ifndef Py_UNICODE_USE_UCS_FUNCTIONS 510 {"PyUnicode_FromFormat", (PYTHON_PROC*)&py3_PyUnicode_FromFormat}, 511 # else 512 # ifdef Py_UNICODE_WIDE 513 {"PyUnicodeUCS4_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS4_FromFormat}, 514 # else 515 {"PyUnicodeUCS2_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS2_FromFormat}, 516 # endif 517 # endif 518 {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString}, 519 {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize}, 520 {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString}, 521 {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble}, 522 {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble}, 523 {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr}, 524 {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc}, 525 {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew}, 526 {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type}, 527 {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type}, 528 {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type}, 529 {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type}, 530 {"PyNumber_Check", (PYTHON_PROC*)&py3_PyNumber_Check}, 531 {"PyNumber_Long", (PYTHON_PROC*)&py3_PyNumber_Long}, 532 {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException}, 533 # ifdef Py_DEBUG 534 {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount}, 535 {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal}, 536 {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc}, 537 {"PyModule_Create2TraceRefs", (PYTHON_PROC*)&py3_PyModule_Create2TraceRefs}, 538 # else 539 {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2}, 540 # endif 541 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) 542 {"_PyObject_DebugFree", (PYTHON_PROC*)&py3__PyObject_DebugFree}, 543 {"_PyObject_DebugMalloc", (PYTHON_PROC*)&py3__PyObject_DebugMalloc}, 544 # else 545 {"PyObject_Malloc", (PYTHON_PROC*)&py3_PyObject_Malloc}, 546 {"PyObject_Free", (PYTHON_PROC*)&py3_PyObject_Free}, 547 # endif 548 {"_PyObject_GC_New", (PYTHON_PROC*)&py3__PyObject_GC_New}, 549 {"PyObject_GC_Del", (PYTHON_PROC*)&py3_PyObject_GC_Del}, 550 {"PyObject_GC_UnTrack", (PYTHON_PROC*)&py3_PyObject_GC_UnTrack}, 551 {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype}, 552 {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New}, 553 {"PyCapsule_GetPointer", (PYTHON_PROC*)&py3_PyCapsule_GetPointer}, 554 {"", NULL}, 555 }; 556 557 /* 558 * Free python.dll 559 */ 560 static void 561 end_dynamic_python3(void) 562 { 563 if (hinstPy3 != 0) 564 { 565 close_dll(hinstPy3); 566 hinstPy3 = 0; 567 } 568 } 569 570 /* 571 * Load library and get all pointers. 572 * Parameter 'libname' provides name of DLL. 573 * Return OK or FAIL. 574 */ 575 static int 576 py3_runtime_link_init(char *libname, int verbose) 577 { 578 int i; 579 void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string; 580 581 # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON) 582 /* Can't have Python and Python3 loaded at the same time. 583 * It cause a crash, because RTLD_GLOBAL is needed for 584 * standard C extension libraries of one or both python versions. */ 585 if (python_loaded()) 586 { 587 if (verbose) 588 EMSG(_("E837: This Vim cannot execute :py3 after using :python")); 589 return FAIL; 590 } 591 # endif 592 593 if (hinstPy3 != 0) 594 return OK; 595 hinstPy3 = load_dll(libname); 596 597 if (!hinstPy3) 598 { 599 if (verbose) 600 EMSG2(_(e_loadlib), libname); 601 return FAIL; 602 } 603 604 for (i = 0; py3_funcname_table[i].ptr; ++i) 605 { 606 if ((*py3_funcname_table[i].ptr = symbol_from_dll(hinstPy3, 607 py3_funcname_table[i].name)) == NULL) 608 { 609 close_dll(hinstPy3); 610 hinstPy3 = 0; 611 if (verbose) 612 EMSG2(_(e_loadfunc), py3_funcname_table[i].name); 613 return FAIL; 614 } 615 } 616 617 /* Load unicode functions separately as only the ucs2 or the ucs4 functions 618 * will be present in the library. */ 619 # if PY_VERSION_HEX >= 0x030300f0 620 ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicode_FromString"); 621 ucs_decode = symbol_from_dll(hinstPy3, "PyUnicode_Decode"); 622 ucs_as_encoded_string = symbol_from_dll(hinstPy3, 623 "PyUnicode_AsEncodedString"); 624 # else 625 ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString"); 626 ucs_decode = symbol_from_dll(hinstPy3, 627 "PyUnicodeUCS2_Decode"); 628 ucs_as_encoded_string = symbol_from_dll(hinstPy3, 629 "PyUnicodeUCS2_AsEncodedString"); 630 if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string) 631 { 632 ucs_from_string = symbol_from_dll(hinstPy3, 633 "PyUnicodeUCS4_FromString"); 634 ucs_decode = symbol_from_dll(hinstPy3, 635 "PyUnicodeUCS4_Decode"); 636 ucs_as_encoded_string = symbol_from_dll(hinstPy3, 637 "PyUnicodeUCS4_AsEncodedString"); 638 } 639 # endif 640 if (ucs_from_string && ucs_decode && ucs_as_encoded_string) 641 { 642 py3_PyUnicode_FromString = ucs_from_string; 643 py3_PyUnicode_Decode = ucs_decode; 644 py3_PyUnicode_AsEncodedString = ucs_as_encoded_string; 645 } 646 else 647 { 648 close_dll(hinstPy3); 649 hinstPy3 = 0; 650 if (verbose) 651 EMSG2(_(e_loadfunc), "PyUnicode_UCSX_*"); 652 return FAIL; 653 } 654 655 return OK; 656 } 657 658 /* 659 * If python is enabled (there is installed python on Windows system) return 660 * TRUE, else FALSE. 661 */ 662 int 663 python3_enabled(int verbose) 664 { 665 return py3_runtime_link_init(DYNAMIC_PYTHON3_DLL, verbose) == OK; 666 } 667 668 /* Load the standard Python exceptions - don't import the symbols from the 669 * DLL, as this can cause errors (importing data symbols is not reliable). 670 */ 671 static void get_py3_exceptions __ARGS((void)); 672 673 static void 674 get_py3_exceptions() 675 { 676 PyObject *exmod = PyImport_ImportModule("builtins"); 677 PyObject *exdict = PyModule_GetDict(exmod); 678 p3imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError"); 679 p3imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError"); 680 p3imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError"); 681 p3imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt"); 682 p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError"); 683 p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError"); 684 p3imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError"); 685 p3imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError"); 686 p3imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError"); 687 Py_XINCREF(p3imp_PyExc_AttributeError); 688 Py_XINCREF(p3imp_PyExc_IndexError); 689 Py_XINCREF(p3imp_PyExc_KeyError); 690 Py_XINCREF(p3imp_PyExc_KeyboardInterrupt); 691 Py_XINCREF(p3imp_PyExc_TypeError); 692 Py_XINCREF(p3imp_PyExc_ValueError); 693 Py_XINCREF(p3imp_PyExc_RuntimeError); 694 Py_XINCREF(p3imp_PyExc_ImportError); 695 Py_XINCREF(p3imp_PyExc_OverflowError); 696 Py_XDECREF(exmod); 697 } 698 #endif /* DYNAMIC_PYTHON3 */ 699 700 static int py3initialised = 0; 701 702 #define PYINITIALISED py3initialised 703 704 #define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self) 705 706 #define WIN_PYTHON_REF(win) win->w_python3_ref 707 #define BUF_PYTHON_REF(buf) buf->b_python3_ref 708 #define TAB_PYTHON_REF(tab) tab->tp_python3_ref 709 710 static void 711 call_PyObject_Free(void *p) 712 { 713 #if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) 714 _PyObject_DebugFree(p); 715 #else 716 PyObject_Free(p); 717 #endif 718 } 719 720 static PyObject * 721 call_PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds) 722 { 723 return PyType_GenericNew(type,args,kwds); 724 } 725 726 static PyObject * 727 call_PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems) 728 { 729 return PyType_GenericAlloc(type,nitems); 730 } 731 732 static PyObject *OutputGetattro(PyObject *, PyObject *); 733 static int OutputSetattro(PyObject *, PyObject *, PyObject *); 734 static PyObject *BufferGetattro(PyObject *, PyObject *); 735 static int BufferSetattro(PyObject *, PyObject *, PyObject *); 736 static PyObject *TabPageGetattro(PyObject *, PyObject *); 737 static PyObject *WindowGetattro(PyObject *, PyObject *); 738 static int WindowSetattro(PyObject *, PyObject *, PyObject *); 739 static PyObject *RangeGetattro(PyObject *, PyObject *); 740 static PyObject *CurrentGetattro(PyObject *, PyObject *); 741 static int CurrentSetattro(PyObject *, PyObject *, PyObject *); 742 static PyObject *DictionaryGetattro(PyObject *, PyObject *); 743 static int DictionarySetattro(PyObject *, PyObject *, PyObject *); 744 static PyObject *ListGetattro(PyObject *, PyObject *); 745 static int ListSetattro(PyObject *, PyObject *, PyObject *); 746 static PyObject *FunctionGetattro(PyObject *, PyObject *); 747 748 static PyObject *VimPathHook(PyObject *, PyObject *); 749 750 static struct PyModuleDef vimmodule; 751 752 #define PY_CAN_RECURSE 753 754 /* 755 * Include the code shared with if_python.c 756 */ 757 #include "if_py_both.h" 758 759 #define GET_ATTR_STRING(name, nameobj) \ 760 char *name = ""; \ 761 if (PyUnicode_Check(nameobj)) \ 762 name = _PyUnicode_AsString(nameobj) 763 764 #define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0) 765 766 /****************************************************** 767 * Internal function prototypes. 768 */ 769 770 static PyObject *Py3Init_vim(void); 771 772 /****************************************************** 773 * 1. Python interpreter main program. 774 */ 775 776 void 777 python3_end() 778 { 779 static int recurse = 0; 780 781 /* If a crash occurs while doing this, don't try again. */ 782 if (recurse != 0) 783 return; 784 785 ++recurse; 786 787 #ifdef DYNAMIC_PYTHON3 788 if (hinstPy3) 789 #endif 790 if (Py_IsInitialized()) 791 { 792 // acquire lock before finalizing 793 PyGILState_Ensure(); 794 795 Py_Finalize(); 796 } 797 798 #ifdef DYNAMIC_PYTHON3 799 end_dynamic_python3(); 800 #endif 801 802 --recurse; 803 } 804 805 #if (defined(DYNAMIC_PYTHON) && defined(FEAT_PYTHON)) || defined(PROTO) 806 int 807 python3_loaded() 808 { 809 return (hinstPy3 != 0); 810 } 811 #endif 812 813 static int 814 Python3_Init(void) 815 { 816 if (!py3initialised) 817 { 818 #ifdef DYNAMIC_PYTHON3 819 if (!python3_enabled(TRUE)) 820 { 821 EMSG(_("E263: Sorry, this command is disabled, the Python library could not be loaded.")); 822 goto fail; 823 } 824 #endif 825 826 init_structs(); 827 828 829 #ifdef PYTHON3_HOME 830 Py_SetPythonHome(PYTHON3_HOME); 831 #endif 832 833 PyImport_AppendInittab("vim", Py3Init_vim); 834 835 #if !defined(MACOS) || defined(MACOS_X_UNIX) 836 Py_Initialize(); 837 #else 838 PyMac_Initialize(); 839 #endif 840 /* Initialise threads, and below save the state using 841 * PyEval_SaveThread. Without the call to PyEval_SaveThread, thread 842 * specific state (such as the system trace hook), will be lost 843 * between invocations of Python code. */ 844 PyEval_InitThreads(); 845 #ifdef DYNAMIC_PYTHON3 846 get_py3_exceptions(); 847 #endif 848 849 if (PythonIO_Init_io()) 850 goto fail; 851 852 globals = PyModule_GetDict(PyImport_AddModule("__main__")); 853 854 /* Remove the element from sys.path that was added because of our 855 * argv[0] value in Py3Init_vim(). Previously we used an empty 856 * string, but depending on the OS we then get an empty entry or 857 * the current directory in sys.path. 858 * Only after vim has been imported, the element does exist in 859 * sys.path. 860 */ 861 PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))"); 862 863 /* lock is created and acquired in PyEval_InitThreads() and thread 864 * state is created in Py_Initialize() 865 * there _PyGILState_NoteThreadState() also sets gilcounter to 1 866 * (python must have threads enabled!) 867 * so the following does both: unlock GIL and save thread state in TLS 868 * without deleting thread state 869 */ 870 PyEval_SaveThread(); 871 872 py3initialised = 1; 873 } 874 875 return 0; 876 877 fail: 878 /* We call PythonIO_Flush() here to print any Python errors. 879 * This is OK, as it is possible to call this function even 880 * if PythonIO_Init_io() has not completed successfully (it will 881 * not do anything in this case). 882 */ 883 PythonIO_Flush(); 884 return -1; 885 } 886 887 /* 888 * External interface 889 */ 890 static void 891 DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg) 892 { 893 #if defined(MACOS) && !defined(MACOS_X_UNIX) 894 GrafPtr oldPort; 895 #endif 896 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 897 char *saved_locale; 898 #endif 899 PyObject *cmdstr; 900 PyObject *cmdbytes; 901 PyGILState_STATE pygilstate; 902 903 #if defined(MACOS) && !defined(MACOS_X_UNIX) 904 GetPort(&oldPort); 905 /* Check if the Python library is available */ 906 if ((Ptr)PyMac_Initialize == (Ptr)kUnresolvedCFragSymbolAddress) 907 goto theend; 908 #endif 909 if (Python3_Init()) 910 goto theend; 911 912 init_range(arg); 913 914 Python_Release_Vim(); /* leave vim */ 915 916 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 917 /* Python only works properly when the LC_NUMERIC locale is "C". */ 918 saved_locale = setlocale(LC_NUMERIC, NULL); 919 if (saved_locale == NULL || STRCMP(saved_locale, "C") == 0) 920 saved_locale = NULL; 921 else 922 { 923 /* Need to make a copy, value may change when setting new locale. */ 924 saved_locale = (char *)vim_strsave((char_u *)saved_locale); 925 (void)setlocale(LC_NUMERIC, "C"); 926 } 927 #endif 928 929 pygilstate = PyGILState_Ensure(); 930 931 /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause 932 * SyntaxError (unicode error). */ 933 cmdstr = PyUnicode_Decode(cmd, strlen(cmd), 934 (char *)ENC_OPT, CODEC_ERROR_HANDLER); 935 cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER); 936 Py_XDECREF(cmdstr); 937 938 run(PyBytes_AsString(cmdbytes), arg, &pygilstate); 939 Py_XDECREF(cmdbytes); 940 941 PyGILState_Release(pygilstate); 942 943 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) 944 if (saved_locale != NULL) 945 { 946 (void)setlocale(LC_NUMERIC, saved_locale); 947 vim_free(saved_locale); 948 } 949 #endif 950 951 Python_Lock_Vim(); /* enter vim */ 952 PythonIO_Flush(); 953 #if defined(MACOS) && !defined(MACOS_X_UNIX) 954 SetPort(oldPort); 955 #endif 956 957 theend: 958 return; /* keeps lint happy */ 959 } 960 961 /* 962 * ":py3" 963 */ 964 void 965 ex_py3(exarg_T *eap) 966 { 967 char_u *script; 968 969 script = script_get(eap, eap->arg); 970 if (!eap->skip) 971 { 972 DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script, 973 (rangeinitializer) init_range_cmd, 974 (runner) run_cmd, 975 (void *) eap); 976 } 977 vim_free(script); 978 } 979 980 #define BUFFER_SIZE 2048 981 982 /* 983 * ":py3file" 984 */ 985 void 986 ex_py3file(exarg_T *eap) 987 { 988 static char buffer[BUFFER_SIZE]; 989 const char *file; 990 char *p; 991 int i; 992 993 /* Have to do it like this. PyRun_SimpleFile requires you to pass a 994 * stdio file pointer, but Vim and the Python DLL are compiled with 995 * different options under Windows, meaning that stdio pointers aren't 996 * compatible between the two. Yuk. 997 * 998 * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec')) 999 * 1000 * Using bytes so that Python can detect the source encoding as it normally 1001 * does. The doc does not say "compile" accept bytes, though. 1002 * 1003 * We need to escape any backslashes or single quotes in the file name, so that 1004 * Python won't mangle the file name. 1005 */ 1006 1007 strcpy(buffer, "exec(compile(open('"); 1008 p = buffer + 19; /* size of "exec(compile(open('" */ 1009 1010 for (i=0; i<2; ++i) 1011 { 1012 file = (char *)eap->arg; 1013 while (*file && p < buffer + (BUFFER_SIZE - 3)) 1014 { 1015 if (*file == '\\' || *file == '\'') 1016 *p++ = '\\'; 1017 *p++ = *file++; 1018 } 1019 /* If we didn't finish the file name, we hit a buffer overflow */ 1020 if (*file != '\0') 1021 return; 1022 if (i==0) 1023 { 1024 strcpy(p,"','rb').read(),'"); 1025 p += 16; 1026 } 1027 else 1028 { 1029 strcpy(p,"','exec'))"); 1030 p += 10; 1031 } 1032 } 1033 1034 1035 /* Execute the file */ 1036 DoPyCommand(buffer, 1037 (rangeinitializer) init_range_cmd, 1038 (runner) run_cmd, 1039 (void *) eap); 1040 } 1041 1042 void 1043 ex_py3do(exarg_T *eap) 1044 { 1045 DoPyCommand((char *)eap->arg, 1046 (rangeinitializer)init_range_cmd, 1047 (runner)run_do, 1048 (void *)eap); 1049 } 1050 1051 /****************************************************** 1052 * 2. Python output stream: writes output via [e]msg(). 1053 */ 1054 1055 /* Implementation functions 1056 */ 1057 1058 static PyObject * 1059 OutputGetattro(PyObject *self, PyObject *nameobj) 1060 { 1061 GET_ATTR_STRING(name, nameobj); 1062 1063 if (strcmp(name, "softspace") == 0) 1064 return PyLong_FromLong(((OutputObject *)(self))->softspace); 1065 1066 return PyObject_GenericGetAttr(self, nameobj); 1067 } 1068 1069 static int 1070 OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val) 1071 { 1072 GET_ATTR_STRING(name, nameobj); 1073 1074 return OutputSetattr((OutputObject *)(self), name, val); 1075 } 1076 1077 /****************************************************** 1078 * 3. Implementation of the Vim module for Python 1079 */ 1080 1081 /* Window type - Implementation functions 1082 * -------------------------------------- 1083 */ 1084 1085 #define WindowType_Check(obj) ((obj)->ob_base.ob_type == &WindowType) 1086 1087 /* Buffer type - Implementation functions 1088 * -------------------------------------- 1089 */ 1090 1091 #define BufferType_Check(obj) ((obj)->ob_base.ob_type == &BufferType) 1092 1093 static PyObject* BufferSubscript(PyObject *self, PyObject *idx); 1094 static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val); 1095 1096 /* Line range type - Implementation functions 1097 * -------------------------------------- 1098 */ 1099 1100 #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType) 1101 1102 static PyObject* RangeSubscript(PyObject *self, PyObject *idx); 1103 static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *); 1104 static Py_ssize_t RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val); 1105 1106 /* Current objects type - Implementation functions 1107 * ----------------------------------------------- 1108 */ 1109 1110 static PySequenceMethods BufferAsSeq = { 1111 (lenfunc) BufferLength, /* sq_length, len(x) */ 1112 (binaryfunc) 0, /* sq_concat, x+y */ 1113 (ssizeargfunc) 0, /* sq_repeat, x*n */ 1114 (ssizeargfunc) BufferItem, /* sq_item, x[i] */ 1115 0, /* was_sq_slice, x[i:j] */ 1116 0, /* sq_ass_item, x[i]=v */ 1117 0, /* sq_ass_slice, x[i:j]=v */ 1118 0, /* sq_contains */ 1119 0, /* sq_inplace_concat */ 1120 0, /* sq_inplace_repeat */ 1121 }; 1122 1123 static PyMappingMethods BufferAsMapping = { 1124 /* mp_length */ (lenfunc)BufferLength, 1125 /* mp_subscript */ (binaryfunc)BufferSubscript, 1126 /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript, 1127 }; 1128 1129 1130 /* Buffer object 1131 */ 1132 1133 static PyObject * 1134 BufferGetattro(PyObject *self, PyObject *nameobj) 1135 { 1136 PyObject *r; 1137 1138 GET_ATTR_STRING(name, nameobj); 1139 1140 if ((r = BufferAttrValid((BufferObject *)(self), name))) 1141 return r; 1142 1143 if (CheckBuffer((BufferObject *)(self))) 1144 return NULL; 1145 1146 r = BufferAttr((BufferObject *)(self), name); 1147 if (r || PyErr_Occurred()) 1148 return r; 1149 else 1150 return PyObject_GenericGetAttr(self, nameobj); 1151 } 1152 1153 static int 1154 BufferSetattro(PyObject *self, PyObject *nameobj, PyObject *val) 1155 { 1156 GET_ATTR_STRING(name, nameobj); 1157 1158 return BufferSetattr((BufferObject *)(self), name, val); 1159 } 1160 1161 /******************/ 1162 1163 static PyObject * 1164 BufferSubscript(PyObject *self, PyObject* idx) 1165 { 1166 if (PyLong_Check(idx)) 1167 { 1168 long _idx = PyLong_AsLong(idx); 1169 return BufferItem((BufferObject *)(self), _idx); 1170 } else if (PySlice_Check(idx)) 1171 { 1172 Py_ssize_t start, stop, step, slicelen; 1173 1174 if (CheckBuffer((BufferObject *) self)) 1175 return NULL; 1176 1177 if (PySlice_GetIndicesEx((PyObject *)idx, 1178 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count, 1179 &start, &stop, 1180 &step, &slicelen) < 0) 1181 { 1182 return NULL; 1183 } 1184 return BufferSlice((BufferObject *)(self), start, stop); 1185 } 1186 else 1187 { 1188 RAISE_INVALID_INDEX_TYPE(idx); 1189 return NULL; 1190 } 1191 } 1192 1193 static Py_ssize_t 1194 BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val) 1195 { 1196 if (PyLong_Check(idx)) 1197 { 1198 long n = PyLong_AsLong(idx); 1199 return RBAsItem((BufferObject *)(self), n, val, 1, 1200 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count, 1201 NULL); 1202 } else if (PySlice_Check(idx)) 1203 { 1204 Py_ssize_t start, stop, step, slicelen; 1205 1206 if (CheckBuffer((BufferObject *) self)) 1207 return -1; 1208 1209 if (PySlice_GetIndicesEx((PyObject *)idx, 1210 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count, 1211 &start, &stop, 1212 &step, &slicelen) < 0) 1213 { 1214 return -1; 1215 } 1216 return RBAsSlice((BufferObject *)(self), start, stop, val, 1, 1217 (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count, 1218 NULL); 1219 } 1220 else 1221 { 1222 RAISE_INVALID_INDEX_TYPE(idx); 1223 return -1; 1224 } 1225 } 1226 1227 static PySequenceMethods RangeAsSeq = { 1228 (lenfunc) RangeLength, /* sq_length, len(x) */ 1229 (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */ 1230 (ssizeargfunc) 0, /* RangeRepeat, sq_repeat, x*n */ 1231 (ssizeargfunc) RangeItem, /* sq_item, x[i] */ 1232 0, /* was_sq_slice, x[i:j] */ 1233 (ssizeobjargproc) RangeAsItem, /* sq_as_item, x[i]=v */ 1234 0, /* sq_ass_slice, x[i:j]=v */ 1235 0, /* sq_contains */ 1236 0, /* sq_inplace_concat */ 1237 0, /* sq_inplace_repeat */ 1238 }; 1239 1240 static PyMappingMethods RangeAsMapping = { 1241 /* mp_length */ (lenfunc)RangeLength, 1242 /* mp_subscript */ (binaryfunc)RangeSubscript, 1243 /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript, 1244 }; 1245 1246 /* Line range object - Implementation 1247 */ 1248 1249 static PyObject * 1250 RangeGetattro(PyObject *self, PyObject *nameobj) 1251 { 1252 GET_ATTR_STRING(name, nameobj); 1253 1254 if (strcmp(name, "start") == 0) 1255 return Py_BuildValue("n", ((RangeObject *)(self))->start - 1); 1256 else if (strcmp(name, "end") == 0) 1257 return Py_BuildValue("n", ((RangeObject *)(self))->end - 1); 1258 else 1259 return PyObject_GenericGetAttr(self, nameobj); 1260 } 1261 1262 /****************/ 1263 1264 static Py_ssize_t 1265 RangeAsItem(PyObject *self, Py_ssize_t n, PyObject *val) 1266 { 1267 return RBAsItem(((RangeObject *)(self))->buf, n, val, 1268 ((RangeObject *)(self))->start, 1269 ((RangeObject *)(self))->end, 1270 &((RangeObject *)(self))->end); 1271 } 1272 1273 static Py_ssize_t 1274 RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val) 1275 { 1276 return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val, 1277 ((RangeObject *)(self))->start, 1278 ((RangeObject *)(self))->end, 1279 &((RangeObject *)(self))->end); 1280 } 1281 1282 static PyObject * 1283 RangeSubscript(PyObject *self, PyObject* idx) 1284 { 1285 if (PyLong_Check(idx)) 1286 { 1287 long _idx = PyLong_AsLong(idx); 1288 return RangeItem((RangeObject *)(self), _idx); 1289 } else if (PySlice_Check(idx)) 1290 { 1291 Py_ssize_t start, stop, step, slicelen; 1292 1293 if (PySlice_GetIndicesEx((PyObject *)idx, 1294 ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1, 1295 &start, &stop, 1296 &step, &slicelen) < 0) 1297 { 1298 return NULL; 1299 } 1300 return RangeSlice((RangeObject *)(self), start, stop); 1301 } 1302 else 1303 { 1304 RAISE_INVALID_INDEX_TYPE(idx); 1305 return NULL; 1306 } 1307 } 1308 1309 static Py_ssize_t 1310 RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val) 1311 { 1312 if (PyLong_Check(idx)) 1313 { 1314 long n = PyLong_AsLong(idx); 1315 return RangeAsItem(self, n, val); 1316 } else if (PySlice_Check(idx)) 1317 { 1318 Py_ssize_t start, stop, step, slicelen; 1319 1320 if (PySlice_GetIndicesEx((PyObject *)idx, 1321 ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1, 1322 &start, &stop, 1323 &step, &slicelen) < 0) 1324 { 1325 return -1; 1326 } 1327 return RangeAsSlice(self, start, stop, val); 1328 } 1329 else 1330 { 1331 RAISE_INVALID_INDEX_TYPE(idx); 1332 return -1; 1333 } 1334 } 1335 1336 /* TabPage object - Implementation 1337 */ 1338 1339 static PyObject * 1340 TabPageGetattro(PyObject *self, PyObject *nameobj) 1341 { 1342 PyObject *r; 1343 1344 GET_ATTR_STRING(name, nameobj); 1345 1346 if ((r = TabPageAttrValid((TabPageObject *)(self), name))) 1347 return r; 1348 1349 if (CheckTabPage((TabPageObject *)(self))) 1350 return NULL; 1351 1352 r = TabPageAttr((TabPageObject *)(self), name); 1353 if (r || PyErr_Occurred()) 1354 return r; 1355 else 1356 return PyObject_GenericGetAttr(self, nameobj); 1357 } 1358 1359 /* Window object - Implementation 1360 */ 1361 1362 static PyObject * 1363 WindowGetattro(PyObject *self, PyObject *nameobj) 1364 { 1365 PyObject *r; 1366 1367 GET_ATTR_STRING(name, nameobj); 1368 1369 if ((r = WindowAttrValid((WindowObject *)(self), name))) 1370 return r; 1371 1372 if (CheckWindow((WindowObject *)(self))) 1373 return NULL; 1374 1375 r = WindowAttr((WindowObject *)(self), name); 1376 if (r || PyErr_Occurred()) 1377 return r; 1378 else 1379 return PyObject_GenericGetAttr(self, nameobj); 1380 } 1381 1382 static int 1383 WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val) 1384 { 1385 GET_ATTR_STRING(name, nameobj); 1386 1387 return WindowSetattr((WindowObject *)(self), name, val); 1388 } 1389 1390 /* Tab page list object - Definitions 1391 */ 1392 1393 static PySequenceMethods TabListAsSeq = { 1394 (lenfunc) TabListLength, /* sq_length, len(x) */ 1395 (binaryfunc) 0, /* sq_concat, x+y */ 1396 (ssizeargfunc) 0, /* sq_repeat, x*n */ 1397 (ssizeargfunc) TabListItem, /* sq_item, x[i] */ 1398 0, /* sq_slice, x[i:j] */ 1399 (ssizeobjargproc)0, /* sq_as_item, x[i]=v */ 1400 0, /* sq_ass_slice, x[i:j]=v */ 1401 0, /* sq_contains */ 1402 0, /* sq_inplace_concat */ 1403 0, /* sq_inplace_repeat */ 1404 }; 1405 1406 /* Window list object - Definitions 1407 */ 1408 1409 static PySequenceMethods WinListAsSeq = { 1410 (lenfunc) WinListLength, /* sq_length, len(x) */ 1411 (binaryfunc) 0, /* sq_concat, x+y */ 1412 (ssizeargfunc) 0, /* sq_repeat, x*n */ 1413 (ssizeargfunc) WinListItem, /* sq_item, x[i] */ 1414 0, /* sq_slice, x[i:j] */ 1415 (ssizeobjargproc)0, /* sq_as_item, x[i]=v */ 1416 0, /* sq_ass_slice, x[i:j]=v */ 1417 0, /* sq_contains */ 1418 0, /* sq_inplace_concat */ 1419 0, /* sq_inplace_repeat */ 1420 }; 1421 1422 /* Current items object - Implementation 1423 */ 1424 static PyObject * 1425 CurrentGetattro(PyObject *self, PyObject *nameobj) 1426 { 1427 PyObject *r; 1428 GET_ATTR_STRING(name, nameobj); 1429 if (!(r = CurrentGetattr(self, name))) 1430 return PyObject_GenericGetAttr(self, nameobj); 1431 return r; 1432 } 1433 1434 static int 1435 CurrentSetattro(PyObject *self, PyObject *nameobj, PyObject *value) 1436 { 1437 GET_ATTR_STRING(name, nameobj); 1438 return CurrentSetattr(self, name, value); 1439 } 1440 1441 /* Dictionary object - Definitions 1442 */ 1443 1444 static PyObject * 1445 DictionaryGetattro(PyObject *self, PyObject *nameobj) 1446 { 1447 DictionaryObject *this = ((DictionaryObject *) (self)); 1448 1449 GET_ATTR_STRING(name, nameobj); 1450 1451 if (strcmp(name, "locked") == 0) 1452 return PyLong_FromLong(this->dict->dv_lock); 1453 else if (strcmp(name, "scope") == 0) 1454 return PyLong_FromLong(this->dict->dv_scope); 1455 1456 return PyObject_GenericGetAttr(self, nameobj); 1457 } 1458 1459 static int 1460 DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val) 1461 { 1462 GET_ATTR_STRING(name, nameobj); 1463 return DictionarySetattr((DictionaryObject *)(self), name, val); 1464 } 1465 1466 /* List object - Definitions 1467 */ 1468 1469 static PySequenceMethods ListAsSeq = { 1470 (lenfunc) ListLength, /* sq_length, len(x) */ 1471 (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */ 1472 (ssizeargfunc) 0, /* RangeRepeat, sq_repeat, x*n */ 1473 (ssizeargfunc) ListItem, /* sq_item, x[i] */ 1474 (void *) 0, /* was_sq_slice, x[i:j] */ 1475 (ssizeobjargproc) ListAssItem, /* sq_as_item, x[i]=v */ 1476 (void *) 0, /* was_sq_ass_slice, x[i:j]=v */ 1477 0, /* sq_contains */ 1478 (binaryfunc) ListConcatInPlace,/* sq_inplace_concat */ 1479 0, /* sq_inplace_repeat */ 1480 }; 1481 1482 static PyObject *ListSubscript(PyObject *, PyObject *); 1483 static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *); 1484 1485 static PyMappingMethods ListAsMapping = { 1486 /* mp_length */ (lenfunc) ListLength, 1487 /* mp_subscript */ (binaryfunc) ListSubscript, 1488 /* mp_ass_subscript */ (objobjargproc) ListAsSubscript, 1489 }; 1490 1491 static PyObject * 1492 ListSubscript(PyObject *self, PyObject* idx) 1493 { 1494 if (PyLong_Check(idx)) 1495 { 1496 long _idx = PyLong_AsLong(idx); 1497 return ListItem((ListObject *)(self), _idx); 1498 } 1499 else if (PySlice_Check(idx)) 1500 { 1501 Py_ssize_t start, stop, step, slicelen; 1502 1503 if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)), 1504 &start, &stop, &step, &slicelen) < 0) 1505 return NULL; 1506 return ListSlice((ListObject *)(self), start, stop); 1507 } 1508 else 1509 { 1510 RAISE_INVALID_INDEX_TYPE(idx); 1511 return NULL; 1512 } 1513 } 1514 1515 static Py_ssize_t 1516 ListAsSubscript(PyObject *self, PyObject *idx, PyObject *obj) 1517 { 1518 if (PyLong_Check(idx)) 1519 { 1520 long _idx = PyLong_AsLong(idx); 1521 return ListAssItem((ListObject *)(self), _idx, obj); 1522 } 1523 else if (PySlice_Check(idx)) 1524 { 1525 Py_ssize_t start, stop, step, slicelen; 1526 1527 if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)), 1528 &start, &stop, &step, &slicelen) < 0) 1529 return -1; 1530 return ListAssSlice((ListObject *)(self), start, stop, obj); 1531 } 1532 else 1533 { 1534 RAISE_INVALID_INDEX_TYPE(idx); 1535 return -1; 1536 } 1537 } 1538 1539 static PyObject * 1540 ListGetattro(PyObject *self, PyObject *nameobj) 1541 { 1542 GET_ATTR_STRING(name, nameobj); 1543 1544 if (strcmp(name, "locked") == 0) 1545 return PyLong_FromLong(((ListObject *) (self))->list->lv_lock); 1546 1547 return PyObject_GenericGetAttr(self, nameobj); 1548 } 1549 1550 static int 1551 ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val) 1552 { 1553 GET_ATTR_STRING(name, nameobj); 1554 return ListSetattr((ListObject *)(self), name, val); 1555 } 1556 1557 /* Function object - Definitions 1558 */ 1559 1560 static PyObject * 1561 FunctionGetattro(PyObject *self, PyObject *nameobj) 1562 { 1563 FunctionObject *this = (FunctionObject *)(self); 1564 1565 GET_ATTR_STRING(name, nameobj); 1566 1567 if (strcmp(name, "name") == 0) 1568 return PyUnicode_FromString((char *)(this->name)); 1569 1570 return PyObject_GenericGetAttr(self, nameobj); 1571 } 1572 1573 /* External interface 1574 */ 1575 1576 void 1577 python3_buffer_free(buf_T *buf) 1578 { 1579 if (BUF_PYTHON_REF(buf) != NULL) 1580 { 1581 BufferObject *bp = BUF_PYTHON_REF(buf); 1582 bp->buf = INVALID_BUFFER_VALUE; 1583 BUF_PYTHON_REF(buf) = NULL; 1584 } 1585 } 1586 1587 #if defined(FEAT_WINDOWS) || defined(PROTO) 1588 void 1589 python3_window_free(win_T *win) 1590 { 1591 if (WIN_PYTHON_REF(win) != NULL) 1592 { 1593 WindowObject *wp = WIN_PYTHON_REF(win); 1594 wp->win = INVALID_WINDOW_VALUE; 1595 WIN_PYTHON_REF(win) = NULL; 1596 } 1597 } 1598 1599 void 1600 python3_tabpage_free(tabpage_T *tab) 1601 { 1602 if (TAB_PYTHON_REF(tab) != NULL) 1603 { 1604 TabPageObject *tp = TAB_PYTHON_REF(tab); 1605 tp->tab = INVALID_TABPAGE_VALUE; 1606 TAB_PYTHON_REF(tab) = NULL; 1607 } 1608 } 1609 #endif 1610 1611 static PyObject * 1612 Py3Init_vim(void) 1613 { 1614 /* The special value is removed from sys.path in Python3_Init(). */ 1615 static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL}; 1616 1617 if (init_types()) 1618 return NULL; 1619 1620 /* Set sys.argv[] to avoid a crash in warn(). */ 1621 PySys_SetArgv(1, argv); 1622 1623 if ((vim_module = PyModule_Create(&vimmodule)) == NULL) 1624 return NULL; 1625 1626 if (populate_module(vim_module)) 1627 return NULL; 1628 1629 if (init_sys_path()) 1630 return NULL; 1631 1632 return vim_module; 1633 } 1634 1635 /************************************************************************* 1636 * 4. Utility functions for handling the interface between Vim and Python. 1637 */ 1638 1639 /* Convert a Vim line into a Python string. 1640 * All internal newlines are replaced by null characters. 1641 * 1642 * On errors, the Python exception data is set, and NULL is returned. 1643 */ 1644 static PyObject * 1645 LineToString(const char *str) 1646 { 1647 PyObject *result; 1648 Py_ssize_t len = strlen(str); 1649 char *tmp,*p; 1650 1651 tmp = (char *)alloc((unsigned)(len+1)); 1652 p = tmp; 1653 if (p == NULL) 1654 { 1655 PyErr_NoMemory(); 1656 return NULL; 1657 } 1658 1659 while (*str) 1660 { 1661 if (*str == '\n') 1662 *p = '\0'; 1663 else 1664 *p = *str; 1665 1666 ++p; 1667 ++str; 1668 } 1669 *p = '\0'; 1670 1671 result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, CODEC_ERROR_HANDLER); 1672 1673 vim_free(tmp); 1674 return result; 1675 } 1676 1677 void 1678 do_py3eval (char_u *str, typval_T *rettv) 1679 { 1680 DoPyCommand((char *) str, 1681 (rangeinitializer) init_range_eval, 1682 (runner) run_eval, 1683 (void *) rettv); 1684 switch(rettv->v_type) 1685 { 1686 case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break; 1687 case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break; 1688 case VAR_FUNC: func_ref(rettv->vval.v_string); break; 1689 case VAR_UNKNOWN: 1690 rettv->v_type = VAR_NUMBER; 1691 rettv->vval.v_number = 0; 1692 break; 1693 } 1694 } 1695 1696 void 1697 set_ref_in_python3 (int copyID) 1698 { 1699 set_ref_in_py(copyID); 1700 } 1701