diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-03-12 23:39:55 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-03-12 23:39:55 +0000 |
commit | 2e300c1a0a82c39d5e6b5766f1e8df422ebf31b1 (patch) | |
tree | 32538aae00d9eb0b549db5d659020e03b3bf293c /src | |
parent | 3ac3bcbd65c828d90853902ad93abbf6884b4d81 (diff) |
fixed bug with invoke >= MAX_POSITIONAL_ARGS
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 209523ca..98d55fec 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -124,8 +124,8 @@ private static final Type[] EXCEPTION_TYPES = {Type.getType(Exception.class)}; static { OBJECT_TYPE = Type.getType(Object.class); - ARG_TYPES = new Type[MAX_POSITIONAL_ARITY + 1][]; - for(int i = 0; i < MAX_POSITIONAL_ARITY; ++i) + ARG_TYPES = new Type[MAX_POSITIONAL_ARITY + 2][]; + for(int i = 0; i <= MAX_POSITIONAL_ARITY; ++i) { Type[] a = new Type[i]; for(int j = 0; j < i; j++) @@ -135,8 +135,8 @@ static Type[] a = new Type[MAX_POSITIONAL_ARITY + 1]; for(int j = 0; j < MAX_POSITIONAL_ARITY; j++) a[j] = OBJECT_TYPE; - a[MAX_POSITIONAL_ARITY] = Type.getType("[LObject;"); - ARG_TYPES[MAX_POSITIONAL_ARITY] = a; + a[MAX_POSITIONAL_ARITY] = Type.getType("[Ljava/lang/Object;"); + ARG_TYPES[MAX_POSITIONAL_ARITY+1] = a; } @@ -2324,7 +2324,7 @@ static class InvokeExpr implements Expr{ } MethodExpr.emitArgsAsArray(restArgs, fn, gen); } - gen.invokeInterface(IFN_TYPE, new Method("invoke", OBJECT_TYPE, ARG_TYPES[Math.min(MAX_POSITIONAL_ARITY, + gen.invokeInterface(IFN_TYPE, new Method("invoke", OBJECT_TYPE, ARG_TYPES[Math.min(MAX_POSITIONAL_ARITY+1, args.count())])); if(context == C.STATEMENT) gen.pop(); |