FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Include/weakrefobject.h at 3.8 · python/cpython · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
python
/
cpython
Public
Uh oh!
There was an error while loading.
Please reload this page
.
Notifications
You must be signed in to change notification settings
Fork
35.3k
Star
74.9k
Code
Issues
5k+
Pull requests
2.5k
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
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
86 lines (67 loc) · 2.8 KB
Breadcrumbs
cpython
/
Include
/
weakrefobject.h
Copy path
File metadata and controls
86 lines (67 loc) · 2.8 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
83
84
85
86
/* 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.
*/
#ifndef
Py_LIMITED_API
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.
*/
Py_hash_t
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
;
};
#endif
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
);
#ifndef
Py_LIMITED_API
PyAPI_FUNC
(
Py_ssize_t
)
_PyWeakref_GetWeakrefCount
(
PyWeakReference
*
head
);
PyAPI_FUNC
(
void
)
_PyWeakref_ClearRef
(
PyWeakReference
*
self
);
#endif
/* 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