From df8cd091f9ffd31a7f77337d2e804d6801ca61ee Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 11 Feb 2009 23:04:37 +0100 Subject: [PATCH] provide program apply_0, apply_1, apply_2 implementations * libguile/programs.c (program_apply_0, program_apply_1) (program_apply_2, scm_bootstrap_programs): Provides some cons-less smob application procedures. This molests some internal interfaces, but hey, we're internal. --- libguile/programs.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libguile/programs.c b/libguile/programs.c index 1c42e15d6..50b1b624b 100644 --- a/libguile/programs.c +++ b/libguile/programs.c @@ -98,6 +98,27 @@ program_apply (SCM program, SCM args) return scm_vm_apply (scm_the_vm (), program, args); } +static SCM +program_apply_0 (SCM program) +{ + return scm_c_vm_run (scm_the_vm (), program, NULL, 0); +} + +static SCM +program_apply_1 (SCM program, SCM a) +{ + return scm_c_vm_run (scm_the_vm (), program, &a, 1); +} + +static SCM +program_apply_2 (SCM program, SCM a, SCM b) +{ + SCM args[2]; + args[0] = a; + args[1] = b; + return scm_c_vm_run (scm_the_vm (), program, args, 2); +} + static int program_print (SCM program, SCM port, scm_print_state *pstate) { @@ -343,6 +364,9 @@ scm_bootstrap_programs (void) scm_tc16_program = scm_make_smob_type ("program", 0); scm_set_smob_mark (scm_tc16_program, program_mark); scm_set_smob_apply (scm_tc16_program, program_apply, 0, 0, 1); + scm_smobs[SCM_TC2SMOBNUM (scm_tc16_program)].apply_0 = program_apply_0; + scm_smobs[SCM_TC2SMOBNUM (scm_tc16_program)].apply_1 = program_apply_1; + scm_smobs[SCM_TC2SMOBNUM (scm_tc16_program)].apply_2 = program_apply_2; scm_set_smob_print (scm_tc16_program, program_print); }