FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Include/weakrefobject.h at 2.7 · python-emscripten/cpython · GitHub
python-emscripten
cpython
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Include
/
weakrefobject.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
82 lines (63 loc) · 2.74 KB
Breadcrumbs
cpython
/
Include
/
weakrefobject.h
Copy path
File metadata and controls
82 lines (63 loc) · 2.74 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/* Weak references objects for Python. */
#ifndef
Py_WEAKREFOBJECT_H
#define
Py_WEAKREFOBJECT_H
#ifdef
__cplusplus
extern
"C"
{
#endif
typedef
struct
_PyWeakReference
PyWeakReference
;
/* PyWeakReference is the base struct for the Python ReferenceType, ProxyType,
* and CallableProxyType.
*/
struct
_PyWeakReference
{
PyObject_HEAD
/* The object to which this is a weak reference, or Py_None if none.
* Note that this is a stealth reference: wr_object's refcount is
* not incremented to reflect this pointer.
*/
PyObject
*
wr_object
;
/* A callable to invoke when wr_object dies, or NULL if none. */
PyObject
*
wr_callback
;
/* A cache for wr_object's hash code. As usual for hashes, this is -1
* if the hash code isn't known yet.
*/
long
hash
;
/* If wr_object is weakly referenced, wr_object has a doubly-linked NULL-
* terminated list of weak references to it. These are the list pointers.
* If wr_object goes away, wr_object is set to Py_None, and these pointers
* have no meaning then.
*/
PyWeakReference
*
wr_prev
;
PyWeakReference
*
wr_next
;
};
PyAPI_DATA
(
PyTypeObject
)
_PyWeakref_RefType
;
PyAPI_DATA
(
PyTypeObject
)
_PyWeakref_ProxyType
;
PyAPI_DATA
(
PyTypeObject
)
_PyWeakref_CallableProxyType
;
#define
PyWeakref_CheckRef
(
op
) PyObject_TypeCheck(op, &_PyWeakref_RefType)
#define
PyWeakref_CheckRefExact
(
op
) \
(Py_TYPE(op) == &_PyWeakref_RefType)
#define
PyWeakref_CheckProxy
(
op
) \
((Py_TYPE(op) == &_PyWeakref_ProxyType) || \
(Py_TYPE(op) == &_PyWeakref_CallableProxyType))
#define
PyWeakref_Check
(
op
) \
(PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
PyAPI_FUNC
(
PyObject
*
)
PyWeakref_NewRef
(
PyObject
*
ob
,
PyObject
*
callback
);
PyAPI_FUNC
(
PyObject
*
)
PyWeakref_NewProxy
(
PyObject
*
ob
,
PyObject
*
callback
);
PyAPI_FUNC
(
PyObject
*
)
PyWeakref_GetObject
(
PyObject
*
ref
);
PyAPI_FUNC
(
Py_ssize_t
)
_PyWeakref_GetWeakrefCount
(
PyWeakReference
*
head
);
PyAPI_FUNC
(
void
)
_PyWeakref_ClearRef
(
PyWeakReference
*
self
);
/* Explanation for the Py_REFCNT() check: when a weakref's target is part
of a long chain of deallocations which triggers the trashcan mechanism,
clearing the weakrefs can be delayed long after the target's refcount
has dropped to zero. In the meantime, code accessing the weakref will
be able to "see" the target object even though it is supposed to be
unreachable. See issue #16602. */
#define
PyWeakref_GET_OBJECT
(
ref
) \
(Py_REFCNT(((PyWeakReference *)(ref))->wr_object) > 0 \
? ((PyWeakReference *)(ref))->wr_object \
: Py_None)
#ifdef
__cplusplus
}
#endif
#endif
/* !Py_WEAKREFOBJECT_H */
Back
|
FazBrowse Home
|
New Git URL