Mercurial > vim
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 } |