summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-03-12 23:39:55 +0000
committerRich Hickey <richhickey@gmail.com>2008-03-12 23:39:55 +0000
commit2e300c1a0a82c39d5e6b5766f1e8df422ebf31b1 (patch)
tree32538aae00d9eb0b549db5d659020e03b3bf293c /src
parent3ac3bcbd65c828d90853902ad93abbf6884b4d81 (diff)
fixed bug with invoke >= MAX_POSITIONAL_ARGS
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Compiler.java10
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();