History

add hg and python

cinap_lenrek committed 15 years ago

Commit 4bb9e221 parent 987265c3706 files · +1228772 −-233Browse files

Showing the changes to sys/src/cmd/python/Include/weakrefobject.h (1 of 3706 files). Show all

Unified · Split

sys/src/cmd/python/Include/weakrefobject.h+75−0
@@ -0,0 +1,75 @@
1+/* Weak references objects for Python. */
2+
3+#ifndef Py_WEAKREFOBJECT_H
4+#define Py_WEAKREFOBJECT_H
5+#ifdef __cplusplus
6+extern "C" {
7+#endif
8+
9+
10+typedef struct _PyWeakReference PyWeakReference;
11+
12+/* PyWeakReference is the base struct for the Python ReferenceType, ProxyType,
13+ * and CallableProxyType.
14+ */
15+struct _PyWeakReference {
16+ PyObject_HEAD
17+
18+ /* The object to which this is a weak reference, or Py_None if none.
19+ * Note that this is a stealth reference: wr_object's refcount is
20+ * not incremented to reflect this pointer.
21+ */
22+ PyObject *wr_object;
23+
24+ /* A callable to invoke when wr_object dies, or NULL if none. */
25+ PyObject *wr_callback;
26+
27+ /* A cache for wr_object's hash code. As usual for hashes, this is -1
28+ * if the hash code isn't known yet.
29+ */
30+ long hash;
31+
32+ /* If wr_object is weakly referenced, wr_object has a doubly-linked NULL-
33+ * terminated list of weak references to it. These are the list pointers.
34+ * If wr_object goes away, wr_object is set to Py_None, and these pointers
35+ * have no meaning then.
36+ */
37+ PyWeakReference *wr_prev;
38+ PyWeakReference *wr_next;
39+};
40+
41+PyAPI_DATA(PyTypeObject) _PyWeakref_RefType;
42+PyAPI_DATA(PyTypeObject) _PyWeakref_ProxyType;
43+PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType;
44+
45+#define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType)
46+#define PyWeakref_CheckRefExact(op) \
47+ ((op)->ob_type == &_PyWeakref_RefType)
48+#define PyWeakref_CheckProxy(op) \
49+ (((op)->ob_type == &_PyWeakref_ProxyType) || \
50+ ((op)->ob_type == &_PyWeakref_CallableProxyType))
51+
52+/* This macro calls PyWeakref_CheckRef() last since that can involve a
53+ function call; this makes it more likely that the function call
54+ will be avoided. */
55+#define PyWeakref_Check(op) \
56+ (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
57+
58+
59+PyAPI_FUNC(PyObject *) PyWeakref_NewRef(PyObject *ob,
60+ PyObject *callback);
61+PyAPI_FUNC(PyObject *) PyWeakref_NewProxy(PyObject *ob,
62+ PyObject *callback);
63+PyAPI_FUNC(PyObject *) PyWeakref_GetObject(PyObject *ref);
64+
65+PyAPI_FUNC(Py_ssize_t) _PyWeakref_GetWeakrefCount(PyWeakReference *head);
66+
67+PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self);
68+
69+#define PyWeakref_GET_OBJECT(ref) (((PyWeakReference *)(ref))->wr_object)
70+
71+
72+#ifdef __cplusplus
73+}
74+#endif
75+#endif /* !Py_WEAKREFOBJECT_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t