提交 71521741 authored 作者: Olivier Delalleau's avatar Olivier Delalleau

Proper C implementation for the generic type

上级 a6ea5b1e
...@@ -422,9 +422,14 @@ class Generic(SingletonType): ...@@ -422,9 +422,14 @@ class Generic(SingletonType):
PyObject* %(name)s; PyObject* %(name)s;
""" % locals() """ % locals()
def c_init(self, name, sub):
return """
%(name)s = NULL;
""" % locals()
def c_extract(self, name, sub): def c_extract(self, name, sub):
return """ return """
Py_XINCREF(py_%(name)s); Py_INCREF(py_%(name)s);
%(name)s = py_%(name)s; %(name)s = py_%(name)s;
""" % locals() """ % locals()
...@@ -435,9 +440,10 @@ class Generic(SingletonType): ...@@ -435,9 +440,10 @@ class Generic(SingletonType):
def c_sync(self, name, sub): def c_sync(self, name, sub):
return """ return """
Py_XDECREF(py_%(name)s); assert(py_%(name)s->ob_refcnt > 1);
py_%(name)s = %(name)s; Py_DECREF(py_%(name)s);
Py_XINCREF(py_%(name)s); py_%(name)s = %(name)s ? %(name)s : Py_None;
Py_INCREF(py_%(name)s);
""" % locals() """ % locals()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论