fix arity reporting for native-code procs in some cases
svn: r2298
This commit is contained in:
parent
8b42147871
commit
e08caba50b
|
@ -970,6 +970,13 @@ void scheme_wrong_count_m(const char *name, int minc, int maxc,
|
||||||
} else
|
} else
|
||||||
maxc = minc;
|
maxc = minc;
|
||||||
name = scheme_get_proc_name((Scheme_Object *)name, NULL, 1);
|
name = scheme_get_proc_name((Scheme_Object *)name, NULL, 1);
|
||||||
|
} else if (SCHEME_STRUCTP(pa)) {
|
||||||
|
/* This happens when a non-case-lambda is not yet JITted.
|
||||||
|
It's an arity-at-least record. */
|
||||||
|
pa = ((Scheme_Structure *)pa)->slots[0];
|
||||||
|
minc = SCHEME_INT_VAL(pa);
|
||||||
|
maxc = -1;
|
||||||
|
name = scheme_get_proc_name((Scheme_Object *)name, NULL, 1);
|
||||||
} else {
|
} else {
|
||||||
/* complex; use "no matching case" msg */
|
/* complex; use "no matching case" msg */
|
||||||
}
|
}
|
||||||
|
@ -1030,6 +1037,33 @@ char *scheme_make_arity_expect_string(Scheme_Object *proc,
|
||||||
name = scheme_get_proc_name(proc, &namelen, 1);
|
name = scheme_get_proc_name(proc, &namelen, 1);
|
||||||
mina = -2;
|
mina = -2;
|
||||||
maxa = 0;
|
maxa = 0;
|
||||||
|
#ifdef MZ_USE_JIT
|
||||||
|
} else if (SAME_TYPE(SCHEME_TYPE((Scheme_Object *)proc), scheme_native_closure_type)) {
|
||||||
|
Scheme_Object *pa;
|
||||||
|
pa = scheme_get_native_arity((Scheme_Object *)proc);
|
||||||
|
if (SCHEME_BOXP(pa)) {
|
||||||
|
pa = SCHEME_BOX_VAL(pa);
|
||||||
|
}
|
||||||
|
if (SCHEME_INTP(pa)) {
|
||||||
|
mina = SCHEME_INT_VAL(pa);
|
||||||
|
if (mina < 0) {
|
||||||
|
mina = (-mina) - 1;
|
||||||
|
maxa = -1;
|
||||||
|
} else
|
||||||
|
maxa = mina;
|
||||||
|
} else if (SCHEME_STRUCTP(pa)) {
|
||||||
|
/* This happens when a non-case-lambda is not yet JITted.
|
||||||
|
It's an arity-at-least record. */
|
||||||
|
pa = ((Scheme_Structure *)pa)->slots[0];
|
||||||
|
mina = SCHEME_INT_VAL(pa);
|
||||||
|
maxa = -1;
|
||||||
|
} else {
|
||||||
|
/* complex; use "no matching case" msg */
|
||||||
|
mina = -2;
|
||||||
|
maxa = 0;
|
||||||
|
}
|
||||||
|
name = scheme_get_proc_name((Scheme_Object *)proc, &namelen, 1);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
Scheme_Closure_Data *data;
|
Scheme_Closure_Data *data;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user