comparison src/if_py_both.h @ 4494:6d517f6e5f0b v7.3.995

updated for version 7.3.995 Problem: Python: Module initialization is duplicated. Solution: Move to shared file. (ZyX)
author Bram Moolenaar <bram@vim.org>
date Tue, 21 May 2013 19:11:01 +0200
parents f74611bfb1b7
children ebd94eabfd80
comparison
equal deleted inserted replaced
4493:36ea23677c9c 4494:6d517f6e5f0b
4179 vimmodule.m_doc = "Vim Python interface\n"; 4179 vimmodule.m_doc = "Vim Python interface\n";
4180 vimmodule.m_size = -1; 4180 vimmodule.m_size = -1;
4181 vimmodule.m_methods = VimMethods; 4181 vimmodule.m_methods = VimMethods;
4182 #endif 4182 #endif
4183 } 4183 }
4184
4185 #define PYTYPE_READY(type) \
4186 if (PyType_Ready(&type)) \
4187 return -1;
4188
4189 static int
4190 init_types()
4191 {
4192 PYTYPE_READY(IterType);
4193 PYTYPE_READY(BufferType);
4194 PYTYPE_READY(RangeType);
4195 PYTYPE_READY(WindowType);
4196 PYTYPE_READY(TabPageType);
4197 PYTYPE_READY(BufMapType);
4198 PYTYPE_READY(WinListType);
4199 PYTYPE_READY(TabListType);
4200 PYTYPE_READY(CurrentType);
4201 PYTYPE_READY(DictionaryType);
4202 PYTYPE_READY(ListType);
4203 PYTYPE_READY(FunctionType);
4204 PYTYPE_READY(OptionsType);
4205 PYTYPE_READY(OutputType);
4206 return 0;
4207 }
4208
4209 static BufMapObject TheBufferMap =
4210 {
4211 PyObject_HEAD_INIT(&BufMapType)
4212 };
4213
4214 static WinListObject TheWindowList =
4215 {
4216 PyObject_HEAD_INIT(&WinListType)
4217 NULL
4218 };
4219
4220 static CurrentObject TheCurrent =
4221 {
4222 PyObject_HEAD_INIT(&CurrentType)
4223 };
4224
4225 static TabListObject TheTabPageList =
4226 {
4227 PyObject_HEAD_INIT(&TabListType)
4228 };
4229
4230 static struct numeric_constant {
4231 char *name;
4232 int value;
4233 } numeric_constants[] = {
4234 {"VAR_LOCKED", VAR_LOCKED},
4235 {"VAR_FIXED", VAR_FIXED},
4236 {"VAR_SCOPE", VAR_SCOPE},
4237 {"VAR_DEF_SCOPE", VAR_DEF_SCOPE},
4238 };
4239
4240 static struct object_constant {
4241 char *name;
4242 PyObject *value;
4243 } object_constants[] = {
4244 {"buffers", (PyObject *)(void *)&TheBufferMap},
4245 {"windows", (PyObject *)(void *)&TheWindowList},
4246 {"tabpages", (PyObject *)(void *)&TheTabPageList},
4247 {"current", (PyObject *)(void *)&TheCurrent},
4248 };
4249
4250 typedef int (*object_adder)(PyObject *, const char *, PyObject *);
4251
4252 #define ADD_OBJECT(m, name, obj) \
4253 if (add_object(m, name, obj)) \
4254 return -1;
4255
4256 #define ADD_CHECKED_OBJECT(m, name, obj) \
4257 { \
4258 PyObject *value = obj; \
4259 if (!value) \
4260 return -1; \
4261 ADD_OBJECT(m, name, value); \
4262 }
4263
4264 static int
4265 populate_module(PyObject *m, object_adder add_object)
4266 {
4267 int i;
4268
4269 for (i = 0; i < (int)(sizeof(numeric_constants)
4270 / sizeof(struct numeric_constant));
4271 ++i)
4272 ADD_CHECKED_OBJECT(m, numeric_constants[i].name,
4273 PyInt_FromLong(numeric_constants[i].value));
4274
4275 for (i = 0; i < (int)(sizeof(object_constants)
4276 / sizeof(struct object_constant));
4277 ++i)
4278 {
4279 PyObject *value;
4280
4281 value = object_constants[i].value;
4282 Py_INCREF(value);
4283 ADD_OBJECT(m, object_constants[i].name, value);
4284 }
4285
4286 if (!(VimError = PyErr_NewException("vim.error", NULL, NULL)))
4287 return -1;
4288 ADD_OBJECT(m, "error", VimError);
4289
4290 ADD_CHECKED_OBJECT(m, "vars", DictionaryNew(&globvardict));
4291 ADD_CHECKED_OBJECT(m, "vvars", DictionaryNew(&vimvardict));
4292 ADD_CHECKED_OBJECT(m, "options",
4293 OptionsNew(SREQ_GLOBAL, NULL, dummy_check, NULL));
4294 return 0;
4295 }