[Jython-checkins] jython: Remove shadowing of mutable statics in PySystemState, instead make them

jim.baker jython-checkins at python.org
Sat Jun 28 03:28:20 CEST 2014


http://hg.python.org/jython/rev/0e29ad2e098c
changeset:   7329:0e29ad2e098c
user:        Jim Baker <jim.baker at rackspace.com>
date:        Fri Jun 27 16:04:16 2014 -0600
summary:
  Remove shadowing of mutable statics in PySystemState, instead make them instance variables

files:
  src/org/python/core/PyBaseCode.java         |    2 +-
  src/org/python/core/PyFrame.java            |    2 +-
  src/org/python/core/PySystemState.java      |  103 ++-------
  src/org/python/core/PyTableCode.java        |    2 +-
  src/org/python/core/__builtin__.java        |    2 +-
  src/org/python/core/imp.java                |    2 +-
  src/org/python/util/InteractiveConsole.java |    2 +-
  7 files changed, 29 insertions(+), 86 deletions(-)


diff --git a/src/org/python/core/PyBaseCode.java b/src/org/python/core/PyBaseCode.java
--- a/src/org/python/core/PyBaseCode.java
+++ b/src/org/python/core/PyBaseCode.java
@@ -43,7 +43,7 @@
             } else {
                 //System.err.println("ts: "+ts);
                 //System.err.println("ss: "+ts.systemState);
-                frame.f_builtins = PySystemState.builtins;
+                frame.f_builtins = ts.systemState.builtins;
             }
         }
         // nested scopes: setup env with closure
diff --git a/src/org/python/core/PyFrame.java b/src/org/python/core/PyFrame.java
--- a/src/org/python/core/PyFrame.java
+++ b/src/org/python/core/PyFrame.java
@@ -273,7 +273,7 @@
 
         // Set up f_builtins if not already set
         if (f_builtins == null) {
-            f_builtins = PySystemState.builtins;
+            f_builtins = Py.getThreadState().systemState.builtins;
         }
         return f_builtins.__finditem__(index);
     }
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
@@ -116,9 +116,6 @@
     private static PyList defaultArgv;
     private static PyObject defaultExecutable;
 
-    // XXX - from Jython code, these statics are immutable; we may wish to consider
-    // using the shadowing mechanism for them as well if in practice it makes
-    // sense for them to be changed
     public static Properties registry; // = init_registry();
     public static PyObject prefix;
     public static PyObject exec_prefix = Py.EmptyString;
@@ -135,10 +132,10 @@
     public PyObject modules;
     public PyList path;
 
-    // shadowed statics - don't use directly
-    public static PyList warnoptions = new PyList();
-    public static PyObject builtins;
-    public static PyObject platform = new PyString("java");
+    public PyList warnoptions = new PyList();
+    public PyObject builtins;
+    private static PyObject defaultPlatform = new PyString("java");
+    public PyObject platform = defaultPlatform;
 
     public PyList meta_path;
     public PyList path_hooks;
@@ -199,6 +196,8 @@
         path.append(Py.newString(JavaImporter.JAVA_IMPORT_PATH_ENTRY));
         path.append(Py.newString(ClasspathPyImporter.PYCLASSPATH_PREFIX));
         executable = defaultExecutable;
+        builtins = getDefaultBuiltins();
+        platform = defaultPlatform;
 
         meta_path = new PyList();
         path_hooks = new PyList();
@@ -279,14 +278,9 @@
         ((PyFile)stderr).setEncoding(encoding, "backslashreplace");
     }
 
