[Jython-checkins] jython: Extend ctypes Invoker#invoke() up to arity 6

wayne.meissner jython-checkins at python.org
Sun Sep 4 03:55:25 CEST 2011


http://hg.python.org/jython/rev/e99b0b6a6a9a
changeset:   6238:e99b0b6a6a9a
user:        Wayne Meissner <wmeissner at gmail.com>
date:        Fri Jun 17 22:09:57 2011 +1000
summary:
  Extend ctypes Invoker#invoke() up to arity 6

files:
  src/org/python/modules/jffi/DefaultInvokerFactory.java |  14 ++++++-
  src/org/python/modules/jffi/Function.java              |  19 +++++++++-
  src/org/python/modules/jffi/Invoker.java               |  16 ++++---
  src/org/python/modules/jffi/JITInvoker.java            |   6 +--
  4 files changed, 41 insertions(+), 14 deletions(-)


diff --git a/src/org/python/modules/jffi/DefaultInvokerFactory.java b/src/org/python/modules/jffi/DefaultInvokerFactory.java
--- a/src/org/python/modules/jffi/DefaultInvokerFactory.java
+++ b/src/org/python/modules/jffi/DefaultInvokerFactory.java
@@ -178,7 +178,7 @@
         void marshal(HeapInvocationBuffer buffer, PyObject arg);
     }
 
-    private static abstract class BaseInvoker implements Invoker {
+    private static abstract class BaseInvoker extends Invoker {
         final Function jffiFunction;
         final com.kenai.jffi.Invoker jffiInvoker = com.kenai.jffi.Invoker.getInstance();
         final ParameterMarshaller[] marshallers;
@@ -217,6 +217,18 @@
             return invoke(new PyObject[] { arg0, arg1, arg2 });
         }
 
+        public final PyObject invoke(PyObject arg0, PyObject arg1, PyObject arg2, PyObject arg3) {
+            return invoke(new PyObject[] { arg0, arg1, arg2, arg3 });
+        }
+
+        public final PyObject invoke(PyObject arg0, PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4) {
+            return invoke(new PyObject[] { arg0, arg1, arg2, arg3, arg4 });
+        }
+
+        public final PyObject invoke(PyObject arg0, PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4, PyObject arg5) {
+            return invoke(new PyObject[] { arg0, arg1, arg2, arg3, arg4, arg5 });
+        }
+
         final void checkArity(PyObject[] args) {
             checkArity(args.length);
         }
diff --git a/src/org/python/modules/jffi/Function.java b/src/org/python/modules/jffi/Function.java
--- a/src/org/python/modules/jffi/Function.java
+++ b/src/org/python/modules/jffi/Function.java
@@ -106,6 +106,11 @@
         return getInvoker().invoke(arg0, arg1, arg2);
     }
 
+    @Override
+    public PyObject __call__(PyObject arg0, PyObject arg1, PyObject arg2, PyObject arg3) {
+        return getInvoker().invoke(arg0, arg1, arg2, arg3);
+    }
+
 
     @ExposedGet(name = "restype")
     public PyObject getResultType() {
@@ -216,7 +221,7 @@
         this.jffiFunction = null;
     }
 
-    private static final class ErrCheckInvoker implements Invoker {
+    private static final class ErrCheckInvoker extends Invoker {
         private final Invoker invoker;
         private final PyObject errcheck;
 
@@ -244,5 +249,17 @@
         public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3) {
             return errcheck.__call__(invoker.invoke(arg1, arg2, arg3));
         }
+
+        public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4) {
+            return errcheck.__call__(invoker.invoke(arg1, arg2, arg3, arg4));
+        }
+
+        public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4, PyObject arg5) {
+            return errcheck.__call__(invoker.invoke(arg1, arg2, arg3, arg4, arg5));
+        }
+
+        public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4, PyObject arg5, PyObject arg6) {
+            return errcheck.__call__(invoker.invoke(arg1, arg2, arg3, arg4, arg5, arg6));
+        }
     }
 }
diff --git a/src/org/python/modules/jffi/Invoker.java b/src/org/python/modules/jffi/Invoker.java
--- a/src/org/python/modules/jffi/Invoker.java
+++ b/src/org/python/modules/jffi/Invoker.java
@@ -3,11 +3,13 @@
 
 import org.python.core.PyObject;
 
-public interface Invoker {
-    public PyObject invoke(PyObject[] args);
-    public PyObject invoke();
-    public PyObject invoke(PyObject arg1);
-    public PyObject invoke(PyObject arg1, PyObject arg2);
-    public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3);
-
+abstract public class Invoker {
+    abstract public PyObject invoke(PyObject[] args);
+    abstract public PyObject invoke();
+    abstract public PyObject invoke(PyObject arg1);
+    abstract public PyObject invoke(PyObject arg1, PyObject arg2);
+    abstract public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3);
+    abstract public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4);
+    abstract public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4, PyObject arg5);
+    abstract public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4, PyObject arg5, PyObject arg6);
 }
diff --git a/src/org/python/modules/jffi/JITInvoker.java b/src/org/python/modules/jffi/JITInvoker.java
--- a/src/org/python/modules/jffi/JITInvoker.java
+++ b/src/org/python/modules/jffi/JITInvoker.java
@@ -7,7 +7,7 @@
 /**
  *
  */
-abstract public class JITInvoker implements Invoker {
+abstract public class JITInvoker extends Invoker {
     protected static final com.kenai.jffi.Invoker jffiInvoker = com.kenai.jffi.Invoker.getInstance();
     private final int arity;
 
@@ -59,8 +59,4 @@
                 throw Py.RuntimeError("invalid fast-int arity");
         }
     }
-
-    abstract public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4);
-    abstract public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4, PyObject arg5);
-    abstract public PyObject invoke(PyObject arg1, PyObject arg2, PyObject arg3, PyObject arg4, PyObject arg5, PyObject arg6);
 }

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


More information about the Jython-checkins mailing list