[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