-    // might be nice to have something general here, but for now these
-    // seem to be the only values that need to be explicitly shadowed
-    private Shadow shadowing;
-
-    public synchronized void shadow() {
-        if (shadowing == null) {
-            shadowing = new Shadow();
-        }
+    @Deprecated
+    public void shadow() {
+        // Now a no-op
     }
 
     private static class DefaultBuiltinsHolder {
@@ -304,53 +298,29 @@
         return DefaultBuiltinsHolder.builtins;
     }
 
-    public synchronized PyObject getBuiltins() {
-        if (shadowing == null) {
-            return getDefaultBuiltins();
-        } else {
-            return shadowing.builtins;
-        }
+    public PyObject getBuiltins() {
+        return builtins;
     }
 
-    public synchronized void setBuiltins(PyObject value) {
-        if (shadowing == null) {
-            builtins = value;
-        } else {
-            shadowing.builtins = value;
-        }
+    public void setBuiltins(PyObject value) {
+        builtins = value;
         modules.__setitem__("__builtin__", new PyModule("__builtin__", value));
     }
 
-    public synchronized PyObject getWarnoptions() {
-        if (shadowing == null) {
-            return warnoptions;
-        } else {
-            return shadowing.warnoptions;
-        }
+    public PyObject getWarnoptions() {
+        return warnoptions;
     }
 
-    public synchronized void setWarnoptions(PyObject value) {
-        if (shadowing == null) {
-            warnoptions = new PyList(value);
-        } else {
-            shadowing.warnoptions = new PyList(value);
-        }
+    public void setWarnoptions(PyObject value) {
+        warnoptions = new PyList(value);
     }
 
-    public synchronized PyObject getPlatform() {
-        if (shadowing == null) {
-            return platform;
-        } else {
-            return shadowing.platform;
-        }
+    public PyObject getPlatform() {
+        return platform;
     }
 
-    public synchronized void setPlatform(PyObject value) {
-        if (shadowing == null) {
-            platform = value;
-        } else {
-            shadowing.platform = value;
-        }
+    public void setPlatform(PyObject value) {
+        platform = value;
     }
 
     public synchronized codecs.CodecState getCodecState() {
@@ -388,12 +358,6 @@
                 return null;
             }
             return exc.traceback;
-        } else if (name == "warnoptions") {
-            return getWarnoptions();
-        } else if (name == "builtins") {
-            return getBuiltins();
-        } else if (name == "platform") {
-            return getPlatform();
         } else {
             PyObject ret = super.__findattr_ex__(name);
             if (ret != null) {
@@ -416,14 +380,7 @@
     public void __setattr__(String name, PyObject value) {
         checkReadOnly(name);
         if (name == "builtins") {
-            shadow();
             setBuiltins(value);
-        } else if (name == "warnoptions") {
-            shadow();
-            setWarnoptions(value);
-        } else if (name == "platform") {
-            shadow();
-            setPlatform(value);
         } else {
             PyObject ret = getType().lookup(name); // xxx fix fix fix
             if (ret != null && ret._doset(this, value)) {
@@ -761,7 +718,7 @@
         }
     }
 
-    public static void determinePlatform(Properties props) {
+    private static void determinePlatform(Properties props) {
         String version = props.getProperty("java.version");
         if (version == null) {
             version = "???";
@@ -776,7 +733,7 @@
         if (version.equals("12")) {
             version = "1.2";
         }
-        platform = new PyString("java" + version);
+        defaultPlatform = new PyString("java" + version);
     }
 
     private static void initRegistry(Properties preProperties, Properties postProperties,
@@ -1755,20 +1712,6 @@
 }
 
 
-class Shadow {
-
-    PyObject builtins;
-    PyList warnoptions;
-    PyObject platform;
-
-    Shadow() {
-        builtins = PySystemState.getDefaultBuiltins();
-        warnoptions = PySystemState.warnoptions;
-        platform = PySystemState.platform;
-    }
-}
-
-
 @ExposedType(name = "sys.float_info", isBaseType = false)
 class FloatInfo extends PyTuple {
 
diff --git a/src/org/python/core/PyTableCode.java b/src/org/python/core/PyTableCode.java
--- a/src/org/python/core/PyTableCode.java
+++ b/src/org/python/core/PyTableCode.java
@@ -140,7 +140,7 @@
             } else {
                 //System.err.println("ts: "+ts);
                 //System.err.println("ss: "+ts.systemState);
-                frame.f_builtins = PySystemState.builtins;
+                frame.f_builtins = ts.systemState.builtins;;
             }
         }
         // nested scopes: setup env with closure
diff --git a/src/org/python/core/__builtin__.java b/src/org/python/core/__builtin__.java
--- a/src/org/python/core/__builtin__.java
+++ b/src/org/python/core/__builtin__.java
@@ -1234,7 +1234,7 @@
         if (frame != null && frame.f_builtins != null) {
             builtins = frame.f_builtins;
         } else {
-            builtins = PySystemState.builtins;
+            builtins = Py.getSystemState().builtins;
         }
 
         PyObject __import__ = builtins.__finditem__("__import__");
diff --git a/src/org/python/core/imp.java b/src/org/python/core/imp.java
--- a/src/org/python/core/imp.java
+++ b/src/org/python/core/imp.java
@@ -493,7 +493,7 @@
         }
         if (name == "__builtin__") {
             Py.writeComment(IMPORT_LOG, "'" + name + "' as __builtin__ in builtin modules");
-            return new PyModule("__builtin__", PySystemState.builtins);
+            return new PyModule("__builtin__", Py.getSystemState().builtins);
         }
         String mod = PySystemState.getBuiltin(name);
         if (mod != null) {
diff --git a/src/org/python/util/InteractiveConsole.java b/src/org/python/util/InteractiveConsole.java
--- a/src/org/python/util/InteractiveConsole.java
+++ b/src/org/python/util/InteractiveConsole.java
@@ -62,7 +62,7 @@
     }
 
     public static String getDefaultBanner() {
-        return String.format("Jython %s on %s", PySystemState.version, PySystemState.platform);
+        return String.format("Jython %s on %s", PySystemState.version, Py.getSystemState().platform);
     }
 
     public void interact(String banner, PyObject file) {

-- 
Repository URL: http://hg.python.org/jython


More information about the Jython-checkins mailing list