[Jython-checkins] jython: Implemented sys._current_frames.
stefan.richthofer
jython-checkins at python.org
Fri Mar 31 09:47:29 EDT 2017
https://hg.python.org/jython/rev/b051f30c4cd4
changeset: 8072:b051f30c4cd4
user: Stefan Richthofer <stefan.richthofer at gmx.de>
date: Fri Mar 31 15:45:30 2017 +0200
summary:
Implemented sys._current_frames.
files:
src/org/python/core/PySystemState.java | 4 +
src/org/python/core/ThreadStateMapping.java | 21 ++++++++++
2 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/src/org/python/core/PySystemState.java b/src/org/python/core/PySystemState.java
--- a/src/org/python/core/PySystemState.java
+++ b/src/org/python/core/PySystemState.java
@@ -1524,6 +1524,10 @@
return f;
}
+ public static PyDictionary _current_frames() {
+ return ThreadStateMapping._current_frames();
+ }
+
public void registerCloser(Callable<Void> resourceCloser) {
closer.registerCloser(resourceCloser);
}
diff --git a/src/org/python/core/ThreadStateMapping.java b/src/org/python/core/ThreadStateMapping.java
--- a/src/org/python/core/ThreadStateMapping.java
+++ b/src/org/python/core/ThreadStateMapping.java
@@ -88,4 +88,25 @@
scoped[1] = null; // allow corresponding PySystemState to be GCed
}
}
+
+ @SuppressWarnings("unchecked")
+ private static Map.Entry<Thread, ThreadState>[] entriesPrototype = new Map.Entry[0];
+ public static PyDictionary _current_frames() {
+ Map.Entry<Thread, ThreadState>[] entries = globalThreadStates.entrySet().toArray(entriesPrototype);
+ int i = 0;
+ for (Map.Entry<Thread, ThreadState> entry: entries) {
+ if (entry.getValue().frame != null) {
+ ++i;
+ }
+ }
+ PyObject elements[] = new PyObject[i*2];
+ i = 0;
+ for (Map.Entry<Thread, ThreadState> entry: entries) {
+ if (entry.getValue().frame != null) {
+ elements[i++] = Py.newInteger(entry.getKey().getId());
+ elements[i++] = entry.getValue().frame;
+ }
+ }
+ return new PyDictionary(elements);
+ }
}
--
Repository URL: https://hg.python.org/jython
More information about the Jython-checkins
mailing list