Hello, Someone recently posed the question: (why doesn't this work) (into {} (map #([% (* % %)]) [1 2 3 4]))
(reference: http://groups.google.com/group/clojure/browse_thread/thread/7d3ee57ee8041353) The error message was: Caused by: java.lang.IllegalArgumentException: Wrong number of args passed to: PersistentVector How many args were being passed anyway? The code looked fine (to me). It would have been helpful to me to know the number of args being passed was zero. With the patch below the error message would look like this: ... java.lang.IllegalArgumentException: Wrong number of args (0) passed to: PersistentVector ... The patch will handle all cases of wrong arity and report the expected number of args. In some cases (RestFN) the exception will now report the required arity as well as the given arity. There is one improvement that could still be made to the patch: applyTo(ISeq args) -> should report the count of args: - return throwArity(); + return throwArity(-1, reqArity); // TODO/BUG: -1 should be count of args I'm running out the door and don't have time to code this. Please consider this patch - or something like it. diff --git a/src/jvm/clojure/lang/AFn.java b/src/jvm/clojure/lang/ AFn.java index e2646ad..56afa8f 100644 --- a/src/jvm/clojure/lang/ AFn.java +++ b/src/jvm/clojure/lang/ AFn.java @@ -45,110 +45,110 @@ public void run() { public Object invoke() throws Exception { - return throwArity (); + return throwArity (0); } public Object invoke(Object arg1) throws Exception { - return throwArity (); + return throwArity (1); } public Object invoke(Object arg1, Object arg2) throws Exception { - return throwArity (); + return throwArity (2); } public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception{ - return throwArity (); + return throwArity (3); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception { - return throwArity (); + return throwArity (4); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception { - return throwArity (); + return throwArity (5); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception { - return throwArity (); + return throwArity (6); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7) throws Exception { - return throwArity (); + return throwArity (7); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8) throws Exception { - return throwArity (); + return throwArity (8); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9) throws Exception { - return throwArity (); + return throwArity (9); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10) throws Exception{ - return throwArity (); + return throwArity (10); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11) throws Exception { - return throwArity (); + return throwArity (11); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12) throws Exception { - return throwArity (); + return throwArity (12); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13) throws Exception { - return throwArity (); + return throwArity (13); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14) throws Exception { - return throwArity (); + return throwArity (14); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, Object arg15) throws Exception { - return throwArity (); + return throwArity (15); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, Object arg15, Object arg16) throws Exception { - return throwArity (); + return throwArity (16); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, Object arg15, Object arg16, Object arg17) throws Exception { - return throwArity (); + return throwArity (17); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, Object arg15, Object arg16, Object arg17, Object arg18) throws Exception { - return throwArity (); + return throwArity (18); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, Object arg15, Object arg16, Object arg17, Object arg18, Object arg19) throws Exception { - return throwArity (); + return throwArity (19); } public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20) throws Exception { - return throwArity (); + return throwArity (20); } @@ -157,7 +157,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20, Object... args) throws Exception { - return throwArity (); + return throwArity (-1); } public Object applyTo(ISeq arglist) throws Exception { @@ -443,10 +443,35 @@ static public Object applyToHelper(IFn ifn, ISeq arglist) throws Exception { } } -public Object throwArity() { +public Object throwArity(int argNum) { String name = getClass().getSimpleName (); int suffix = name.lastIndexOf ("__"); - throw new IllegalArgumentException("Wrong number of args passed to: " + String number; + if (argNum == -1) { + number = "..."; + } + else { + number = Integer.toString (argNum); + } + throw new IllegalArgumentException("Wrong number of args (" + number + + ") passed to: " + (suffix == -1 ? name : name.substring(0, suffix)).replace('_', '-')); } + +public Object throwArity(int argNum, int reqArity) { + String name = getClass().getSimpleName (); + int suffix = name.lastIndexOf ("__"); + String number; + if (argNum == -1) { + number = "..."; + } + else { + number = Integer.toString (argNum); + } + throw new IllegalArgumentException("Wrong number of args (" + number + + ") (required=" + reqArity + + ") passed to: " + + (suffix == -1 ? name : name.substring(0, suffix)).replace('_', '-')); +} + } diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/ RT.java index a5da74a..c25c489 100644 --- a/src/jvm/clojure/lang/ RT.java +++ b/src/jvm/clojure/lang/ RT.java @@ -476,7 +476,7 @@ static ISeq seqFrom(Object coll) { else { Class c = coll.getClass (); Class sc = c.getSuperclass (); - throw new IllegalArgumentException("Don't know how to create ISeq from: " + c.getSimpleName ()); + throw new IllegalArgumentException("Don't know how to create ISeq from: " + c.getSimpleName() + " / " + c.getName ()); } } diff --git a/src/jvm/clojure/lang/RestFn.java b/src/jvm/clojure/lang/ RestFn.java index 4e15f79..d99afef 100644 --- a/src/jvm/clojure/lang/ RestFn.java +++ b/src/jvm/clojure/lang/ RestFn.java @@ -392,7 +392,7 @@ public Object applyTo(ISeq args) throws Exception { , args.next ()); } - return throwArity (); + return throwArity(-1, reqArity); // TODO/BUG: -1 should be count of args } public Object invoke() throws Exception { @@ -401,7 +401,7 @@ public Object invoke() throws Exception { case 0: return doInvoke (null); default: - return throwArity (); + return throwArity(0, reqArity); } } @@ -414,7 +414,7 @@ public Object invoke(Object arg1) throws Exception { case 1: return doInvoke(arg1, null); default: - return throwArity (); + return throwArity(1, reqArity); } } @@ -429,7 +429,7 @@ public Object invoke(Object arg1, Object arg2) throws Exception { case 2: return doInvoke(arg1, arg2, null); default: - return throwArity (); + return throwArity(2, reqArity); } } @@ -446,7 +446,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception { case 3: return doInvoke(arg1, arg2, arg3, null); default: - return throwArity (); + return throwArity(3, reqArity); } } @@ -465,7 +465,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws case 4: return doInvoke(arg1, arg2, arg3, arg4, null); default: - return throwArity (); + return throwArity(4, reqArity); } } @@ -486,7 +486,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 5: return doInvoke(arg1, arg2, arg3, arg4, arg5, null); default: - return throwArity (); + return throwArity(5, reqArity); } } @@ -509,7 +509,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 6: return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, null); default: - return throwArity (); + return throwArity(6, reqArity); } } @@ -535,7 +535,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 7: return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, null); default: - return throwArity (); + return throwArity(7, reqArity); } } @@ -563,7 +563,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 8: return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, null); default: - return throwArity (); + return throwArity(8, reqArity); } } @@ -593,7 +593,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 9: return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, null); default: - return throwArity (); + return throwArity(9, reqArity); } } @@ -625,7 +625,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 10: return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, null); default: - return throwArity (); + return throwArity(10, reqArity); } } @@ -659,7 +659,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 11: return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, null); default: - return throwArity (); + return throwArity(11, reqArity); } } @@ -695,7 +695,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 12: return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, null); default: - return throwArity (); + return throwArity(12, reqArity); } } @@ -747,7 +747,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object case 13: return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, null); default: - return throwArity (); + return throwArity(13, reqArity); } } @@ -803,7 +803,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, null); default: - return throwArity (); + return throwArity(14, reqArity); } } @@ -862,7 +862,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, null); default: - return throwArity (); + return throwArity(15, reqArity); } } @@ -924,7 +924,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, null); default: - return throwArity (); + return throwArity(16, reqArity); } } @@ -989,7 +989,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, null); default: - return throwArity(); + return throwArity(17, reqArity); } } @@ -1058,7 +1058,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, null); default: - return throwArity(); + return throwArity(18, reqArity); } } @@ -1133,7 +1133,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, null); default: - return throwArity(); + return throwArity(19, reqArity); } } @@ -1216,7 +1216,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, null); default: - return throwArity(); + return throwArity(20, reqArity); } } @@ -1307,7 +1307,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object return doInvoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, ArraySeq.create(args)); default: - return throwArity(); + return throwArity(-1, reqArity); } } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---