Fix compile with MSVC (issue #199)

And use a macro to make type initialization shorter.
This commit is contained in:
J. David Ibáñez
2013-03-27 11:20:53 +01:00
parent 734db55f58
commit ad56ac6353
7 changed files with 46 additions and 69 deletions

View File

@@ -135,4 +135,11 @@ char * py_str_to_c_str(PyObject *value, const char *encoding);
goto label;\
}
/* Helpers to make type init shorter. */
#define INIT_TYPE(type, base, new) \
if (base != NULL) type.tp_base = base; \
if (new != NULL) type.tp_new = new; \
if (PyType_Ready(&type) < 0) return NULL;
#endif

View File

@@ -197,7 +197,7 @@ DiffIter_dealloc(DiffIter *self)
PyDoc_STRVAR(DiffIter__doc__, "Diff iterator object.");
PyTypeObject DiffIterType = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.DiffIter", /* tp_name */
sizeof(DiffIter), /* tp_basicsize */
0, /* tp_itemsize */

View File

@@ -526,7 +526,7 @@ IndexIter_iternext(IndexIter *self)
PyDoc_STRVAR(IndexIter__doc__, "Index iterator.");
PyTypeObject IndexIterType = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.IndexIter", /* tp_name */
sizeof(IndexIter), /* tp_basicsize */
0, /* tp_itemsize */

View File

@@ -181,7 +181,7 @@ NoteIter_dealloc(NoteIter *self)
PyDoc_STRVAR(NoteIter__doc__, "Note iterator object.");
PyTypeObject NoteIterType = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.NoteIter", /* tp_name */
sizeof(NoteIter), /* tp_basicsize */
0, /* tp_itemsize */

View File

@@ -178,70 +178,40 @@ moduleinit(PyObject* m)
GitError = PyErr_NewException("_pygit2.GitError", NULL, NULL);
RepositoryType.tp_new = PyType_GenericNew;
if (PyType_Ready(&RepositoryType) < 0)
return NULL;
/* Do not set 'tp_new' for Git objects. To create Git objects use the
* Repository.create_XXX methods */
if (PyType_Ready(&ObjectType) < 0)
return NULL;
CommitType.tp_base = &ObjectType;
if (PyType_Ready(&CommitType) < 0)
return NULL;
TreeType.tp_base = &ObjectType;
if (PyType_Ready(&TreeType) < 0)
return NULL;
BlobType.tp_base = &ObjectType;
if (PyType_Ready(&BlobType) < 0)
return NULL;
TagType.tp_base = &ObjectType;
if (PyType_Ready(&TagType) < 0)
return NULL;
if (PyType_Ready(&DiffType) < 0)
return NULL;
if (PyType_Ready(&DiffIterType) < 0)
return NULL;
if (PyType_Ready(&PatchType) < 0)
return NULL;
if (PyType_Ready(&HunkType) < 0)
return NULL;
TreeEntryType.tp_new = PyType_GenericNew;
if (PyType_Ready(&TreeEntryType) < 0)
return NULL;
IndexType.tp_new = PyType_GenericNew;
if (PyType_Ready(&IndexType) < 0)
return NULL;
IndexEntryType.tp_new = PyType_GenericNew;
if (PyType_Ready(&IndexEntryType) < 0)
return NULL;
TreeBuilderType.tp_new = PyType_GenericNew;
if (PyType_Ready(&TreeBuilderType) < 0)
return NULL;
ConfigType.tp_new = PyType_GenericNew;
if (PyType_Ready(&ConfigType) < 0)
return NULL;
WalkerType.tp_new = PyType_GenericNew;
if (PyType_Ready(&WalkerType) < 0)
return NULL;
ReferenceType.tp_new = PyType_GenericNew;
if (PyType_Ready(&ReferenceType) < 0)
return NULL;
if (PyType_Ready(&RefLogEntryType) < 0)
return NULL;
SignatureType.tp_new = PyType_GenericNew;
if (PyType_Ready(&SignatureType) < 0)
return NULL;
if (PyType_Ready(&RemoteType) < 0)
return NULL;
if (PyType_Ready(&NoteType) < 0)
return NULL;
if (PyType_Ready(&NoteIterType) < 0)
return NULL;
/* Repository */
INIT_TYPE(RepositoryType, NULL, PyType_GenericNew)
/* Objects (make them with the Repository.create_XXX methods). */
INIT_TYPE(ObjectType, NULL, NULL)
INIT_TYPE(CommitType, &ObjectType, NULL)
INIT_TYPE(SignatureType, NULL, PyType_GenericNew)
INIT_TYPE(TreeType, &ObjectType, NULL)
INIT_TYPE(TreeEntryType, NULL, PyType_GenericNew)
INIT_TYPE(TreeIterType, NULL, NULL)
INIT_TYPE(TreeBuilderType, NULL, PyType_GenericNew)
INIT_TYPE(BlobType, &ObjectType, NULL)
INIT_TYPE(TagType, &ObjectType, NULL)
/* References */
INIT_TYPE(ReferenceType, NULL, PyType_GenericNew)
INIT_TYPE(RefLogEntryType, NULL, NULL)
INIT_TYPE(RefLogIterType, NULL, NULL)
/* Index */
INIT_TYPE(IndexType, NULL, PyType_GenericNew)
INIT_TYPE(IndexEntryType, NULL, PyType_GenericNew)
INIT_TYPE(IndexIterType, NULL, NULL)
/* Diff */
INIT_TYPE(DiffType, NULL, NULL)
INIT_TYPE(DiffIterType, NULL, NULL)
INIT_TYPE(PatchType, NULL, NULL)
INIT_TYPE(HunkType, NULL, NULL)
/* Log */
INIT_TYPE(WalkerType, NULL, PyType_GenericNew)
/* Config */
INIT_TYPE(ConfigType, NULL, PyType_GenericNew)
/* Remote */
INIT_TYPE(RemoteType, NULL, NULL)
/* Notes */
INIT_TYPE(NoteType, NULL, NULL)
INIT_TYPE(NoteIterType, NULL, NULL)
Py_INCREF(GitError);
PyModule_AddObject(m, "GitError", GitError);

View File

@@ -75,7 +75,7 @@ PyObject* RefLogIter_iternext(RefLogIter *self)
PyDoc_STRVAR(RefLogIterType__doc__, "Internal reflog iterator object.");
PyTypeObject RefLogIterType = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.RefLogIter", /* tp_name */
sizeof(RefLogIter), /* tp_basicsize */
0, /* tp_itemsize */

View File

@@ -446,7 +446,7 @@ TreeIter_iternext(TreeIter *self)
PyDoc_STRVAR(TreeIter__doc__, "Tree iterator.");
PyTypeObject TreeIterType = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
PyVarObject_HEAD_INIT(NULL, 0)
"_pygit2.TreeIter", /* tp_name */
sizeof(TreeIter), /* tp_basicsize */
0, /* tp_itemsize */