[Jython-checkins] jython: Removedor reduced Traverseproc implementation of named_tuple-like struct

stefan.richthofer jython-checkins at python.org
Fri Feb 24 04:44:26 EST 2017


https://hg.python.org/jython/rev/b263f56ea793
changeset:   8028:b263f56ea793
user:        Stefan Richthofer <stefan.richthofer at gmx.de>
date:        Fri Feb 24 10:43:57 2017 +0100
summary:
  Removedor reduced Traverseproc implementation of named_tuple-like struct objects LongInfo, FloatInfo, PyStatResult.

files:
  src/org/python/core/PySystemState.java         |  98 +---------
  src/org/python/modules/posix/PyStatResult.java |  52 +----
  2 files changed, 14 insertions(+), 136 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
@@ -1904,79 +1904,10 @@
     }
 
 
-    /* Traverseproc implementation */
-    @Override
-    public int traverse(Visitproc visit, Object arg) {
-        int retVal = super.traverse(visit, arg);
-        if (max != null) {
-            retVal = visit.visit(max, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (max_exp != null) {
-            retVal = visit.visit(max_exp, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (max_10_exp != null) {
-            retVal = visit.visit(max_10_exp, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (min != null) {
-            retVal = visit.visit(min, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (min_exp != null) {
-            retVal = visit.visit(min_exp, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (min_10_exp != null) {
-            retVal = visit.visit(min_10_exp, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (dig != null) {
-            retVal = visit.visit(dig, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (mant_dig != null) {
-            retVal = visit.visit(mant_dig, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (epsilon != null) {
-            retVal = visit.visit(epsilon, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (radix != null) {
-            retVal = visit.visit(radix, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        return rounds == null ? 0 : visit.visit(rounds, arg);
-    }
-
-    @Override
-    public boolean refersDirectlyTo(PyObject ob) {
-        return ob != null && (ob == max || ob == max_exp || ob == max_10_exp || ob == min
-            || ob == min_exp || ob == min_10_exp || ob == dig
-            || ob == mant_dig || ob == epsilon || ob == radix || ob == rounds);
-    }
+    /* Note for Traverseproc implementation:
+     * We needn't visit the fields, because they are also represented as tuple elements
+     * in the parent class. So deferring to super-implementation is sufficient.
+     */
 }
 
 
@@ -2009,21 +1940,8 @@
     }
 
 
-    /* Traverseproc implementation */
-    @Override
-    public int traverse(Visitproc visit, Object arg) {
-        int retVal = super.traverse(visit, arg);
-        if (bits_per_digit != null) {
-            retVal = visit.visit(bits_per_digit, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        return sizeof_digit == null ? 0 : visit.visit(sizeof_digit, arg);
-    }
-
-    @Override
-    public boolean refersDirectlyTo(PyObject ob) {
-        return ob != null && (ob == bits_per_digit || ob == sizeof_digit);
-    }
+    /* Note for Traverseproc implementation:
+     * We needn't visit the fields, because they are also represented as tuple elements
+     * in the parent class. So deferring to super-implementation is sufficient.
+     */
 }
diff --git a/src/org/python/modules/posix/PyStatResult.java b/src/org/python/modules/posix/PyStatResult.java
--- a/src/org/python/modules/posix/PyStatResult.java
+++ b/src/org/python/modules/posix/PyStatResult.java
@@ -239,55 +239,16 @@
     }
 
 
-    /* Traverseproc implementation */
+    /* Traverseproc implementation
+     * Note that there are more fields to traverse. However traverse in PyTuple handles those.
+     * Here we only traverse values that are not exactly referenced in PyTuple entries.
+     */
     @Override
     public int traverse(Visitproc visit, Object arg) {
         int retVal = super.traverse(visit, arg);
         if (retVal != 0) {
             return retVal;
         }
-        if (st_mode != null) {
-            retVal = visit.visit(st_mode, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (st_ino != null) {
-            retVal = visit.visit(st_ino, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (st_dev != null) {
-            retVal = visit.visit(st_dev, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (st_nlink != null) {
-            retVal = visit.visit(st_nlink, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (st_uid != null) {
-            retVal = visit.visit(st_uid, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (st_gid != null) {
-            retVal = visit.visit(st_gid, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
-        if (st_size != null) {
-            retVal = visit.visit(st_size, arg);
-            if (retVal != 0) {
-                return retVal;
-            }
-        }
         if (st_atime != null) {
             retVal = visit.visit(st_atime, arg);
             if (retVal != 0) {
@@ -305,8 +266,7 @@
 
     @Override
     public boolean refersDirectlyTo(PyObject ob) {
-        return ob != null && (ob == st_mode || ob == st_ino || ob == st_dev || ob == st_nlink
-            || ob == st_uid || ob == st_gid || ob == st_size || ob == st_atime
-            || ob == st_mtime || ob == st_ctime || super.refersDirectlyTo(ob));
+        return ob != null && (ob == st_atime || ob == st_mtime
+            || ob == st_ctime || super.refersDirectlyTo(ob));
     }
 }

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


More information about the Jython-checkins mailing list