Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
PyPy
cffi
Commits
88b59dfa8176
Commit
1ba5778f
authored
Jul 06, 2015
by
Armin Rigo
Browse files
Found a simpler way to implement the in-line ffi.gc() on top of the
out-of-line one
parent
56ce956f2e0d
Changes
3
Hide whitespace changes
Inline
Side-by-side
c/_cffi_backend.c
View file @
88b59dfa
...
...
@@ -5554,9 +5554,6 @@ static PyObject *b__get_types(PyObject *self, PyObject *noarg)
(
PyObject
*
)
&
CTypeDescr_Type
);
}
/* forward: implemented in ffi_obj.c */
static
PyObject
*
b_gcp
(
PyObject
*
self
,
PyObject
*
args
);
/************************************************************/
static
char
_testfunc0
(
char
a
,
char
b
)
...
...
@@ -5862,7 +5859,6 @@ static PyMethodDef FFIBackendMethods[] = {
{
"newp_handle"
,
b_newp_handle
,
METH_VARARGS
},
{
"from_handle"
,
b_from_handle
,
METH_O
},
{
"from_buffer"
,
b_from_buffer
,
METH_VARARGS
},
{
"gcp"
,
b_gcp
,
METH_VARARGS
},
#ifdef MS_WIN32
{
"getwinerror"
,
(
PyCFunction
)
b_getwinerror
,
METH_VARARGS
|
METH_KEYWORDS
},
#endif
...
...
c/ffi_obj.c
View file @
88b59dfa
...
...
@@ -680,19 +680,6 @@ static PyObject *ffi_gc(FFIObject *self, PyObject *args, PyObject *kwds)
return
gc_weakrefs_build
(
self
,
cd
,
destructor
);
}
static
PyObject
*
b_gcp
(
PyObject
*
self
,
PyObject
*
args
)
{
/* for in-line mode */
static
FFIObject
*
ffi1
=
NULL
;
if
(
ffi1
==
NULL
)
{
ffi1
=
ffi_internal_new
(
&
FFI_Type
,
NULL
);
if
(
ffi1
==
NULL
)
return
NULL
;
}
return
ffi_gc
(
ffi1
,
args
,
NULL
);
}
PyDoc_STRVAR
(
ffi_callback_doc
,
"Return a callback object or a decorator making such a callback object.
\n
"
"'cdecl' must name a C function pointer type. The callback invokes the
\n
"
...
...
cffi/api.py
View file @
88b59dfa
...
...
@@ -72,6 +72,7 @@ class FFI(object):
self
.
_cdefsources
=
[]
self
.
_included_ffis
=
[]
self
.
_windows_unicode
=
None
self
.
_gcp
=
None
if
hasattr
(
backend
,
'set_ffi'
):
backend
.
set_ffi
(
self
)
for
name
in
backend
.
__dict__
:
...
...
@@ -328,13 +329,14 @@ class FFI(object):
data. Later, when this new cdata object is garbage-collected,
'destructor(old_cdata_object)' will be called.
"""
try
:
gcp
=
self
.
_
backend
.
gcp
except
AttributeError
:
pass
else
:
return
gcp
(
cdata
,
destructor
)
if
self
.
_gcp
is
not
None
:
return
self
.
_
gcp
(
cdata
,
destructor
)
if
hasattr
(
self
.
_backend
,
'FFI'
)
:
compiled_ffi
=
self
.
_backend
.
FFI
()
self
.
_gcp
=
compiled_ffi
.
gc
return
self
.
_
gcp
(
cdata
,
destructor
)
#
# the rest is for the ctypes backend only
with
self
.
_lock
:
try
:
gc_weakrefs
=
self
.
gc_weakrefs
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment