diff options
Diffstat (limited to 'src/jvm')
-rw-r--r-- | src/jvm/clojure/lang/AFn.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Accessor.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IFn.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Keyword.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 8 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Reflector.java | 18 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RestFn0.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RestFn1.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RestFn2.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RestFn3.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RestFn4.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RestFn5.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Var.java | 2 |
13 files changed, 35 insertions, 27 deletions
diff --git a/src/jvm/clojure/lang/AFn.java b/src/jvm/clojure/lang/AFn.java index c543bab6..cac16066 100644 --- a/src/jvm/clojure/lang/AFn.java +++ b/src/jvm/clojure/lang/AFn.java @@ -45,7 +45,7 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return throwArity(); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { return throwArity(); @@ -90,7 +90,7 @@ static public Object applyToHelper(IFn ifn, ISeq arglist) throws Exception , (arglist = arglist.rest()).first() , (arglist = arglist.rest()).first() , (arglist = arglist.rest()).first() - , arglist.rest()); + , RT.seqToArray(arglist.rest())); } } diff --git a/src/jvm/clojure/lang/Accessor.java b/src/jvm/clojure/lang/Accessor.java index 58ec3d24..450e7633 100644 --- a/src/jvm/clojure/lang/Accessor.java +++ b/src/jvm/clojure/lang/Accessor.java @@ -68,7 +68,7 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3,arg4,arg5); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3,arg4,arg5,args); diff --git a/src/jvm/clojure/lang/IFn.java b/src/jvm/clojure/lang/IFn.java index e2b6a4f5..e6f9b474 100644 --- a/src/jvm/clojure/lang/IFn.java +++ b/src/jvm/clojure/lang/IFn.java @@ -28,7 +28,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object throws Exception; public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, - ISeq args) throws Exception; + Object... args) throws Exception; public Object applyTo(ISeq arglist) throws Exception; } diff --git a/src/jvm/clojure/lang/Keyword.java b/src/jvm/clojure/lang/Keyword.java index d1e1edb1..0062db2f 100644 --- a/src/jvm/clojure/lang/Keyword.java +++ b/src/jvm/clojure/lang/Keyword.java @@ -75,7 +75,7 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return AFn.throwArity(); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { return AFn.throwArity(); diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index da66e970..a9b074a7 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -251,6 +251,14 @@ static public Cons arrayToList(Object[] a) throws Exception { return ret; } +static public Object[] seqToArray(ISeq seq) throws Exception { + int len = length(seq); + Object[] ret = new Object[len]; + for(int i=0;seq != null;++i, seq = seq.rest()) + ret[i] = seq.first(); + return ret; +} + static public int length(ISeq list) throws Exception { int i = 0; for(ISeq c = list; c != null; c = c.rest()) diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java index c4eb9d7e..13d9bcd3 100644 --- a/src/jvm/clojure/lang/Reflector.java +++ b/src/jvm/clojure/lang/Reflector.java @@ -167,17 +167,17 @@ public static Object invokeInstanceMember(String name, Object target, Object arg public static Object invokeInstanceMember(String name, Object target, Object arg1, Object arg2, Object arg3, Object arg4, - ISeq arglist) + Object... args) throws Exception { - Object[] args = new Object[4 + RT.length(arglist)]; - args[0] = arg1; - args[1] = arg2; - args[2] = arg3; - args[3] = arg4; - for(int i = 4; arglist != null; i++, arglist = arglist.rest()) - args[i] = arglist.first(); - return invokeInstanceMethod(name, target, args); + Object[] arguments = new Object[4 + args.length]; + arguments[0] = arg1; + arguments[1] = arg2; + arguments[2] = arg3; + arguments[3] = arg4; + if(args.length > 0) + System.arraycopy(args, 0, arguments, 4, args.length); + return invokeInstanceMethod(name, target, arguments); } diff --git a/src/jvm/clojure/lang/RestFn0.java b/src/jvm/clojure/lang/RestFn0.java index 914b02c2..c3d2b355 100644 --- a/src/jvm/clojure/lang/RestFn0.java +++ b/src/jvm/clojure/lang/RestFn0.java @@ -52,9 +52,9 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke( RT.list(arg1, arg2, arg3, arg4, arg5)); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { - return doInvoke( RT.listStar(arg1, arg2, arg3, arg4, arg5, args)); + return doInvoke( RT.listStar(arg1, arg2, arg3, arg4, arg5, RT.seq(args))); } } diff --git a/src/jvm/clojure/lang/RestFn1.java b/src/jvm/clojure/lang/RestFn1.java index 3f846893..7f87d74c 100644 --- a/src/jvm/clojure/lang/RestFn1.java +++ b/src/jvm/clojure/lang/RestFn1.java @@ -56,10 +56,10 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke( arg1, RT.list(arg2, arg3, arg4, arg5)); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { - return doInvoke( arg1, RT.listStar(arg2, arg3, arg4, arg5, args)); + return doInvoke( arg1, RT.listStar(arg2, arg3, arg4, arg5, RT.seq(args))); } } diff --git a/src/jvm/clojure/lang/RestFn2.java b/src/jvm/clojure/lang/RestFn2.java index b65bc28e..53299931 100644 --- a/src/jvm/clojure/lang/RestFn2.java +++ b/src/jvm/clojure/lang/RestFn2.java @@ -57,10 +57,10 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke( arg1, arg2, RT.list(arg3, arg4, arg5)); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { - return doInvoke( arg1, arg2, RT.listStar(arg3, arg4, arg5, args)); + return doInvoke( arg1, arg2, RT.listStar(arg3, arg4, arg5, RT.seq(args))); } } diff --git a/src/jvm/clojure/lang/RestFn3.java b/src/jvm/clojure/lang/RestFn3.java index 7bba686d..9cdcbbb9 100644 --- a/src/jvm/clojure/lang/RestFn3.java +++ b/src/jvm/clojure/lang/RestFn3.java @@ -59,9 +59,9 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke( arg1, arg2, arg3, RT.list(arg4, arg5)); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { - return doInvoke( arg1, arg2, arg3, RT.listStar(arg4, arg5, args)); + return doInvoke( arg1, arg2, arg3, RT.listStar(arg4, arg5, RT.seq(args))); } } diff --git a/src/jvm/clojure/lang/RestFn4.java b/src/jvm/clojure/lang/RestFn4.java index d8518d41..b65c312d 100644 --- a/src/jvm/clojure/lang/RestFn4.java +++ b/src/jvm/clojure/lang/RestFn4.java @@ -61,10 +61,10 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke( arg1, arg2, arg3, arg4, RT.list(arg5)); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { - return doInvoke( arg1, arg2, arg3, arg4, RT.listStar(arg5, args)); + return doInvoke( arg1, arg2, arg3, arg4, RT.listStar(arg5, RT.seq(args))); } } diff --git a/src/jvm/clojure/lang/RestFn5.java b/src/jvm/clojure/lang/RestFn5.java index 52c1d3ce..257d07a3 100644 --- a/src/jvm/clojure/lang/RestFn5.java +++ b/src/jvm/clojure/lang/RestFn5.java @@ -65,9 +65,9 @@ public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke( arg1, arg2, arg3, arg4, arg5, null); } -public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { - return doInvoke( arg1, arg2, arg3, arg4, arg5, args); + return doInvoke( arg1, arg2, arg3, arg4, arg5, RT.seq(args)); } } diff --git a/src/jvm/clojure/lang/Var.java b/src/jvm/clojure/lang/Var.java index afae0caa..a04c8f2a 100644 --- a/src/jvm/clojure/lang/Var.java +++ b/src/jvm/clojure/lang/Var.java @@ -134,7 +134,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return fn.invoke(arg1, arg2, arg3, arg4, arg5); } -public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args) +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args) throws Exception { return fn.invoke(arg1, arg2, arg3, arg4, arg5, args); } |