[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