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); }