1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 14:00:21 +02:00

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.
This commit is contained in:
Andy Wingo 2009-02-11 23:04:37 +01:00
parent e14679bd52
commit df8cd091f9

View file

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