[Jython-checkins] jython: Applied AbstractDict-unification of PyDictionary and PyStringMap to various

stefan.richthofer jython-checkins at python.org
Sun Jan 8 18:09:39 EST 2017


https://hg.python.org/jython/rev/2315cf2259b6
changeset:   7991:2315cf2259b6
user:        Stefan Richthofer <stefan.richthofer at gmx.de>
date:        Mon Jan 09 00:09:25 2017 +0100
summary:
  Applied AbstractDict-unification of PyDictionary and PyStringMap to various further places.

files:
  src/org/python/core/PyBaseException.java         |   2 +-
  src/org/python/core/PyClass.java                 |  12 +++++-----
  src/org/python/core/PyFunction.java              |   8 +++---
  src/org/python/core/PyInstance.java              |   2 +-
  src/org/python/core/PyModule.java                |   3 +-
  src/org/python/core/PyObject.java                |   3 +-
  src/org/python/core/PyString.java                |   2 +-
  src/org/python/core/PyStringMap.java             |   9 +-----
  src/org/python/modules/_functools/PyPartial.java |   9 ++++---
  9 files changed, 22 insertions(+), 28 deletions(-)


diff --git a/src/org/python/core/PyBaseException.java b/src/org/python/core/PyBaseException.java
--- a/src/org/python/core/PyBaseException.java
+++ b/src/org/python/core/PyBaseException.java
@@ -96,7 +96,7 @@
     @ExposedMethod(doc = BuiltinDocs.BaseException___setstate___doc)
     final PyObject BaseException___setstate__(PyObject state) {
         if (state != Py.None) {
-            if (!(state instanceof PyStringMap) && !(state instanceof PyDictionary)) {
+            if (!(state instanceof AbstractDict)) {
                 throw Py.TypeError("state is not a dictionary");
             }
             for (PyObject key : state.asIterable()) {
diff --git a/src/org/python/core/PyClass.java b/src/org/python/core/PyClass.java
--- a/src/org/python/core/PyClass.java
+++ b/src/org/python/core/PyClass.java
@@ -14,7 +14,7 @@
     public static final PyType TYPE = PyType.fromClass(PyClass.class);
 
     /** Holds the namespace for this class */
-    public PyObject __dict__;
+    public AbstractDict __dict__;
 
     /** The base classes of this class */
     public PyTuple __bases__;
@@ -46,7 +46,7 @@
         if (!name.getType().isSubType(PyString.TYPE)) {
             throw Py.TypeError("PyClass_New: name must be a string");
         }
-        if (!(dict instanceof PyStringMap || dict instanceof PyDictionary)) {
+        if (!(dict instanceof AbstractDict)) {
             throw Py.TypeError("PyClass_New: dict must be a dictionary");
         }
         PyType.ensureDoc(dict);
@@ -69,7 +69,7 @@
         PyClass klass = new PyClass();
         klass.__name__ = name.toString();
         klass.__bases__ = basesTuple;
-        klass.__dict__ = dict;
+        klass.__dict__ = (AbstractDict) dict;
         klass.cacheDescriptors();
         return klass;
     }
@@ -100,7 +100,7 @@
     }
 
     @Override
-    public PyObject fastGetDict() {
+    public AbstractDict fastGetDict() {
         return __dict__;
     }
 
@@ -248,10 +248,10 @@
     }
 
     public void setDict(PyObject value) {
-        if (value == null || !(value instanceof PyStringMap || value instanceof PyDictionary)) {
+        if (value == null || !(value instanceof AbstractDict)) {
             throw Py.TypeError("__dict__ must be a dictionary object");
         }
-        __dict__ = value;
+        __dict__ = (AbstractDict) value;
     }
 
     public void setBases(PyObject value) {
diff --git a/src/org/python/core/PyFunction.java b/src/org/python/core/PyFunction.java
--- a/src/org/python/core/PyFunction.java
+++ b/src/org/python/core/PyFunction.java
@@ -47,7 +47,7 @@
      * A function's lazily created __dict__; allows arbitrary
      * attributes to be tacked on. Read only.
      */
-    public PyObject __dict__;
+    public AbstractDict __dict__;
 
     /** A read only closure tuple for nested scopes. */
     @ExposedGet
@@ -269,7 +269,7 @@
     }
 
     @Override
-    public PyObject fastGetDict() {
+    public AbstractDict fastGetDict() {
         return __dict__;
     }
 
@@ -281,10 +281,10 @@
 
     @ExposedSet(name = "__dict__")
     public void setDict(PyObject value) {
-        if (!(value instanceof PyDictionary) && !(value instanceof PyStringMap)) {
+        if (!(value instanceof AbstractDict)) {
             throw Py.TypeError("setting function's dictionary to a non-dict");
         }
-        __dict__ = value;
+        __dict__ = (AbstractDict) value;
     }
 
     @ExposedDelete(name = "__dict__")
diff --git a/src/org/python/core/PyInstance.java b/src/org/python/core/PyInstance.java
--- a/src/org/python/core/PyInstance.java
+++ b/src/org/python/core/PyInstance.java
@@ -52,7 +52,7 @@
         PyObject dict = ap.getPyObject(1, Py.None);
         if (dict == Py.None) {
             dict = null;
-        } else if (!(dict instanceof PyStringMap || dict instanceof PyDictionary)) {
+        } else if (!(dict instanceof AbstractDict)) {
             throw Py.TypeError("instance() second arg must be dictionary or None");
         }
         return new PyInstance(klass, dict);
diff --git a/src/org/python/core/PyModule.java b/src/org/python/core/PyModule.java
--- a/src/org/python/core/PyModule.java
+++ b/src/org/python/core/PyModule.java
@@ -199,8 +199,7 @@
             d = __dict__;
         }
         if (d == null ||
-                !(d instanceof PyDictionary ||
-                  d instanceof PyStringMap ||
+                !(d instanceof AbstractDict ||
                   d instanceof PyDictProxy)) {
             throw Py.TypeError(String.format("%.200s.__dict__ is not a dictionary",
                     getType().fastGetName().toLowerCase()));
diff --git a/src/org/python/core/PyObject.java b/src/org/python/core/PyObject.java
--- a/src/org/python/core/PyObject.java
+++ b/src/org/python/core/PyObject.java
@@ -1120,8 +1120,7 @@
         if (obj == null) {
             return;
         }
-        if (obj instanceof PyDictionary || obj instanceof PyStringMap
-            || obj instanceof PyDictProxy) {
+        if (obj instanceof AbstractDict || obj instanceof PyDictProxy) {
             accum.update(obj);
         }
     }
diff --git a/src/org/python/core/PyString.java b/src/org/python/core/PyString.java
--- a/src/org/python/core/PyString.java
+++ b/src/org/python/core/PyString.java
@@ -4508,7 +4508,7 @@
         } else {
             // Not a tuple, but possibly still some kind of container: use special argIndex values.
             argIndex = -1;
-            if (args instanceof PyDictionary || args instanceof PyStringMap
+            if (args instanceof AbstractDict
                     || (!(args instanceof PySequence) && args.__findattr__("__getitem__") != null)) {
                 dict = args;
                 argIndex = -3;
diff --git a/src/org/python/core/PyStringMap.java b/src/org/python/core/PyStringMap.java
--- a/src/org/python/core/PyStringMap.java
+++ b/src/org/python/core/PyStringMap.java
@@ -266,7 +266,7 @@
 
     @ExposedMethod(type = MethodType.CMP, doc = BuiltinDocs.dict___cmp___doc)
     final int stringmap___cmp__(PyObject other) {
-        if (!(other instanceof PyStringMap || other instanceof PyDictionary)) {
+        if (!(other instanceof AbstractDict)) {
             return -2;
         }
         int an = __len__();
@@ -278,12 +278,7 @@
             return 1;
         }
         PyList akeys = keys();
-        PyList bkeys = null;
-        if (other instanceof PyStringMap) {
-            bkeys = ((PyStringMap)other).keys();
-        } else {
-            bkeys = ((PyDictionary)other).keys();
-        }
+        PyList bkeys = ((AbstractDict) other).keys();
         akeys.sort();
         bkeys.sort();
         for (int i = 0; i < bn; i++) {
diff --git a/src/org/python/modules/_functools/PyPartial.java b/src/org/python/modules/_functools/PyPartial.java
--- a/src/org/python/modules/_functools/PyPartial.java
+++ b/src/org/python/modules/_functools/PyPartial.java
@@ -8,6 +8,7 @@
 import org.python.core.PyNewWrapper;
 import org.python.core.PyObject;
 import org.python.core.PyStringMap;
+import org.python.core.AbstractDict;
 import org.python.core.PyTuple;
 import org.python.core.PyType;
 import org.python.core.Traverseproc;
@@ -35,7 +36,7 @@
     private String[] keywords;
 
     /** Lazily created dict for extra attributes. */
-    private PyObject __dict__;
+    private AbstractDict __dict__;
 
     public PyPartial() {
         super(TYPE);
@@ -162,7 +163,7 @@
     }
 
     @Override
-    public PyObject fastGetDict() {
+    public AbstractDict fastGetDict() {
         return __dict__;
     }
 
@@ -176,10 +177,10 @@
     @Override
     @ExposedSet(name = "__dict__")
     public void setDict(PyObject val) {
-        if (!(val instanceof PyStringMap) && !(val instanceof PyDictionary)) {
+        if (!(val instanceof AbstractDict)) {
             throw Py.TypeError("setting partial object's dictionary to a non-dict");
         }
-        __dict__ = val;
+        __dict__ = (AbstractDict) val;
     }
 
     private void ensureDict() {

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


More information about the Jython-checkins mailing list