diff options
Diffstat (limited to 'libguile/gsubr.c')
-rw-r--r-- | libguile/gsubr.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/libguile/gsubr.c b/libguile/gsubr.c index a3b804bb5..d80e5dd42 100644 --- a/libguile/gsubr.c +++ b/libguile/gsubr.c @@ -251,6 +251,17 @@ create_subr (int define, const char *name, return ret; } +int +scm_i_primitive_code_p (const scm_t_uint32 *code) +{ + if (code < subr_stub_code) + return 0; + if (code > subr_stub_code + (sizeof(subr_stub_code) / sizeof(scm_t_uint32))) + return 0; + + return 1; +} + /* Given a program that is a primitive, determine its minimum arity. This is possible because each primitive's code is 4 32-bit words long, and they are laid out contiguously in an ordered pattern. */ @@ -260,9 +271,7 @@ scm_i_primitive_arity (SCM prim, int *req, int *opt, int *rest) const scm_t_uint32 *code = SCM_PROGRAM_CODE (prim); unsigned idx, nargs, base, next; - if (code < subr_stub_code) - return 0; - if (code > subr_stub_code + (sizeof(subr_stub_code) / sizeof(scm_t_uint32))) + if (!scm_i_primitive_code_p (code)) return 0; idx = (code - subr_stub_code) / 4; |