X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/9174596d5bfc456d06f4cf74a7a67e9b2b09aac3..e87f059319e40b582d5ee8fd815876550f1148b9:/libguile/gsubr.h diff --git a/libguile/gsubr.h b/libguile/gsubr.h index a4dc5602e..065b94766 100644 --- a/libguile/gsubr.h +++ b/libguile/gsubr.h @@ -3,7 +3,8 @@ #ifndef SCM_GSUBR_H #define SCM_GSUBR_H -/* Copyright (C) 1995,1996,1998,2000,2001, 2006, 2008, 2009, 2010 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1998, 2000, 2001, 2006, 2008, 2009, + * 2010, 2011, 2013 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -29,11 +30,6 @@ -SCM_API SCM scm_subr_objcode_trampoline (unsigned int nreq, - unsigned int nopt, - unsigned int rest); - - /* Subrs */ @@ -41,27 +37,36 @@ SCM_API SCM scm_subr_objcode_trampoline (unsigned int nreq, #define SCM_GSUBR_MAX 10 #define SCM_PRIMITIVE_P(x) (SCM_PROGRAM_P (x) && SCM_PROGRAM_IS_PRIMITIVE (x)) + #define SCM_PRIMITIVE_GENERIC_P(x) (SCM_PROGRAM_P (x) && SCM_PROGRAM_IS_PRIMITIVE_GENERIC (x)) -#define SCM_SUBRF(x) ((SCM (*)()) (SCM_FOREIGN_OBJECT (SCM_SIMPLE_VECTOR_REF (SCM_PROGRAM_OBJTABLE (x), 0), void*))) -#define SCM_SUBR_NAME(x) (SCM_SIMPLE_VECTOR_REF (SCM_PROGRAM_OBJTABLE (x), 1)) -#define SCM_SUBR_GENERIC(x) \ - (SCM_FOREIGN_OBJECT_REF (SCM_SIMPLE_VECTOR_REF (SCM_PROGRAM_OBJTABLE (x), 2), SCM*)) +#define SCM_SUBRF(x) \ + ((SCM (*) (void)) \ + SCM_POINTER_VALUE (SCM_PROGRAM_FREE_VARIABLE_REF (x, 0))) + +#define SCM_SUBR_NAME(x) (SCM_PROGRAM_FREE_VARIABLE_REF (x, 1)) + +#define SCM_SUBR_GENERIC(x) \ + ((SCM *) SCM_POINTER_VALUE (SCM_PROGRAM_FREE_VARIABLE_REF (x, 2))) + #define SCM_SET_SUBR_GENERIC(x, g) \ (*SCM_SUBR_GENERIC (x) = (g)) -SCM_API SCM scm_c_make_gsubr (const char *name, - int req, int opt, int rst, SCM (*fcn) ()); +SCM_INTERNAL int scm_i_primitive_arity (SCM subr, int *req, int *opt, int *rest); +SCM_INTERNAL scm_t_uintptr scm_i_primitive_call_ip (SCM subr); + +SCM_API SCM scm_c_make_gsubr (const char *name, + int req, int opt, int rst, scm_t_subr fcn); SCM_API SCM scm_c_make_gsubr_with_generic (const char *name, int req, int opt, int rst, - SCM (*fcn) (), SCM *gf); -SCM_API SCM scm_c_define_gsubr (const char *name, - int req, int opt, int rst, SCM (*fcn) ()); + scm_t_subr fcn, SCM *gf); +SCM_API SCM scm_c_define_gsubr (const char *name, + int req, int opt, int rst, scm_t_subr fcn); SCM_API SCM scm_c_define_gsubr_with_generic (const char *name, int req, int opt, int rst, - SCM (*fcn) (), SCM *gf); + scm_t_subr fcn, SCM *gf); SCM_INTERNAL void scm_init_gsubr (void);