Package org.python.core
Class JyAttribute
java.lang.Object
org.python.core.JyAttribute
- All Implemented Interfaces:
Serializable
Manages a linked list of general purpose Object-attributes that
can be attached to arbitrary PyObjects.
This method replaces the formerly used method of maintaining weak
hash-maps (WeakHashMap) for such cases.
These weak hash-maps were used to map
PyObjects to such attributes, for instance
to attach
GlobalRef-objects in the
WeakrefModule.
Attributes attached via the weak hash-map-method break, if the
PyObject is resurrected in its finalizer. The
JyAttribute-method is resurrection-safe.
To reduce memory footprint of PyObjects, the fields for
FinalizeTriggers and
javaProxy are included in the list; javaProxy always
on top so there is no speed-regression,
FinalizeTrigger on bottom,
as it is usually never accessed.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final bytestatic final byteUsed bygc-module to mark cyclic trash.static final byteUsed bygc-module to mark finalizable objects that might have been resurrected during a delayed finalization process.static final bytestatic final byteReserved for use by JyNI.static final byteAllows the id of aPyObjectto persist resurrection of that object.static final byteOnly used internally byPy.javaPyClass(PyObject, Class)static final byteStores list of weak references linking to thisPyObject.static final byteHolds the current thread for anAbstractReferencewhile referent-retrieval is pending due to a potentially restored-by-resurrection weak reference. -
Method Summary
Modifier and TypeMethodDescriptionstatic voiddebugPrintAttributes(PyObject o, PrintStream out) Prints the current state of the attribute-list of the given object to the given stream.static voidRemoves the attribute of given type from the given object's attribute-list (if it existed at all).static ObjectRetrieves the attribute of the given type from the givenPyObject.static booleanChecks whether the givenPyObjecthas an attribute of the given type attached.static byteReserves and returns a new non-transient attr type for custom use.static byteReserves and returns a new transient attr type for custom use.static voidSets the attribute of typeattr_typeinobtovalue.
-
Field Details
-
JAVA_PROXY_ATTR
public static final byte JAVA_PROXY_ATTR- See Also:
-
WEAK_REF_ATTR
public static final byte WEAK_REF_ATTRStores list of weak references linking to thisPyObject. This list is weakref-based, so it does not keep the weakrefs alive. This is the only way to find out which weakrefs (i.e.AbstractReference) linked to the object after a resurrection. A weak hash-map-based approach for this purpose would break on resurrection.- See Also:
-
JYNI_HANDLE_ATTR
public static final byte JYNI_HANDLE_ATTRReserved for use by JyNI.- See Also:
-
PY_ID_ATTR
public static final byte PY_ID_ATTRAllows the id of aPyObjectto persist resurrection of that object.- See Also:
-
WEAKREF_PENDING_GET_ATTR
public static final byte WEAKREF_PENDING_GET_ATTRHolds the current thread for anAbstractReferencewhile referent-retrieval is pending due to a potentially restored-by-resurrection weak reference. After the restore has happened or the clear was confirmed, the thread is interrupted and the attribute is cleared.- See Also:
-
PYCLASS_PY2JY_CACHE_ATTR
public static final byte PYCLASS_PY2JY_CACHE_ATTROnly used internally byPy.javaPyClass(PyObject, Class)- See Also:
-
GC_CYCLE_MARK_ATTR
public static final byte GC_CYCLE_MARK_ATTRUsed bygc-module to mark cyclic trash. Searching for cyclic trash is usually not required by Jython. It is only done if gc-features are enabled that mimic CPython behavior.- See Also:
-
GC_DELAYED_FINALIZE_CRITICAL_MARK_ATTR
public static final byte GC_DELAYED_FINALIZE_CRITICAL_MARK_ATTRUsed bygc-module to mark finalizable objects that might have been resurrected during a delayed finalization process.- See Also:
-
FINALIZE_TRIGGER_ATTR
public static final byte FINALIZE_TRIGGER_ATTR- See Also:
-
-
Method Details
-
reserveCustomAttrType
public static byte reserveCustomAttrType()Reserves and returns a new non-transient attr type for custom use.- Returns:
- a non-transient attr type for custom use
-
reserveTransientCustomAttrType
public static byte reserveTransientCustomAttrType()Reserves and returns a new transient attr type for custom use.- Returns:
- a transient attr type for custom use
-
hasAttr
Checks whether the givenPyObjecthas an attribute of the given type attached. -
getAttr
Retrieves the attribute of the given type from the givenPyObject. If no attribute of the given type is attached, null is returned. -
debugPrintAttributes
Prints the current state of the attribute-list of the given object to the given stream. (Intended for debugging) -
setAttr
Sets the attribute of typeattr_typeinobtovalue. If no corresponding attribute exists yet, one is created. Ifvalue == null, the attribute is removed (if it existed at all). -
delAttr
Removes the attribute of given type from the given object's attribute-list (if it existed at all). This is equivalent to callingsetAttr(ob, attr_type, null).
-