Fix compile with MSVC (issue #199)
And use a macro to make type initialization shorter.
This commit is contained in:
@@ -135,4 +135,11 @@ char * py_str_to_c_str(PyObject *value, const char *encoding);
|
|||||||
goto label;\
|
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
|
#endif
|
||||||
|
@@ -197,7 +197,7 @@ DiffIter_dealloc(DiffIter *self)
|
|||||||
PyDoc_STRVAR(DiffIter__doc__, "Diff iterator object.");
|
PyDoc_STRVAR(DiffIter__doc__, "Diff iterator object.");
|
||||||
|
|
||||||
PyTypeObject DiffIterType = {
|
PyTypeObject DiffIterType = {
|
||||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"_pygit2.DiffIter", /* tp_name */
|
"_pygit2.DiffIter", /* tp_name */
|
||||||
sizeof(DiffIter), /* tp_basicsize */
|
sizeof(DiffIter), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
|
@@ -526,7 +526,7 @@ IndexIter_iternext(IndexIter *self)
|
|||||||
PyDoc_STRVAR(IndexIter__doc__, "Index iterator.");
|
PyDoc_STRVAR(IndexIter__doc__, "Index iterator.");
|
||||||
|
|
||||||
PyTypeObject IndexIterType = {
|
PyTypeObject IndexIterType = {
|
||||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"_pygit2.IndexIter", /* tp_name */
|
"_pygit2.IndexIter", /* tp_name */
|
||||||
sizeof(IndexIter), /* tp_basicsize */
|
sizeof(IndexIter), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
|
@@ -181,7 +181,7 @@ NoteIter_dealloc(NoteIter *self)
|
|||||||
PyDoc_STRVAR(NoteIter__doc__, "Note iterator object.");
|
PyDoc_STRVAR(NoteIter__doc__, "Note iterator object.");
|
||||||
|
|
||||||
PyTypeObject NoteIterType = {
|
PyTypeObject NoteIterType = {
|
||||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"_pygit2.NoteIter", /* tp_name */
|
"_pygit2.NoteIter", /* tp_name */
|
||||||
sizeof(NoteIter), /* tp_basicsize */
|
sizeof(NoteIter), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
|
98
src/pygit2.c
98
src/pygit2.c
@@ -178,70 +178,40 @@ moduleinit(PyObject* m)
|
|||||||
|
|
||||||
GitError = PyErr_NewException("_pygit2.GitError", NULL, NULL);
|
GitError = PyErr_NewException("_pygit2.GitError", NULL, NULL);
|
||||||
|
|
||||||
RepositoryType.tp_new = PyType_GenericNew;
|
/* Repository */
|
||||||
if (PyType_Ready(&RepositoryType) < 0)
|
INIT_TYPE(RepositoryType, NULL, PyType_GenericNew)
|
||||||
return NULL;
|
/* Objects (make them with the Repository.create_XXX methods). */
|
||||||
|
INIT_TYPE(ObjectType, NULL, NULL)
|
||||||
/* Do not set 'tp_new' for Git objects. To create Git objects use the
|
INIT_TYPE(CommitType, &ObjectType, NULL)
|
||||||
* Repository.create_XXX methods */
|
INIT_TYPE(SignatureType, NULL, PyType_GenericNew)
|
||||||
if (PyType_Ready(&ObjectType) < 0)
|
INIT_TYPE(TreeType, &ObjectType, NULL)
|
||||||
return NULL;
|
INIT_TYPE(TreeEntryType, NULL, PyType_GenericNew)
|
||||||
CommitType.tp_base = &ObjectType;
|
INIT_TYPE(TreeIterType, NULL, NULL)
|
||||||
if (PyType_Ready(&CommitType) < 0)
|
INIT_TYPE(TreeBuilderType, NULL, PyType_GenericNew)
|
||||||
return NULL;
|
INIT_TYPE(BlobType, &ObjectType, NULL)
|
||||||
TreeType.tp_base = &ObjectType;
|
INIT_TYPE(TagType, &ObjectType, NULL)
|
||||||
if (PyType_Ready(&TreeType) < 0)
|
/* References */
|
||||||
return NULL;
|
INIT_TYPE(ReferenceType, NULL, PyType_GenericNew)
|
||||||
BlobType.tp_base = &ObjectType;
|
INIT_TYPE(RefLogEntryType, NULL, NULL)
|
||||||
if (PyType_Ready(&BlobType) < 0)
|
INIT_TYPE(RefLogIterType, NULL, NULL)
|
||||||
return NULL;
|
/* Index */
|
||||||
TagType.tp_base = &ObjectType;
|
INIT_TYPE(IndexType, NULL, PyType_GenericNew)
|
||||||
if (PyType_Ready(&TagType) < 0)
|
INIT_TYPE(IndexEntryType, NULL, PyType_GenericNew)
|
||||||
return NULL;
|
INIT_TYPE(IndexIterType, NULL, NULL)
|
||||||
|
/* Diff */
|
||||||
if (PyType_Ready(&DiffType) < 0)
|
INIT_TYPE(DiffType, NULL, NULL)
|
||||||
return NULL;
|
INIT_TYPE(DiffIterType, NULL, NULL)
|
||||||
if (PyType_Ready(&DiffIterType) < 0)
|
INIT_TYPE(PatchType, NULL, NULL)
|
||||||
return NULL;
|
INIT_TYPE(HunkType, NULL, NULL)
|
||||||
if (PyType_Ready(&PatchType) < 0)
|
/* Log */
|
||||||
return NULL;
|
INIT_TYPE(WalkerType, NULL, PyType_GenericNew)
|
||||||
if (PyType_Ready(&HunkType) < 0)
|
/* Config */
|
||||||
return NULL;
|
INIT_TYPE(ConfigType, NULL, PyType_GenericNew)
|
||||||
|
/* Remote */
|
||||||
TreeEntryType.tp_new = PyType_GenericNew;
|
INIT_TYPE(RemoteType, NULL, NULL)
|
||||||
if (PyType_Ready(&TreeEntryType) < 0)
|
/* Notes */
|
||||||
return NULL;
|
INIT_TYPE(NoteType, NULL, NULL)
|
||||||
IndexType.tp_new = PyType_GenericNew;
|
INIT_TYPE(NoteIterType, NULL, NULL)
|
||||||
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;
|
|
||||||
|
|
||||||
Py_INCREF(GitError);
|
Py_INCREF(GitError);
|
||||||
PyModule_AddObject(m, "GitError", GitError);
|
PyModule_AddObject(m, "GitError", GitError);
|
||||||
|
@@ -75,7 +75,7 @@ PyObject* RefLogIter_iternext(RefLogIter *self)
|
|||||||
PyDoc_STRVAR(RefLogIterType__doc__, "Internal reflog iterator object.");
|
PyDoc_STRVAR(RefLogIterType__doc__, "Internal reflog iterator object.");
|
||||||
|
|
||||||
PyTypeObject RefLogIterType = {
|
PyTypeObject RefLogIterType = {
|
||||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"_pygit2.RefLogIter", /* tp_name */
|
"_pygit2.RefLogIter", /* tp_name */
|
||||||
sizeof(RefLogIter), /* tp_basicsize */
|
sizeof(RefLogIter), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
|
@@ -446,7 +446,7 @@ TreeIter_iternext(TreeIter *self)
|
|||||||
PyDoc_STRVAR(TreeIter__doc__, "Tree iterator.");
|
PyDoc_STRVAR(TreeIter__doc__, "Tree iterator.");
|
||||||
|
|
||||||
PyTypeObject TreeIterType = {
|
PyTypeObject TreeIterType = {
|
||||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"_pygit2.TreeIter", /* tp_name */
|
"_pygit2.TreeIter", /* tp_name */
|
||||||
sizeof(TreeIter), /* tp_basicsize */
|
sizeof(TreeIter), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
|
Reference in New Issue
Block a user